IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Rassembler tous les classeurs d'un répertoire, ds un classeur ou ds une feuille


Sujet :

Contribuez

  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut Rassembler tous les classeurs d'un répertoire, ds un classeur ou ds une feuille
    Copie les feuilles de calculs dans un seul classeur.
    Deux options :
    - Copier les seules valeurs et le format (ce code)
    - Copier également les formules et les liens : voir la remarque en fin de code

    Tient compte des feuilles protégées. Deux possibilités :
    - Protection sans mot de passe : Déprotège la feuille pour la copie des seules valeurs (macro Copie)
    - Protection avec mot de passe : Génère une erreur récupérée et un message collectant nom du classeur et de la feuille. Ce message n'apparaîtra qu'en fin de macro (Appel)

    Tient compte des classeurs ayant une macro Auto_Open ou Workbook_Open
    Les macros sont désactivées le temps de l'ouverture (macro Ouvrir)

    Tiens compte également les événements relatifs aux feuilles de calculs (macro Copie) (non testé)

    Enfin, restait un éventuel problème de mémoire réglé par un compteur des feuilles copiées avec enregistrement périodique de ThisWorkbook. Ici placé à 200 feuilles, à ajuster selon les besoins (Macro Copie)

    Exécuter la procédure Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public msg As String, Cpt as Integer
     
    Sub Appel()
    Dim FL1 As Workbook, Chemin As String
        Application.ScreenUpdating = False
            Chemin = "D:\xls"
            Set FL1 = ThisWorkbook
            Ouvrir Chemin, FL1
        Application.ScreenUpdating = True
        MsgBox "Pour des raisons de protection ou autres, n'ont pu être copiées " & vbCrLf & msg
    End Sub
    Ouverture des fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Ouvrir(Chemin As String, FL1 As Workbook)
    Dim NomFich As String
        NomFich = Dir(Chemin & "\")
        If NomFich = "" Or Right(NomFich, 4) <> ".xls" Then
             MsgBox "Aucun fichier trouvé dans " & Chemin & "."
             Exit Sub
        End If
        Do While NomFich <> ""
            Application.EnableEvents = False
                Workbooks.Open Chemin & "\" & NomFich
                DoEvents
            Application.EnableEvents = True
            NomFich = ActiveWorkbook.Name
            Copie NomFich, FL1
            NomFich = Dir
        Loop
    End Sub
    Copie des feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub Copie(NomFich As String, FL1 As Workbook)
        Application.EnableEvents = False
            For Each LaFeuille In Workbooks(NomFich).Worksheets
                'MsgBox LaFeuille.Name
                On Error Resume Next
                LaFeuille.Copy After:=FL1.Sheets(FL1.Sheets.Count)
                DoEvents
                If ActiveSheet.Protect = True Then ActiveSheet.Unprotect
                ActiveSheet.UsedRange.Copy
                ActiveSheet.Range("A1").PasteSpecial Paste:=xlValues
                If Err <> 0 Then
                    msg = msg & "Classeur " & NomFich & " feuille " & LaFeuile.Name & vbCrLf
                    Err.Clear
                    On Error GoTo 0
                End If
                DoEvents
                If Cpt Mod 200 = 0 Then
                    ThisWorkbook.Save
                    DoEvents
                End If
            Next
        Application.EnableEvents = True
        'Fermeture du classeur
        Application.DisplayAlerts = False
            Workbooks(NomFich).Close False
        Application.DisplayAlerts = True
        DoEvents
    End Sub
    Remarque : Pour conserver les formules, supprimer les trois lignes (macro Copie)
    If ActiveSheet.Protect = True Then ActiveSheet.Unprotect
    ActiveSheet.UsedRange.Copy
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlValues
    Les événements liés aux feuilles de calculs n'ont pas été testés.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut Copier des feuilles de ts les classeurs d'1 répertoire à la suite ds 1 seule feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public msg As String
     
    Sub Appel() 'A ADAPTER
    Dim Chemin As String
        Application.ScreenUpdating = False
            Chemin = "D:\xls\Test\"
            Ouvrir Chemin
        Application.ScreenUpdating = True
        If msg <> "" Then _
        MsgBox "Pour des raisons de protection ou autres, n'ont pu être copiées " & vbCrLf & msg
    End Sub
    Ouverture des classeurs d'un répertoire donné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Ouvrir(Chemin As String)
    Dim NomFich As String
    Dim CL2 As Workbook 'fichier copié
        Application.DisplayAlerts = False 'Evite les messages d'Excel
        'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
        Application.EnableEvents = False
            NomFich = Dir(Chemin & "*.xls")
            If NomFich = "" Then
                 MsgBox "Aucun fichier trouvé dans " & Chemin
                 Exit Sub
            End If
            Do While NomFich <> ""
                Set CL2 = Workbooks.Open(Chemin & NomFich)
                DoEvents
                Copie CL2
                CL2.Close False
                DoEvents
                ThisWorkbook.Save 'enregistrement du classeur après chaque copie
                DoEvents
                NomFich = Dir
            Loop
        Application.EnableEvents = True
        Application.DisplayAlerts = True
    End Sub
    Copie à la suite, dans une feuille unique, des données de toutes les feuilles du classeur CL2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Copie(CL2 As Workbook)
    Dim LaFeuille As Worksheet, FL1 As Worksheet, derlig as long
        Set FL1 = ThisWorkbook.Worksheets("feuil1") 'feuille où les données sont collées
        For Each LaFeuille In CL2.Worksheets 'parcours du classeur à copier
            'On vérifie que la feuille n'est pas vide
            If Not (LaFeuille.UsedRange.Address = "$A$1" And Range("A1") = "") Then
                DerLig = FL1.Range("A" & Rows.Count).End(xlUp).Row + 1 'première ligne vide
                On Error Resume Next
                LaFeuille.UsedRange.Copy FL1.Cells(DerLig, 1)
                DoEvents
                If Err <> 0 Then
                    msg = msg & "Classeur " & NomFich & " feuille " & LaFeuile.Name & vbCrLf
                    On Error GoTo 0
                End If
            End If
        Next
    End Sub
    La gestion d'erreur est une simple précaution. Utile pour la copie de feuilles complètes en cas de protection, pas nécessairement pour la copie des seules données (?)

Discussions similaires

  1. boucle analyser tous les fichiers d'un répertoire
    Par petitange_lili dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2007, 20h02
  2. Copier tous les fichiers d'un répertoire vers un autre
    Par papilou86 dans le forum Langage
    Réponses: 1
    Dernier message: 09/09/2006, 01h02
  3. Réponses: 2
    Dernier message: 15/08/2006, 16h43
  4. Traiter tous les fichiers d'un répertoir sans les MFC.
    Par radicalrider dans le forum MFC
    Réponses: 12
    Dernier message: 21/06/2006, 17h18
  5. Réponses: 4
    Dernier message: 24/09/2004, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo