Macro classement infos

Bonjour,

J'aimerai faire une macro permettant de classer par colonne un certain nombre d'informations.

Dans un fichier .txt j'ai plusieurs groupes d'informations organisées de cette façon :

Info1 : ....a

Info2 : ....a

Info3 : ....a

Info1 : ....b

Info2 : ....b

Info3 : ....b

Les "titres" sont les mêmes pour chaque bloque mais les informations indiquées sont différentes.

J'aimerai pouvoir classer ces informations dans un tableau Excel sous cette forme :

Info1 Info2 Info3

....a ....a ....a

....b ....b ....b

Pouvez-vous m'aider ?

Merci.

Bonjour,

pour éviter d' écrire une macro qui ne corresponde pas à tes besoins, merci de joindre un fichier (txt) et fichier résultat attendu

Le fichier .txt ressemble à ça :

Nom : Dupont

Prenom : Albert

Age : 57 ans

Nom : Martin

Prenom : Laura

Age : 30 ans

Nom : Jardin

Prenom : François

Age : 34 ans

et je souhaite avoir le rendu qu'il y a dans le fichier Excel en pièce jointe.

Merci.

14test2.xlsx (8.37 Ko)
10test.txt (138.00 Octets)

bonjour,

une solution via une macro

Sub aargh()
    k = 1
    Cells.ClearContents
    Cells(1, 1).Resize(, 3) = Split("Nom,Prenom,Age", ",")
    Open "d:\downloads\test.txt" For Input As 1 'adapter le nom du fichier
    While Not EOF(1)
        Line Input #1, ligne
        If ligne <> "" Then
            t = Split(ligne, " : ")
            Select Case t(0)
            Case "Nom"
                col = 1
                k = k + 1
            Case "Prenom"
                col = 2
            Case "Age"
                col = 3
            End Select
            Cells(k, col) = t(1)
        End If
    Wend
    Close 1
End Sub

bonjour,

La macro fonctionne bien pour ces 3 colonnes mais j'ai souhaité rajouter des colonnes (11 en tout), les colonnes se mettent bien en place mais le contenu des colonnes ne se rajoute pas. Avez-vous une idée d'ou peut venir mon erreur ?

Merci

Bonjour

difficile de dire ce qui ne va pas dans ton code sans avoir le code ;o)

Voici le code qui ne fonctionne pas...

Sub aargh()

k = 1

Cells.ClearContents

Cells(1, 1).Resize(, 11) = Split("Nom,prenom,age,adresse,ville,codepostal,departement,region,pays,continent,datedenaissance", ",")

Open "C:\Users\user\Desktop\UsersList.txt" For Input As 1

While Not EOF(1)

Line Input #1, ligne

If ligne <> "" Then

t = Split(ligne, " : ")

Select Case t(0)

Case "Nom"

col = 1

k = k + 1

Case "prenom"

col = 2

Case "age"

col = 3

Case "adresse"

col = 4

Case "ville"

col = 5

Case "codepostal"

col = 6

Case "departement"

col = 7

Case "region"

col = 8

Case "pays"

col = 9

Case "continent"

col = 10

Case "datedenaissance"

col = 11

End Select

Cells(k, col) = t(1)

End If

Wend

Close 1

End Sub

Bonjour,

vérifie bien que les textes que tu as mis après les instruction case dans le Select correspondent bien aux libellés du fichier texte (vérifie particulièrement la casse, "prenom" est différent de "Prenom" ).

je te mets une version plus courte du code et qui résout le problème de la casse.

Sub aargh()
    k = 1
    Cells.ClearContents
    Cells(1, 1).Resize(, 11) = Split("Nom,prenom,age,adresse,ville,codepostal,departement,region,pays,continent,datedenaissance", ",")
    Open "d:\downloads\test.txt" For Input As 1    'adapter le nom du fichier
    While Not EOF(1)
        Line Input #1, ligne
        If ligne <> "" Then
            t = Split(ligne, " : ")
            If UCase(t(0)) = "NOM" Then k = k + 1
            Set re = Rows(1).Find(t(0), lookat:=xlWhole)
            If Not re Is Nothing Then
                Cells(k, re.Column) = t(1)
            End If
        End If
    Wend
    Close 1
End Sub
4minia.xlsm (14.43 Ko)

Bonjour,

Avec ce nouveau code j'ai un problème, les 11 colonnes sont bien créées mais la première et la 11e sont nommées par la première valeur disponible (ex : DUPONT à la place de Nom) et les colonnes ne sont toujours pas remplies..

J'ai seulement copié collé....

bonjour,

minia a écrit :

j'ai seulement copié collé....

j'ai seulement fait avec les infos à ma disposition ...

la code basé sur le fichier test que tu as envoyé fait l'hypothèse que la première ligne d'un bloc commence par NOM : . Je suppose que ce n'est pas le cas avec ton fichier réel.

remplace "NOM" dans cette ligne

If UCase(t(0)) = "NOM" Then k = k + 1

par le nom (en majuscules) du premier champ qui commence un bloc.

sinon mets-nous un exemple de ton fichier txt réel.

C'était bien ça l'erreur merci par contre seulement la première et la dernière colonnes se remplissent avec les valeurs. Les 9 autres sont bien créées mais restent vident, une idée ?

re-bonjour minia,

ce serait tellement plus simple de t'aider si tu daignais mettre un exemple représentatif de ton fichier ...

les noms des colonnes doivent correspondre aux libellés identifiant les données dans ton fichier txt

Bonjour,

Voila en pièce jointe le fichier txt (avec un seul bloc d'information pour le test). et voici le code que j'ai suite à ta dernière réponse :

Sub aargh()

k = 1

Cells.ClearContents

Cells(1, 1).Resize(, 11) = Split("DistinguishedName,Enabled,GivenName,LastLogonDate,Name,ObjectClass,ObjectGUID,SamAccountName,SID,Surname,UserPrincipalName", ",")

Open "C:\Users\a.bruyere\Desktop\UsersList.txt" For Input As 1 'adapter le nom du fichier

While Not EOF(1)

Line Input #1, ligne

If ligne <> "" Then

t = Split(ligne, " : ")

If UCase(t(0)) = "DISTINGUISHEDNAME" Then k = k + 1

Set re = Rows(1).Find(t(0), lookat:=xlWhole)

If Not re Is Nothing Then

Cells(k, re.Column) = t(1)

End If

End If

Wend

Close 1

End Sub

Merci pour ton aide.

2test.txt (427.00 Octets)

re-bonjour,

voici un code qui fonctionne sur le fichier test.txt que tu as fourni

Sub aargh()
    k = 1
    Cells.ClearContents
    Cells(1, 1).Resize(, 11) = Split("DistinguishedName,Enabled,GivenName,LastLogonDate,Name,ObjectClass,ObjectGUID,SamAccountName,SID,Surname,UserPrincipalName", ",")
    Open "d:\downloads\test.txt" For Input As 1    'adapter le nom du fichier
    While Not EOF(1)
        Line Input #1, ligne
        If ligne <> "" Then
            t = Split(ligne, " : ")
            If UCase(t(0)) = "DISTINGUISHEDNAME" Then k = k + 1
            Set re = Rows(1).Find(Trim(t(0)), lookat:=xlWhole)
            If Not re Is Nothing Then
                Cells(k, re.Column) = t(1)
            End If
        End If
    Wend
    Close 1
End Sub

Merci beaucoup pour ton aide et ta patience j'ai exactement le résultat que je souhaitais !

Merci

Rechercher des sujets similaires à "macro classement infos"