Ouvrir des fichiers .xls avec une macro excel

Résolu/Fermé
Thubs - 16 oct. 2003 à 10:43
 amanin - 10 avril 2008 à 20:18
Bonjour,
j'ai un petit problème avec Excel. Je crée une macro qui doit aller vérifier des données dans plusieurs fichiers excel d'un même dossier.
Le nombre de ces fichiers et leur nom est variable, donc il faudrait que la macro fasse une recherche de "*.xls" dans le dossier et puisse les ouvrir tous.
Est ce que c'est faisable ?

Merci
Phil
A voir également:

4 réponses

JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
8 févr. 2007 à 18:12
Bonsoir,

voici une vieille contribution réaménagée :
Option Explicit
     Public dossier
     Public Type BROWSEINFO
        hOwner As Long
        pidlRoot As Long
        pszDisplayName As String
        lpszTitle As String
        ulFlags As Long
        lpfn As Long
        lParam As Long
        iImage As Long
     End Type
     '32-bit API declarations
     Declare Function SHGetPathFromIDList Lib "shell32.dll" _
     Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
     Declare Function SHBrowseForFolder Lib "shell32.dll" _
     Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Function GetDirectory(Optional Msg) As String
     Dim bInfo As BROWSEINFO
     Dim path As String
     Dim r As Long, x As Long, pos As Integer
     bInfo.pidlRoot = 0&
     If IsMissing(Msg) Then
     bInfo.lpszTitle = ""
     Else
     bInfo.lpszTitle = Msg
     End If
     bInfo.ulFlags = &H1
     x = SHBrowseForFolder(bInfo)
     path = Space$(512)
     r = SHGetPathFromIDList(ByVal x, ByVal path)
     If r Then
     pos = InStr(path, Chr$(0))
     GetDirectory = Left(path, pos - 1)
     Else
     GetDirectory = ""
     End If
End Function
Sub Traiter_Dossier()
'Objectif : traiter les fichiers d'un répertoire
'
Dim fs, i,  nomfich, FileNumber, specfichier, nbfichiers
Dim fso As New FileSystemObject
dossier = GetDirectory("choisissez le dossier à traiter")
If dossier <> "" Then
    Set fs = Application.FileSearch
    With fs
        .LookIn = dossier
        .SearchSubFolders = True
        .FileType = msoFileTypeAllFiles
        If .Execute() > 0 Then
            nbfichiers = .FoundFiles.Count
            MsgBox "Ce dossier contient " & nbfichiers & " fichier(s) répondant aux critères."
            For i = 1 To nbfichiers
                specfichier = .FoundFiles(i)

                '*********************
                'Mettre ici le traitement à réaliser
                '*********************

           Next i
        Else
            MsgBox "Aucun fichier n'a été trouvé."
        End If
    End With
End If
End Sub
ne pas oublier de référencer "Microsoft scripting runtime" (menu outils/références... dans VBA)

A+
6
Merci bcp JvDo!
Par contre, j'ai un autre souci: le dossier que j'explore contient des fichiers .txt que je dois ouvrir avec Excel et mettre en forme en reconnaissant les espaces comme séparateurs de colonnes. Grâce à ton code, j'arrive à obtenir le nom du fichier mais je n'arrive pas à l'ouvrir et un message me disant que le fichier est introuvable apparaît. Je ne sais absolument pas d'où cela peut venir. Quelqu'un aurait-il une idée???
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
12 févr. 2007 à 14:39
Bonjour,

tu ouvres ton fichier avec
Workbooks.OpenText Filename:=specfichier, Origin:= _
     xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
     xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
     Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(1, 1), _
     TrailingMinusNumbers:=True
tu vérifieras les options en faisant un enregistrement manuel de macro.

cordialement
2
je n'aarive pas ouvrir xls que faire
2
Merci filaliabdou :)
Le chemin est "C:\Mes Documents\Devis"
1
Salut Thubs
je rencontre en ce moment exactement le même problème que toi pour l'ouverture d'un nombre inconnu de fichiers dont les noms varient tous. Je sais que cette discussion-là remonte à pas mal de temps mais te souviens-tu de la solution?
merci
0