[Catégorie modifiée VB6 -> VBA] extraction de valeurs sous VBA

unix27 Messages postés 4 Date d'inscription vendredi 9 septembre 2011 Statut Membre Dernière intervention 18 septembre 2011 - 9 sept. 2011 à 16:37
unix27 Messages postés 4 Date d'inscription vendredi 9 septembre 2011 Statut Membre Dernière intervention 18 septembre 2011 - 18 sept. 2011 à 14:15
Bonjour,

Je suis débutant en VBA et je voudrai savoir s'il est possible de réaliser la manipulation suivante :
J'ai dans un répertoire plusieurs fichiers txt disposé de cette manière:
fichier1.txt
fichier2.txt
fichier3.txt

Chaque fichier contient des données de ce type :
case1:456;case2:4222;case3:9412
Je voudrai qu'un programme puisse extraire les valeur de chaque fichier pour les incrémenter dans un tableau .xls de la manière suivante :
-------------------------------------
| case1 | case2 | case3
-------------------------------------
fichier1 | 456 | 4222 | 9412
fichier2 | 377 | 7511 | 5666

Est ce qu'on peut faire ça grâce au VBA?

Merci

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 sept. 2011 à 17:08
Bonjour,

Pour ta demande je procederais bien ainsi (bien sur il existe d'autres solutions que d'autres membres pourront surement te donner.. ).
Bref :

etape 1 : Tu créé une feuille "temporaire" dans ton classeur,
etape 2 : Tu passes par l'importation de données externes (séparateur ";") pour ton fichier fichier1.
etape 3 : Tu recopies les données dans la feuille où tu souhaites conserver ces données
Etpa 4 :Tu refais la meme chose avec les autres fichiers textes.( etapes 2 et 3 )

Passes par l'enregistreur de Macro pour obtnir le code dont tu auras besoins pour écrire ta macro.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
PS:Merci d'utiliser les [color=red]balises de Code [color]
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 sept. 2011 à 17:30
Autre solution,
Tu peux passer par la lecture du fichier texte (par macro) puis recupération des valeurs et recopie dans ta feuille...

Par exemple :

Function Lire_Fichier(sNom_Fichier As String) As Variant
Dim intFic As Integer
    intFic =  FreeFile
Dim strLigne As String
Dim Tbl_result()
Dim X
    X = 1
    
'Ouverture du fichier
Open sNom_Fichier For Input As intFic

'Lecture du fichier jusqu'à la fin
While Not EOF(intFic)
    Line Input #intFic, strLigne
    Debug.Print strLigne 'affichage dans la fenetre d'execution
    
    ReDim Preserve Tbl_result(X)
    Tbl_result(X) = strLigne
    X = X + 1
Wend
' Fermeture du Fichier texte
Close intFic

Lire_Fichier = Tbl_result

End Function



Sub crea_tableau()
Dim Tbl()
Dim sFichier As String
    sFichier = "C:\Documents and Settings\j_reynet.INFG-ORLS\Bureau\fichier1.txt"

Tbl = Lire_Fichier(sFichier)

For l = 1 To UBound(Tbl)
i = 1
    Debug.Print Tbl(l)
    ' séparation des cases
    Tbl_Case = Split(Tbl(l), ";")
  
   For C = 0 To UBound(Tbl_Case)
        'recuperation des valeurs des différents case
        Val_Case = Mid(Tbl_Case(C), 7, Len(Tbl_Case(C)) - 6)
        Debug.Print Val_Case
        
        Cells(1, i) = Val_Case
        i = i + 1
    Next
Next

End Sub



Bien sur, il te restes à lui indiquer Où tu veux copier ces données ( nom de la feuille ) et aussi à incrémenter le nombre de lignes ( regardes sur le fofo comment chercher la dernliere ligne d'une feuille).
Et ainsi, modifier la ligne : Cells(1, i) = Val_Case

Ce n'est qu'un exemple, à toi de le modifier selon tes besoins...


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
PS:Merci d'utiliser les [color =red]balises de Cod
0
unix27 Messages postés 4 Date d'inscription vendredi 9 septembre 2011 Statut Membre Dernière intervention 18 septembre 2011
9 sept. 2011 à 18:22
Merci Jordane,

Pour la 1ere solution ca n'est pas possible, les fichiers contiennent des données 'parasites' et les valeurs qui m'interessent du coup ne se trouvent pas forcement toujours au même endroit dans le fichier.
du coup je pense que la seule solution pour les identifier est de repérer dans le texte certains chaines de caractère ("case1" par exemple) et extraire les données chiffrées qui suivent immédiatement après.

autre problème : je ne connais pas à l'avance les noms des fichiers qui sont contenus dans le répertoire en question, il peut très bien n'y en avoir que 2 (fichier1422 et fichier811 par ex) comme des dizaines.

Est ce que ça pose un souci?
Avec un commande dos je peux au préalable en faire la liste et l'intégrer dans une feuille excel si besoin..
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 sept. 2011 à 18:52
Avec un commande dos je peux au préalable en faire la liste et l'intégrer dans une feuille excel si besoin


Avec une commande VBA aussi
-> regardes du côté de FileSearch ( sous office 2007/2010, il te faudra la récupérer sur le net).

-> sinon tu peux en faire la liste par un batch si tu le souhaites..
A toi de voir ce que tu préfères.

je pense que la seule solution pour les identifier est de repérer dans le texte certains chaines de caractère ("case1" par exemple) et extraire les données chiffrées qui suivent immédiatement après.


En effet, si tes fichiers n'ont pas tous la même forme, les solutions que je t'ai proposées ne sont pas adaptées ( sauf pour lire un fichier ligne par ligne).
Par contre, tu devras en effet traiter les chaines de caractères pour identifier tes mots clés ( case1, case2..;) puis extraire les nombres se trouvant apres.

Voici un TUTO qui explique comment manipuler les chaines de caracteres


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
0

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

Posez votre question
unix27 Messages postés 4 Date d'inscription vendredi 9 septembre 2011 Statut Membre Dernière intervention 18 septembre 2011
9 sept. 2011 à 18:59
ok merci encore faut que je me penche la dessus en détail!
0
unix27 Messages postés 4 Date d'inscription vendredi 9 septembre 2011 Statut Membre Dernière intervention 18 septembre 2011
18 sept. 2011 à 14:15
Bonjour !

J'ai pratiquement résolu mon problème de base en procédant ainsi :
Importation de l'intégralité du fichier txt sous une feuille xls (via une macro)
traitement des données sous excel via des formules toutes simples =STXT(celluleref;TROUVE("case1";celluleref)+5;6)
Incrémentation des données obtenues dans une autre feuille excel.

Le seul point ou je bloque est le point de départ. Je ne connais pas les noms des fichiers à traiter à l'avance, j'ai seulement la possibilité de les lister dans ma feuille excel via VBA (merci Jordane). (+ eventuellement chemin d'accès)
Comment faire pour les intégrer en tant que variable dans mon code VBA?
0
Rejoignez-nous