Mise en forme d'un fichier texte sous excel

Messages postés
4
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
10 septembre 2006
-
Messages postés
4
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
10 septembre 2006
-
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



 







Wiwane

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
quels sont les séparateurs, des tabulations? un nombre défini d'espaces?

il va surement falloir refaire (par code) ton fichier texte avant de le travailler...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
4
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
10 septembre 2006

Merci pour votre réponse,
Les separateure sont des nombres définies d'espace.

Wiwane
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
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
Messages postés
4
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
10 septembre 2006

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
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 

'NB : le tableau ressemble à çà :
'(0)       Article   Désignation                                                 Qte
'(1)       Réassort   Qte Env        Qte Non Env
'(2)       00000029   TAPIS TUNEL ZANY ZOO                                                 3
'(3)       1        2
'(4)       00000030   TAPIS ARCHE ETOILE                                                 3
'(5)       3        0
'(6)       00000346   LE VOLANT MAGIQUE                                                 4
'(7)       2        2
'(8)

'   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 

'NB : le tableau ressemble à çà :
'(0)       Article   Désignation                                                 Qte   Réassort   Qte Env        Qte Non Env
'(1)       00000029   TAPIS TUNEL ZANY ZOO                                                 3   1        2
'(2)       00000030   TAPIS ARCHE ETOILE                                                 3   3        0
'(3)       00000346   LE VOLANT MAGIQUE                                                 4   2        2

'   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 

'NB : le tableau ressemble à çà :
'(0)       Article ; Désignation ; Qte ; Réassort   Qte Env ; Qte Non Env
'(1)       00000029 ; TAPIS TUNEL ZANY ZOO ; 3 ; 1 ; 2
'(2)       00000030 ; TAPIS ARCHE ETOILE ; 3 ; 3 ; 0
'(3)       00000346 ; LE VOLANT MAGIQUE ; 4 ; 2 ; 2

'   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

<small> Coloration
syntaxique automatique [AFCK]</small>
       

++
PCPT    [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
ps : les espaces que tu as définis ne sont pas les mêmes que ce que tu avais copié

tu peux tester pour fichier1.txt contenant :

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

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
4
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
10 septembre 2006

Merci beaucoup pour vos réponses rapides, je vais tester sur un exemple et je vous tiendrais au courant;

Wiwane