le fichier créé devrait donc me donner: DE_A;2010;12;YTD;BEABB__PTSY;EUR;UU0600;[ICP None];1789;[None];[None];IN;550
Si les lignes étaient différentes (sauf dernière colonne)...les deux lignes devraient rester dans le fichier combiné :)
Le Code: Dim sFileContent As String
Dim xsLines() As String
Dim i As Long
Dim k As Long
Dim xsFields1() As String
Dim xsFields2() As String
Open "C:\Documents and Settings\nljecou\Desktop\TEST - exampl P1012 BE.csv" For Input As #1
sFileContent = Input(LOF(1), 1)
Close #1
Open "C:\Documents and Settings\nljecou\Desktop\TEST - exampl P1012 LU.csv" For Input As #1
sFileContent = sFileContent & vbNewLine & Input(LOF(1), 1)
Close #1
'# A ce stade, on a stocké dans sFileContent la totalité des deux fichiers.
'# Reste a fusionner les lignes donc le code coincide.
xsLines = Split(sFileContent, vbNewLine)
'# On parcoure les lignes une a une
For i = 0 To UBound(xsLines)
If LenB(xsLines(i)) Then
'# On manipulera plus facilement la ligne.
xsFields1 = Split(xsLines(i), vbTab)
'# On parcoure les autres lignes.
For k = i + 1 To UBound(xsLines)
If LenB(xsLines(k)) Then
xsFields2 = Split(xsLines(k), vbTab)
'# Si les codes coïncident, on supprime la ligne 'k'
If xsFields1(1) = xsFields2(2) Then
xsFields1(2) = Val(xsFields1(2)) + Val(xsFields2(2))
xsFields1(3) = Val(xsFields1(3)) + Val(xsFields2(3))
xsLines(k) = vbNullString
End If
End If
Next k
'# On recolle les champs, pour mettre a jour la ligne
xsLines(i) = Join(xsFields1, vbTab)
End If
Next i
sFileContent = Join(xsLines, vbNewLine)
'# La suppression des lignes fusionnée a généré des lignes vierges.
Do While InStr(sFileContent, vbNewLine & vbNewLine)
'# On les supprime donc
sFileContent = Replace(sFileContent, vbNewLine & vbNewLine, vbNewLine)
Loop
Open "C:\Documents and Settings\nljecou\Desktop\Combined.csv" For Output As #1
Print #1, sFileContent;
Close #1
End Sub
PROBLEME:
pour la ligne de code: xsFields1(2) = Val(xsFields1(2)) + Val(xsFields2(2))
VBA m'affiche: Subscript Out of range
Apréès avoir essayé diverses solutions...je ne trouve toujours pas
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 26 janv. 2011 à 19:08
Salut
Ce n'est pas du code VB.Net ça.
Alors, quel langage utilises-tu ?
La prochaine fois que tu colles du code, utilise la coloration syntaxique (3è icone à droite) qui respectera les indentations = plus facile à lire|comprendre. Merci.
Ton erreur vient du fait que l'une de tes variables indexées ne comporte pas autant de membre que demandé : xsFields1 et|ou xsFields2 n'a pas d'élément d'indice 2.
Rappel : les tableaux commencent à l'index 0 : 2 est donc le 3ème élément.
Mieux vaudrait connaitre le contenu de tes lignes sources, xsLines(i) et xsLines(k), pour savoir si c'est normal.
Que valent i et k ? Est-ce que ton programme fonctionne pour quelques dizaines de lignes puis l'erreur survient-elle en plein milieu = info importante pour savoir s'il s'agit d'une erreur de programmation (mauvais choix de type de variable) ou s'il s'agit d'une particularité de tes données.
A mon avis, cela vient de la première ligne du second fichier que tu 'ajoute' au premier : il est possible que cette première ligne n'aie pas le même format que les données ou soit vide.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)