Macro excel:coder "pour toutes les feuilles&q

pitchounette -  
JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   -
dans une macro excel, comment coder :
- "pour tous les fichiers .XLS d'un répertoire"
et
- "pour toutes les feuilles d'un fichier"

Merci pour votre réponse !

1 réponse

  1. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonsoir,

    1) pour les fichiers :
    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
    
    Sub macro_sur_fichiers_xls_Dossier()
    ' recherche les feuilles de calcul dans une arborescence d'un dossier (et sous dossiers si ".SearchSubFolders = True")
    '
    Dim fs, i, V_Dossier, V_Nb_Files
    Dim fso As New FileSystemObject
    
    V_Dossier = GetDirectory("choisissez le dossier à traiter ")
    If V_Dossier <> "" Then
    
    Set fs = Application.FileSearch
    With fs
        .LookIn = V_Dossier
        .SearchSubFolders = True
        .FileType = msoFileTypeExcelWorkbooks   
        If .Execute() > 0 Then
            V_Nb_Files = .FoundFiles.Count
            MsgBox "Ce dossier contient " & V_Nb_Files & " fichier(s) répondant aux critères."
    
            For i = 1 To V_Nb_Files
                Cells(i + 1, 1).Value = .FoundFiles(i)  'affiche les fichiers dans la feuille de calcul. mettre ici le traitement
            Next i
        Else
            MsgBox "Aucun fichier n'a été trouvé."
        End If
    End With
    End Sub

    2) pour les feuilles d'un classeur :
    Sub mesfeuilles()
    Dim i
    i = 1
    For Each vfeuille In ActiveWorkbook.Sheets
        Cells(i, 1) = vfeuille.Name
        i = i + 1
    Next
    End Sub
    un For Each / Next convient

    cordialement
    2