wiwane
Messages postés4Date d'inscriptionvendredi 8 septembre 2006StatutMembreDernière intervention10 septembre 2006
-
8 sept. 2006 à 08:02
wiwane
Messages postés4Date d'inscriptionvendredi 8 septembre 2006StatutMembreDernière intervention10 septembre 2006
-
10 sept. 2006 à 19:48
Bonjour,
Je veux récupérer des données (3000 lignes environ) en format txt sous excel mais les deux dernières colonnes sont décalées pas un retour à la ligne. Voici le fichier source comment il se présente :
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Article Désignation Qte
Réassort Qte Env Qte Non Env
00000029 TAPIS TUNEL ZANY ZOO 3
1 2
00000030 TAPIS ARCHE ETOILE 3
3 0
00000346 LE VOLANT MAGIQUE 4
2 2
Et voila le format que je souhaite avoir sur excel pour que je puisse traité les données :
Article Désignation QteRéassort Qte Env Qte Non Env
00000029 TAPIS TUNEL ZANY ZOO 3 1 2
00000030 TAPIS ARCHE ETOILE 3 3 0
00000346 LE VOLANT MAGIQUE 4 2 2
Je vous remercie d’avance si quelqu’un a des conseils à me donner car je suis un néophyte en programation VBA (quelques notions. Bonne journée
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 10 sept. 2006 à 12:58
tu dis les 2 première colonnes mais ton exemple montre les 3 premières.
espaces définis ok, mais chaque colonne séparée par le même nombre d'espaces? oui non combien?
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
wiwane
Messages postés4Date d'inscriptionvendredi 8 septembre 2006StatutMembreDernière intervention10 septembre 2006 10 sept. 2006 à 15:24
les deux dernieres colonnes sont décalées par un retour à la lignes. Sur le fichier textes les espaces entre les colonnes sont défini comme :
Colonne1-2 : 3 esp
colonne 2-3 : 49 esp
colonne 3-4 : 3 esp
colonne 4-5 : 8 esp
Merci
Wiwane
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 10 sept. 2006 à 16:40
deux dernières... j'avais mal lu.
restructuration des fichiers, j'espère que çà t'ira
Option Explicit
Private Sub Form_Load()
' lit le fichier et enregistre les lignes non-vides en tableau
Dim FF%, sLine$, aLines$()
FF = FreeFile
ReDim aLines(0)
Open "C:\fichier1.txt" For Input As #FF
Do While Not EOF (FF)
Input #FF, sLine
sLine = Trim$(sLine)
If LenB(sLine) > 0 Then
aLines(UBound(aLines)) = sLine
ReDim Preserve aLines( UBound (aLines) + 1)
End If
Loop
Close #FF
' on va maintenant rassembler chaque paire de ligne et mettre le séparateur voulu (3 espaces)
Dim i&, aNewLines$()
ReDim aNewLines(UBound(aLines) / 2 - 1)
For i = 0 To UBound(aNewLines)
aNewLines(i) = aLines(i * 2) & " " & aLines(i * 2 + 1)
Next i
Erase aLines
' y'a plus qu'à enregistrer
FF = FreeFile
Open "C:\fichier2.txt" For Output As #FF 'C:\fichier2.txt , à toi de voir si tu remplaces le 1er ou non
For i = 0 To UBound (aNewLines)
Print #FF, aNewLines(i) & vbCrLf 'enleve "& vbCrLf" si tu ne veux pas de lignes vides supplémentaires entre chaque
Next i
Close #FF
' maintenant on va enregistrer avec un nouveau séparateur disons " ; "
Const SEPAR As String = " ; " 'tu mets ce que tu veux...., ex : VBTAB (tabulation)
Dim c1$, c2$, c3$, c4$, c5$
For i = 0 To UBound (aNewLines)
c1 = MyLeft(aNewLines(i), Space(3))
c2 = MyLeft(aNewLines(i), Space (49))
c3 = MyLeft(aNewLines(i), Space(3))
c4 = MyLeft(aNewLines(i), Space (8))
c5 = aNewLines(i)
aNewLines(i) = c1 & SEPAR & c2 & SEPAR & c3 & SEPAR & c4 & SEPAR & c5
Next i
' on en voit le bout, on sauve ;)
FF = FreeFile
Open "C:\fichier3.txt" For Output As #FF 'C:\fichier3.txt , à toi de voir ...
For i = 0 To UBound (aNewLines)
Print #FF, aNewLines(i) & vbCrLf 'enleve "& vbCrLf" si tu ne veux pas de lignes vides supplémentaires entre chaque
Next i
Close #FF
Erase aNewLines
Unload Me
End Sub
'
'
Function MyLeft(ByRef sStr As String, sSepar As String) As String
Dim lPos As Long
lPos = InStr(1, sStr, sSepar)
If lPos = 0 Then
MyLeft = vbNullString
Else
MyLeft = LeftB$(sStr, (lPos * 2) - 2)
sStr = RightB$(sStr, LenB (sStr) - LenB(MyLeft) - LenB(sSepar))
End If
End Function