Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202175 24 févr. 2009 à 09:46
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:\a.csv" For Input As #1
sFileContent = Input(LOF(1), 1)
Close #1
Open "C:\b.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(1) 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:\c.csv" For Output As #1
Print #1, sFileContent;
Close #1
moscato40
Messages postés27Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention24 juin 2010 24 févr. 2009 à 15:46
Salut Renfield,
un très grand merci pour ce code que je suis en train de m'approprier. J'aimerai connaître ta solution pour gérer le séparateur de décimale.
Faut-il modifier les paramètres locaux ? (ce que je trouve un peu bourrin et dangereux),
Faut-il modifier les CSV avant/après traitement ?
As-tu une autre solutionpour l'application en cours ?
En tout cas merci BOCOU !!!
J'espère pouvoir un jour te rendre la pareille (même si j'en doute fort)