Mise en forme TXT vers Excel

Résolu
Signaler
Messages postés
5
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008
-
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
-
Bonsoir à toutes et à tous,

Voila, je souhaite mettre en forme des données provenant d'un fichier TXT dans une feuille Excel.
L'explication sera plus simple avec un exemple :

Fichier liste.txt :
Personne 1,Activité 2,4
Personne 1,Activité 1,2
Personne 3,Actvité 3,5
Personne 4,Acivité 2,2
Personne 4,Activité 1,4
........

Le fihier Excel sera donc :
                    | Activité 1 | Activité 2 | Activité 3 |
Personne 1 |       2         |        4        |                  |
Personne 3 |                  |                  |       5         |
Personne 4 |        4        |        2        |                  |

Voila, j'espère avoir été clair.

Merci de toute l'aide que vous pourrez m'apporter.

8 réponses

Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour banzet


Dans le cas de chargement d'un fichier sous Excel, la solution est VBA Excel. Peux-tu essayer le Sub suivant ?
Fais-en un copier-coller dans le code de la feuille de calcul et exécute-le (touche F5). Le fichier liste.txt doit être dans le même répertoire que le classeur Excel.


<hr />
Option Explicit
Sub chargeFichier()
     Dim numeroFichier As Integer
     Dim bufferFichier As String
     Dim TableActivite As Variant
     Dim TableChamps As Variant
     TableActivite = Array("Activité 1", "Activité 2", "Activité 3")
     numeroFichier = FreeFile
     Dim i As Integer
     Dim j As Integer
     Dim k As Integer
     Cells.Clear
     Open ActiveWorkbook.Path & "\liste.txt" For Input As #numeroFichier
     For i = 0 To 2
           Cells(1, i + 2).Value = TableActivite(i)
     Next
     Do Until EOF(numeroFichier)
          Line Input #numeroFichier, bufferFichier            ' lecture séquentielle du fichier .\liste.txt
          TableChamps = Split(bufferFichier, ",")             ' répartition des champs dans un tableau
          j = 2
 ' recherche de la ligne          Do Until TableChamps(0) Cells(j, 1).Value Or Cells(j, 1).Value ""   
              j = j + 1
          Loop
          k = 0
' recherche de la colonne          Do Until TableChamps(1) TableActivite(k) Or k UBound(TableActivite) 
                k = k + 1
          Loop
'
          If TableChamps(1) = TableActivite(k) Then
                Cells(j, 1).Value = TableChamps(0)
                Cells(j, k + 2).Value = TableChamps(2)
          Else
                MsgBox "Ligne " & j & " : la colonne " & TableChamps(1) & " est introuvable."
          End If
      Loop
      Close #numeroFichier
End Sub

<hr />
Amicalement
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour banzet


>> Voila, j'espère avoir été clair.


Oui, tout ce que tu as décrit est parfaitement limpide. Tu as juste oublié de nous dire où était ton problème (et peut-être de lire le règlement).


Ne le prends pas mal.


Amicalement
Messages postés
5
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Bonjour Orohena,

Merci pour ton message, effectivement, je me suis un peu précipité hier dans mon message.
En fait, je suis un vrai débutant dans le domaine de la programmation (tous langages confondus).

Donc, si j'ai bien compris tout ce que j'ai lu sur Internet, j'ai deux langages à ma disposition : VBA avec Excel ou VBS directement dans Windows.
Le seul problème c'est que je ne sais pas lequel choisir (voir un autre) ni comment faire.

Voila, j'espère que ce complément d'informations a répondu à ton interrogation.

Cordialement,
Messages postés
5
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Bonsoir Orohena,

Je te remercie beaucoup pour pour ce code.
Je l'ai testé et il m'indique une erreur "Ligne 3 : La colonne Activité 3 est introuvable" après avoir traité la personne 1.
Puis si je fais OK, il traite la personne 4 mais que l'activité 1.
De plus j'ai remarque que tu avais mis les activités dans un tableau hors, mon fichier TXT comporte plusieurs centaines de personnes et d'activités.

Ce n'est pas grave et je te remercie encore de ce que tu as fait et je vais essayer d'adapter ton code à mon besoin (maintenant que j'ai compris comment faire).

Bonne soirée.
Messages postés
5
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Re Bonsoir  Orohena,

J'ai fais ceci et ça a l'air de fonctionner :
<hr size="2" width="100%" />Sub chargeFichier()
     Dim numeroFichier As Integer
     Dim bufferFichier As String
     Dim TableChamps As Variant
     numeroFichier = FreeFile
     Dim i As Integer
     Dim j As Integer
     Dim k As Integer
     Cells.Clear
     Open ActiveWorkbook.Path & "\liste.txt" For Input As #numeroFichier
       
        Do Until EOF(numeroFichier)
        Line Input #numeroFichier, bufferFichier            ' lecture séquentielle du fichier .\liste.txt
        TableChamps = Split(bufferFichier, ",")             ' répartition des champs dans un tableau
 
 ' recherche de la ligne
          j = 2          Do Until TableChamps(0) Cells(j, 1).Value Or Cells(j, 1).Value ""
              j = j + 1
          Loop

' recherche de la colonne
          k = 2          Do Until TableChamps(1) Cells(1, k).Value Or Cells(1, k).Value ""
                k = k + 1
          Loop
' copie des valeurs
                Cells(j, 1).Value = TableChamps(0)
                Cells(1, k).Value = TableChamps(1)
                Cells(j, k).Value = TableChamps(2)
      Loop
      Close #numeroFichier
End Sub
<hr size="2" width="100%" />Qu'en penses-tu ?

Cordialement,
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Regarde ton fichier, il contient des fautes d'orthographe. C'est pourquoi tu as ces messages d'erreur.

Personne 3,Actvité 3,5
Personne 4,Acivité 2,2

Ton code est bien. Visiblement tu as remplis la première ligne (entêtes de tableau) à la main.

Bonne prog !
Messages postés
5
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Bonsoir,

Les fautes sont corrigées.
La première ligne se remplie toute seule avec le même système que tu as fait pour les lignes.
J'ai vérifié et ça fonctionne parfaitement bien ... encore merci pour le coup de main.

Salutations,
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Merci et bonne fin de week-end