Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec une déclaration d'un tableau

7 réponses
Avatar
Apitos
Bonjour =C3=A0 tous,

J'ai une erreur :

Erreur d'ex=C3=A9cution '13':
Incompatibilite de type

dans la ligne :

Tmp =3D Split(TextLine, ",")

Et si je commente la ligne :

Dim Tmp()

J'ai une erreur de compilation:

Incompatibilit=C3=A9 de type: tableau ou type d=C3=A9fini par l'utilisateur=
attendu

dans la ligne :

TXT =3D TXT & Concat(Tmp)


----------------------------------------
Sub ModifTexte()
Dim TXT As String
Dim TextLine As String
Dim Jr As Long, Hr As Long
Dim Tmp()

Filename =3D ThisWorkbook.Path & "\Jobs.txt"
' Fichier "Jobs.txt"
'TRANSMIT , WAITING, 1, "", 20171110, 1030, 20171110, 1030, 20171116, 1=
025, 1, 0, immediately, 1, "(1).txt", 1, 0, "Job #1", 0
'TRANSMIT , WAITING, 1, "", 20171110, 1115, 20171110, 1115, 20171116, 1=
110, 1, 0, immediately, 1, "(2).txt", 1, 0, "Job #2", 0
'TRANSMIT , WAITING, 1, "", 20171111, 0200, 20171111, 0200, 20171117, 0=
155, 1, 0, immediately, 1, "(3).txt", 1, 0, "Job #3", 0


Open Filename For Input As #1 'Ouverture du fichier en lecture.
Do While Not EOF(1)
Line Input #1, TextLine 'Lecture de la ligne
Tmp =3D Split(TextLine, ",")

If IsArray(Tmp) Then
MsgBox UBound(Tmp)
Jr =3D Day(Date)
Hr =3D Hour([I1])
If Hr >=3D 0 And Hr <=3D 9 Then
Jr =3D Jr + 1
End If
Tmp(4) =3D Year(Date) & Month(Date) & Jr ' 20171116
Tmp(5) =3D Format(Hour(Time), "##") & Format(Minute(Time), "00"=
) ' 1500
Tmp(6) =3D Year(Date) & Month(Date) & Jr ' 20171117
Tmp(7) =3D Format(Hour(Time), "##") & Format(Minute(Time), "00"=
) ' 1500
Tmp(8) =3D Year(Date) & Month(Date) & Jr ' 20171116
Tmp(9) =3D Format(Hour(Time), "##") & Format(Minute(Time) - 5, =
"00") ' 1655
Debug.Print UBound(Tmp)
Tp =3D Tmp
TXT =3D TXT & Concat(Tmp)
[I1] =3D [I1] + [F1]
End If
Loop
Close #1
Open Filename For Output As #1 'Ouverture du fichier en =C3=A9critur=
e.
Write #1, TXT 'Je stock dans mon fichier la variable TXT
Close #1
End Sub

Function Concat(Tb() As Variant) As String
Dim i As Long
For i =3D LBound(Tb) To UBound(Tb)
Concat =3D Concat + Tb(i) & ","
'Enleve la virgule et ajout d'un retour =C3=A0 la ligne
If i =3D UBound(Tb) Then Concat =3D Left(Concat, Len(Concat) - 1) &=
vbCrLf
Next
End Function
-------------------------------

Merci d'avance.

7 réponses

Avatar
MichD
Bonjour,
Essaie comme ceci :
'---------------------------------------------
Dim T As Variant
T = Split("Bonjour,Bonsoir", ",")
If TypeName(T) = "String()" Then
If UBound(T) = 0 Then
'Il y a seulement un élément
Else
'il y a plusieurs éléments séparés par une virgule
End If
End If
End Sub
'---------------------------------------------
MichD
Avatar
Apitos
Bonjour MichD,
Déclaration :
Dim Tmp as Variant
Induit une erreur sur la ligne :
TXT = TXT & Concat(Tmp)
Essaie comme ceci :
'---------------------------------------------
Dim T As Variant
T = Split("Bonjour,Bonsoir", ",")
If TypeName(T) = "String()" Then
If UBound(T) = 0 Then
'Il y a seulement un élément
Else
'il y a plusieurs éléments séparés par une vi rgule
End If
End If
End Sub
'---------------------------------------------
MichD
Avatar
Jacquouille
Bonsoir,
TXT ne fait pas partie des mots-clés d' Excel, comme Somme, time .... ?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Apitos" a écrit dans le message de groupe de discussion :
Bonjour MichD,
Déclaration :
Dim Tmp as Variant
Induit une erreur sur la ligne :
TXT = TXT & Concat(Tmp)
Essaie comme ceci :
'---------------------------------------------
Dim T As Variant
T = Split("Bonjour,Bonsoir", ",")
If TypeName(T) = "String()" Then
If UBound(T) = 0 Then
'Il y a seulement un élément
Else
'il y a plusieurs éléments séparés par une virgule
End If
End If
End Sub
'---------------------------------------------
MichD
Avatar
Michd
Cette ligne de code est impossible
TXT = TXT & Concat(Tmp)
Si tmp = split(Expression,",")
La variable TMP est une variable de type tableau. Une variable "TXT" de type
"String" ne peut pas concaténer une valeur de type string avec un tableau,
et le contenu d'une variable de tpye "Tableau". Cependant, tu peux
concaténer une variable string avec le contenu d'un élément du tableau.
Regarde l'exemple suivant :
'--------------------------------------------
Sub test()
Dim Tmp As Variant
Dim Txt As String
Tmp = Split("Bonjour,Bonsoir", ",")
Txt = "toto"
'T(0) = Premier élément du tableau tmp
't(1) = deuxième élément du tableau tmp
'Si tu veux concaténer la valeur dans Txt et Tmp(0)
Txt = Txt & ", " & (Tmp(0))
MsgBox Txt
'Pour appeler la fonction "Concaténer de la feuille de calcul
'Fais comme ceci, mais elle est boguée et ne fonctionne Excel 2016
'utilise plutôt la méthode précédente avec &
MsgBox Application.WorksheetFunction.Concat("loto", "gagnant")
End Sub
'--------------------------------------------
MichD
"Apitos" a écrit dans le message de groupe de discussion :
Bonjour MichD,
Déclaration :
Dim Tmp as Variant
Induit une erreur sur la ligne :
TXT = TXT & Concat(Tmp)
Essaie comme ceci :
'---------------------------------------------
Dim T As Variant
T = Split("Bonjour,Bonsoir", ",")
If TypeName(T) = "String()" Then
If UBound(T) = 0 Then
'Il y a seulement un élément
Else
'il y a plusieurs éléments séparés par une virgule
End If
End If
End Sub
'---------------------------------------------
MichD
Avatar
Apitos
Bonjour MichD,
Concat() dans mon code est une fonction.
'-----------
Function Concat(Tb As Variant) As String
Dim i As Long
For i = LBound(Tb) To UBound(Tb)
Concat = Concat + Tb(i) & ","
'Enleve la virgule et ajout d'un retour à la ligne
If i = UBound(Tb) Then Concat = Left(Concat, Len(Concat) - 1) & vbCrLf
Next
End Function
'-------------------
Serait-elle à l'origine de l'erreur ?
Avatar
Michd
Cette fonction travaille correctement.
Attention, tu déclares le paramètre "TB" de ta fonction comme "Variant", par
conséquent, TB peut représenter toutes sortes de type de données (Integer,
Long, String, Currency, Double, siingle....) mais à la ligne suivante, dans
la bouche tu utilises les fonctions "Lbound" et "Ubond" s'appliquant qu'à
une variable de type "Tableau" (array). Si le contenu de la variable est
autre chose qu'un tableau, tu auras obligatoirement une erreur.
ATTENTION : "Concat" (Application.WorksheetFunction.Concat()) est un mot qui
existe déjà dans le langage VBA. Il faut éviter d'utiliser ces expressions
réservées à Excel - VBA comme nom de variables, fonctions ou procédures afin
d'éviter de confondre Excel au moment de l'exécution du code.
MichD
Avatar
Apitos
Merci MichD :)