Mise en forme d'un fichier texte sous excel

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



 







Wiwane

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 sept. 2006 à 08:19
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
0
wiwane Messages postés 4 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 10 septembre 2006
9 sept. 2006 à 21:22
Merci pour votre réponse,
Les separateure sont des nombres définies d'espace.

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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 

'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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 sept. 2006 à 16:42
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
0
wiwane Messages postés 4 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 10 septembre 2006
10 sept. 2006 à 19:48
Merci beaucoup pour vos réponses rapides, je vais tester sur un exemple et je vous tiendrais au courant;

Wiwane
0
Rejoignez-nous