VBA importation fichiers TXT

VBA importation fichiers TXT - VB/VBA/VBS - Programmation

Marsh Posté le 13-12-2011 à 11:22:55    

Bonjour,
 
Je suis un débutant dans la programmation en VBA et cela fait quelques heures que je cherche sur différents forum comment réaliser une macro qui me permet d'importer les fichiers textes d'un dossier. Je n'ai malheureusement pas réussi à trouver ma réponse c'est pourquoi je me tourne vers vous.  
 
Le but de la macro est que lorsque j'appui sur le bouton, tous les fichiers textes d'un dossier désigné sont importés dans ce fichier excel. Chaque fichier texte doit correspondre à une feuille d'excel. Et le nombre de fichier texte dans le dossier est variable, c'est pourquoi il faut que la macro s'arrete que lorsqu'il a importé TOUT les fichiers.  
 
Pour résumer------>>>  X fichiers textes---->>> 1 fichier excel avec X feuilles
 
Ps: J'utilise excel 2007
 
Si mon message manque d'informations veuillez me les demander, je serais réactif.
 
Merci à ceux qui auront la gentillesse de me donner un coup de main!!! :)
 

Reply

Marsh Posté le 13-12-2011 à 11:22:55   

Reply

Marsh Posté le 13-12-2011 à 20:23:29    

Quel est le comportement lors de l'import dans excel ? y'a t'il des colonnes distinctes ?
 
Si tu copies chaque ligne du fichier texte dans une ligne excel cela suffit t'il ?


---------------
Quand on aime on ne compte pas. Quel Dilemme lorsque l'on aime compter !
Reply

Marsh Posté le 13-12-2011 à 20:52:06    

Xspawn_Lpc a écrit :

Quel est le comportement lors de l'import dans excel ? y'a t'il des colonnes distinctes ?
 
Si tu copies chaque ligne du fichier texte dans une ligne excel cela suffit t'il ?


 
Salut,
 
Oui lorsque je l'ouvre dans excel il y a des colonnes distinctes avec une 30aine de lignes.
Je recois une dizaine de fichier texte par jour avec des résultats, et je dois traiter une portion des résultats.
C'est pourquoi je voudrais avec une macro qui me permet d'importer tous ses fichiers textes dans un classeur excel.
Ensuite je ferais une autre macro qui me permettra de prendre les cellules qui m'intéressent. Mais cette macro me semble plus accéssible, c'est plutot la premiere partie ou je bloque, je ne sais pas comment importer les fichiers textes dans des feuilles distinctes.
 
Merci

Reply

Marsh Posté le 13-12-2011 à 21:13:32    

Ta macro peut faire comme ceci  
 
Boucle qui liste tous les fichier à traiter. Pour chaque fichier :
- Ajout d'un onglet  
- importe le fichier texte dans cet onglet (avec création des colonnes) via la fonction de excel
 


---------------
Quand on aime on ne compte pas. Quel Dilemme lorsque l'on aime compter !
Reply

Marsh Posté le 14-12-2011 à 08:00:07    

ok je vais me pencher dessus.
 
Merci

Reply

Marsh Posté le 20-12-2011 à 09:56:35    

Salut, à adapter pour le séparateur ici vbTab, récursion ou non pour la recherche de fichiers TXT dans sous dossiers éventuels.
 
affecter un bouton à SelDossier pour recherche non récursive
affecter un bouton à SelDossierRecur pour recherche récursive
affecter un bouton à DelFeuilles pour supprimer toutes les feuilles excepté Feuil1 sur laquelle seront à placer les boutons
 

Option Explicit
 
Const TypeFichier As String = "txt"
Const Separateur As String = vbTab
 
Sub DelFeuilles()
Dim i As Long
    For i = Sheets.Count To 1 Step -1
        If Sheets(i).Name <> ShParam.Name Then
            Application.DisplayAlerts = False
            Sheets(i).Delete
            Application.DisplayAlerts = True
        End If
    Next i
End Sub
 
Private Function Extension(sFichier As String) As String
Dim sExt As String
    sExt = Mid$(sFichier, InStrRev(sFichier, "." ) + 1)
    Extension = sExt
End Function
 
Private Sub Lire(ByVal sNomFichier As String)
Dim sChaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Ws As Worksheet
 
    Close
 
    NumFichier = FreeFile
    iRow = 1
 
    Open sNomFichier For Input As #NumFichier
    Set Ws = ThisWorkbook.Sheets.Add
    Ws.Move After:=Worksheets(Sheets.Count)
    Do While Not EOF(NumFichier)
        iCol = 1
        Line Input #NumFichier, sChaine
        Ar = Split(sChaine, Separateur)
        For i = LBound(Ar) To UBound(Ar)
            Ws.Cells(iRow, iCol) = Ar(i)
            iCol = iCol + 1
        Next i
        iRow = iRow + 1
    Loop
    Close #NumFichier
End Sub
 
Private Sub ListeFichiers(sDossier As String)
Dim sFichier As String, sChemin As String
Dim sExtension As String
 
    sFichier = Dir$(sDossier & "\*." & TypeFichier)
    Do While Len(sFichier) > 0
        sChemin = sDossier & "\" & sFichier
        sExtension = Extension(sChemin)
        If UCase$(sExtension) = UCase$(TypeFichier) Then
            Lire sChemin
        End If
        sFichier = Dir$()
    Loop
End Sub
 
Private Sub ListeFichiersRecur(sDossier As String, bRecur As Boolean)
Dim FSO As Object
Dim DossierSource As Object
Dim SousDossier As Object
Dim Fichier As Object
 
    Set FSO = CreateObject("Scripting.FileSystemObject" )
    Set DossierSource = FSO.GetFolder(sDossier)
 
    For Each Fichier In DossierSource.Files
        If UCase$(FSO.GetExtensionName(Fichier)) Like UCase$(TypeFichier) Then
            Lire Fichier
        End If
    Next Fichier
 
    If bRecur Then
        For Each SousDossier In DossierSource.SubFolders
            ListeFichiersRecur SousDossier.Path, True
        Next SousDossier
    End If
 
    Set DossierSource = Nothing
    Set FSO = Nothing
End Sub
 
Sub SelDossier()
Dim sChemin As String
 
    sChemin = ThisWorkbook.Path
 
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = sChemin & "\"
        .Title = "Sélectionner le Dossier"
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "Sélection Dossier"
        .Show
        If .SelectedItems.Count > 0 Then
            Application.ScreenUpdating = False
            ListeFichiers .SelectedItems(1)
            Application.ScreenUpdating = True
        End If
    End With
End Sub
 
Sub SelDossierRecur()
Dim sChemin As String
 
    sChemin = ThisWorkbook.Path
 
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = sChemin & "\"
        .Title = "Sélectionner le Dossier : Recherche Récursive"
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "Sélection Dossier"
        .Show
        If .SelectedItems.Count > 0 Then
            Application.ScreenUpdating = False
            ListeFichiersRecur .SelectedItems(1), True
            Application.ScreenUpdating = True
        End If
    End With
End Sub


 
fichier XLS sur http://cjoint.com/?0LwgUoTpg2G
 
On pourrait peut-être traiter à la volée les données à importer dans la procédure Lire ? mais là c'est à toi de voir
et dans ce cas ne plus utiliser qu'une feuille


Message édité par kiki29 le 22-12-2011 à 06:47:06

---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
Reply

Sujets relatifs:

Leave a Replay

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