Aquerir dans Excel des données venant de fichiers txt

Aquerir dans Excel des données venant de fichiers txt - VB/VBA/VBS - Programmation

Marsh Posté le 15-05-2009 à 12:32:46    

Bonjour à tous !!
 
Je n'ai jamais fait de macro, donc ça va être dur...
 
J'ai pour mon boulot, besoin d'acquérir dans un feuille de calcul, le contenu de deux fichiers txt.
 
Mes fichiers se nomment FFFHXXXX VOIE A.txt et FFFHXXXX VOIE B.txt où XXXX est un nombre qui variera.
 
Ce que je voudrais, c'est un boutton pour acquérir les données de chaques fichiers, pour pouvoir le faire simplement.
 
C'est une opération que je dois faire au boulot 500 fois par an à peu près, donc j'ai besoin que ce soit rapide.
 
Un fois les données dans Excel, je dois les comparer avec une référence, mais ça, je sais faire...
 
Si vous avez des idées... ;)
 
 

Reply

Marsh Posté le 15-05-2009 à 12:32:46   

Reply

Marsh Posté le 15-05-2009 à 15:01:38    

Salut, voir sur http://cjoint.com/?fpqA4Y8BHF et adapter , en particulier pour le type de séparateur.
Sinon c'est décomposé pour des raisons didactiques en 2 étapes, un bouton pour sélectionner le dossier à traiter, puis un de lecture des fichiers texte contenus dans ce dossier ( lecture récursive par défaut )
 
Il aurait fallu au minimum un fichier texte en exemple


Message édité par kiki29 le 15-05-2009 à 16:28:17
Reply

Marsh Posté le 15-05-2009 à 19:42:12    

Une autre approche plus simple permettant la sélection d'un ou plusieurs fichiers texte  


Option Explicit
 
Dim r As Long, Cpt As Long
 
Function Lire(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
 
    Separateur = ","
 
    Close
    NumFichier = FreeFile
 
    Open NomFichier For Input As #NumFichier
        Cpt = Cpt + 1
        Do While Not EOF(NumFichier)
            iCol = 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                ShFichiers.Cells(r, iCol) = Ar(i)
                iCol = iCol + 1
            Next
            r = r + 1
        Loop
        Application.StatusBar = " Fichiers : " & Cpt
    Close #NumFichier
End Function
 
Sub OuvertureFichiersMultiples()
Dim fichier As Variant, i As Integer
    ChDir ThisWorkbook.Path
    fichier = Application.GetOpenFilename("Fichiers Texte,*.txt", 1, "Sélectionner un ou plusieurs fichiers Texte", , True)
    If TypeName(fichier) = "Boolean" Then Exit Sub
     
    r = 2: Cpt = 0
    ShFichiers.Cells.Clear
     
    Application.ScreenUpdating = False
    For i = 1 To UBound(fichier)
        Lire fichier(i)
    Next i
    ShFichiers.Range("D1" ).Select
    Application.ScreenUpdating = True
End Sub


Message édité par kiki29 le 17-05-2009 à 11:40:57
Reply

Marsh Posté le 17-05-2009 à 16:31:42    

ok,
 
C'est un peu compliqué parceque je n'ai pas internet au boulot et pas excel chez moi ;)
 
Je vais essayer ce que tu me propose là, même si à vu de nez comme ça, je n'y comprends pas grand chose... ;)
 
Les fichiers txt que je veux inserer sont celui-ci et celui-là, ce sont des captures de liaisons série hyperterminal.
 
le premier doit être inséré à partir de la case A5 et le deuxième à partir de la case B5 dans la feuille Checksum de ce fichier Excel.
 
Ce que je voudrais, c'est un bouton "Voie A" pour importer le fichier FFFHXXX voie A.TXT dans la case A5 et un bouton "Voie B" pour importer le fichier FFFHXXX voie B.TXT dans la case B5.
Une précision importante, une fois les fichier txt vérifiés, je les déplace dans un autre dossier. Il n'y a donc jamais dans le dossier initial 2 fichiers contenant "voie A" ou "voie B".  
 
J'essaie ce que tu me propose lundi matin au bouot ;)
Merci !

Reply

Marsh Posté le 17-05-2009 à 19:16:44    

Salut, un fichier qui devrait correspondre à ton contexte, à toi de l'adapter si nécessaire http://cjoint.com/?frtoGjJL2w

Reply

Marsh Posté le 17-05-2009 à 20:10:02    

Merci beaucoup !!
 
Comme je t'ai dis, je ne peux pas tester chez moi, j'essai demain au boulot !!

Reply

Marsh Posté le 21-05-2009 à 19:44:46    

Ça fonctionne nikel !! :)
Merci !!
 
J'ai ais comme ça donc :
 
Option Explicit
 
Dim r As Long, Cpt As Long
 
Function Lire(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
 
    Separateur = ","
 
    Close
    NumFichier = FreeFile
 
    Open NomFichier For Input As #NumFichier
        Cpt = Cpt + 1
        Do While Not EOF(NumFichier)
            iCol = 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                ShFichiers.Cells(r, iCol) = Ar(i)
                iCol = iCol + 1
            Next
            r = r + 1
        Loop
        Application.StatusBar = " Fichiers : " & Cpt
    Close #NumFichier
End Function
 
Sub OuvertureFichiersVoieA()
Dim fichier As Variant, i As Integer
    ChDir ThisWorkbook.Path
    fichier = Application.GetOpenFilename("Fichiers Texte,*.txt", 1, "Sélectionnez le fichier voie A", , True)
    If TypeName(fichier) = "Boolean" Then Exit Sub
     
    r = 3: Cpt = 2
     
    Application.ScreenUpdating = False
    For i = 1 To UBound(fichier)
        Lire fichier(i)
    Next i
    ShFichiers.Range("D1" ).Select
    Application.ScreenUpdating = True
End Sub
 
 
Le fichier excel :
 
Ce que j'aimerais maintenant, c'est afficher dans une celulle le nom du fichier ouvert par la macro.
Ça me permettrais de vérifier qu'on ouvre le bon fichier, il faut qu'on ouvre par exemple FFFH1234 VOIE A.txt et FFFH1234 VOIE B.txt, et qu'on ne fasse pas 2 fois la même voie...
 
Ça avance bien !!

Reply

Marsh Posté le 29-05-2009 à 22:42:01    

Bon, j'ai trouvé, c'était bidon en fait (pour rajouter le nom)
 

Code :
  1. Option Explicit
  2. Dim r As Long, Cpt As Long
  3. Function Lire(ByVal NomFichier As String)
  4. Dim Chaine As String
  5. Dim Ar() As String
  6. Dim i As Long
  7. Dim iCol As Long
  8. Dim NumFichier As Integer
  9. Dim Separateur As String * 1
  10.     Separateur = ","
  11.     Close
  12.     NumFichier = FreeFile
  13.     Open NomFichier For Input As #NumFichier
  14.         Cpt = Cpt + 1
  15.         Do While Not EOF(NumFichier)
  16.             iCol = 1
  17.             Line Input #NumFichier, Chaine
  18.             Ar = Split(Chaine, Separateur)
  19.             For i = LBound(Ar) To UBound(Ar)
  20.                 ShFichiers.Cells(r, iCol) = Ar(i)
  21.                 iCol = iCol + 1
  22.             Next
  23.             r = r + 1
  24.         Loop
  25.         Application.StatusBar = " Fichiers : " & Cpt
  26.     Close #NumFichier
  27. End Function
  28. Sub OuvertureFichiersVoieA()
  29. Dim fichier As Variant, i As Integer
  30.     ChDir ThisWorkbook.Path
  31.     fichier = Application.GetOpenFilename("Fichiers Texte,*.txt", 1, "Sélectionnez le fichier voie A", , True)
  32.     If TypeName(fichier) = "Boolean" Then Exit Sub
  33.    
  34.     r = 3: Cpt = 2
  35.    
  36.     Application.ScreenUpdating = False
  37.     For i = 1 To UBound(fichier)
  38.         Lire fichier(i)
  39.     Next i
  40.     ShFichiers.Cells(40, 1) = fichier
  41.     ShFichiers.Range("D1" ).Select
  42.     Application.ScreenUpdating = True
  43. End Sub


 
Merci encore...
Aprè, je m'attaque à la lisaison série en VBA... Mais c'est pas pour tout de suite, et ce sera un autre topic... ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed