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

Bonjour à tous,

J'ai une erreur :

Erreur d'exécution '13':

Incompatibilite de type

dans la ligne :

        Tmp = Split(TextLine, ",")

Et si je commente la ligne :

    Dim Tmp()

J'ai une erreur de compilation:

Incompatibilité de type: tableau ou type défini par l'utilisateur attendu

dans la ligne :

            TXT = TXT & Concat(Tmp)
Sub ModifTexte()
    Dim TXT    As String
    Dim TextLine As String
    Dim Jr As Long, Hr As Long
    Dim Tmp()

    Filename = ThisWorkbook.Path & "\Jobs.txt"
    ' Fichier "Jobs.txt"
    'TRANSMIT , WAITING, 1, "", 20171110, 1030, 20171110, 1030, 20171116, 1025, 1, 0, immediately, 1, "(1).txt", 1, 0, "Job #1", 0
    'TRANSMIT , WAITING, 1, "", 20171110, 1115, 20171110, 1115, 20171116, 1110, 1, 0, immediately, 1, "(2).txt", 1, 0, "Job #2", 0
    'TRANSMIT , WAITING, 1, "", 20171111, 0200, 20171111, 0200, 20171117, 0155, 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 = Split(TextLine, ",")

        If IsArray(Tmp) Then
            MsgBox UBound(Tmp)
           Jr = Day(Date)
            Hr = Hour([I1])
            If Hr >= 0 And Hr <= 9 Then
                Jr = Jr + 1
            End If
            Tmp(4) = Year(Date) & Month(Date) & Jr    ' 20171116
            Tmp(5) = Format(Hour(Time), "##") & Format(Minute(Time), "00")    ' 1500
            Tmp(6) = Year(Date) & Month(Date) & Jr    ' 20171117
            Tmp(7) = Format(Hour(Time), "##") & Format(Minute(Time), "00")    ' 1500
            Tmp(8) = Year(Date) & Month(Date) & Jr    ' 20171116
            Tmp(9) = Format(Hour(Time), "##") & Format(Minute(Time) - 5, "00")  ' 1655
            Debug.Print UBound(Tmp)
            Tp = Tmp
            TXT = TXT & Concat(Tmp)
            [I1] = [I1] + [F1]
        End If
    Loop
    Close #1
    Open Filename For Output As #1    'Ouverture du fichier en écriture.
    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 = 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

Merci d'avance.

Bonsoir,

Essayer

Dim Tmp() As String

Bonsoir Thev,

Erreur sur cette ligne :

            TXT = TXT & Concat(Tmp)

Bonsoir,

La déclaration est presque bonne :

Dim Tmp()

mis à part qu'il ne faut pas mettre les parenthèses :

Dim Tmp

donc :

Sub Test()

    Dim Tmp

    Tmp = Split(TextLine, ",")
    '...

End Sub

sachant que la base est 0 : Tmp(0)

Bonsoir,

[[quote="amgue"]TXT = TXT & Concat(Tmp)[/quote]Essayer

TXT = TXT & Join(Tmp, vbCrLf)

Bonsoir Theze, thev,

Theze > le code :

    Dim Tmp
    ...
    Tmp = Split(TextLine, ",")

provoque une erreur dans la ligne :

            TXT = TXT & Concat(Tmp)

thev > J'ai besoin de joindre la parties du tableau avec le séparateur "," et la fin de chaque ligne un retour chariot.

Bonjour,

La fonction Split() retourne un tableau à une dimension en base 0 (comme dit plus haut sachant que la base est 0 : Tmp(0)

Donc, si c'est un tableau qui est retourné, il faut le traiter comme tel !

J'ai supposé que "Concat" est une fonction perso alors, pour le test, je t'ai concocté un petit code afin que tu comprennes le fonctionnement. Avec la fonction Join() comme te l'a proposé Thev (ça évite la boucle, donc, plus rapide) ou avec appel de la fonction Concat() :

Sub Test()

    Dim Tmp
    Dim TextLine As String
    Dim TXT As String

    TextLine = "Mot 1,Mot 2,Mot 3, Mot 4,Mot 5"
    Tmp = Split(TextLine, ",")

    TXT = "Début de concaténation : "

    'ici avec "Join() comme présenté par Thev :
    TXT = TXT & Join(Tmp, "-----")

    MsgBox TXT

    TXT = "Début de concaténation : "

    'ou avec une fonction de concaténation :
    TXT = TXT & Concat(Tmp)

    MsgBox TXT

End Sub

Function Concat(Tbl) As String

    Dim Chaine As String
    Dim I As Integer

    For I = 0 To UBound(Tbl)

        Chaine = Chaine & Tbl(I) & IIf(I < UBound(Tbl), "-----", "")

    Next I

    Concat = Chaine

End Function

Bonsoir Theze,

Merci pour le code.

Avec Join, mon code sera le suivant :

TXT = TXT & Join(Tmp, ",")& vbCrLf

Une autre chose :

Dans TextLine, il y a des sous-chaines entre doubles guillemets. : "Job #1"

On se retrouve, dans la réécriture de cette sous-chaîne, comme ceci : ""Job #1"" (Avec doubles guillemets dupliquées.)

Aussi, tout le contenu du fichier TXT sera entouré par des doubles guillemets ("TXT")

Comment éviter cela ?

71jobs-v002.xlsm (22.88 Ko)
71jobs-test.txt (4.28 Ko)

Bonjour,

C'est l'instruction Write qui ajoute les guillemets, utilise Print :

Open Filename For Output As #1    'Ouverture du fichier en écriture.
    Print #1, TXT     'Je stock dans mon fichier la variable TXT
Close #1

Bonsoir Theze,

Merci pour ta solution

Rechercher des sujets similaires à "probleme declaration tableau"