Copier coller la feuil1 de 12 classeurs

Bonjour a tous et toutes

Je suis a la recherche d'une macro pour copier toutes les feuil1 (onglet nommé au Mois) dans un seul et unique classeur.

mes 12 fichiers ce trouve dans le meme dossier.

je voudrais pourvoir regrouper ces fichier dans un seul classeur.

Merci de votre aide

Re bonjour

Je me suis peut-être pas bien exprimé.

Dans le dossier 2017, j'ai douze fichiers nommés au mois. ( janvier,février,mars,etc...)

Dans chaque fichier j'ai 3 onglets.

Je voudrais copier l'onglets feuil1 dans un seul classeur afin d'avoir un fichier au lieu de douze.

Merci beaucoup de vôtre aide

Bonjour,

Une piste qui doit probablement être adaptée !

Le code ci-dessous doit être mis dans un module standard du classeur devant récupérer les différentes valeurs des différentes feuilles. Tous les classeurs (classeurs des douze mois) doivent se trouver dans le même dossier que celui contenant la procédure, si ce n'est pas le cas, il faudra indiquer le chemin soit en dur dans le code soit à l'aide de "Application.FileDialog" :

Sub Test()

    Dim Cls As Workbook
    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Tbl() As String
    Dim I As Integer
    Dim J As Integer
    Dim Chemin As String
    Dim Message As String

    Application.ScreenUpdating = False

    'Les fichiers sont dans le même dossier que le classeur contenant cette procédure, à adapter si différent !
    Chemin = ThisWorkbook.Path & "\"

    'appel de la fonction pour récupérer les noms des classeurs
    Tbl = EnumFichiers(Chemin, ".xls*") 'astérisque si tous les fichiers Excel (.xls, .xlsx, .xlsm, etc...)

    'si initialisé (au moins 1 classeur)
    If Not (Not Tbl) Then

        'boucle sur le tableau
        For I = 1 To UBound(Tbl)

            'évite le classeur contenant la procédure !
            If Tbl(I) <> ThisWorkbook.Name Then

                'ouvre le classeur
                Set Cls = Workbooks.Open(Chemin & Tbl(I))

                With Cls.Worksheets(1)

                    'contrôle qu'il y ait au moins une valeur sur la feuille
                    If Application.CountA(.Range(.Cells(1, 1), .Cells(.Rows.Count, .Columns.Count))) <> 0 Then

                        'défini la plage sur toute la première feuille du classeur
                        Set Plage = DefPlage(Cls.Worksheets(1))

                        'ajoute une feuille
                        Set Fe = ThisWorkbook.Worksheets.Add

                        'lui attribue le nom du classeurs en cours
                        Fe.Name = Left(Cls.Name, InStr(Cls.Name, ".") - 1)
                        Fe.Cells(1, 1).Resize(Plage.Rows.Count, Plage.Columns.Count).Value = Plage.Value

                    End If

                End With

                'referme
                Cls.Close False

            End If

        Next I

    End If

    'affiche le message
    If Message <> "" Then MsgBox Message

    Application.ScreenUpdating = True

End Sub

Function EnumFichiers(Chemin As String, Extension As String) As String()

    Dim TableauFichiers() As String
    Dim Fichier As String
    Dim I As Integer

    'complète le chemin le cas échéant
    If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"

    'récupère seulement les fichiers Excel
    Fichier = Dir(Chemin & "*" & Extension)

    'boucle sur les fichiers du dossier
    Do While (Len(Fichier) > 0)

        I = I + 1: ReDim Preserve TableauFichiers(1 To I)
        TableauFichiers(I) = Fichier

        Fichier = Dir()

    Loop

    'retourne le tableau des noms de fichiers
    EnumFichiers = TableauFichiers()

End Function

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

Bonjour these

Deja un gros Merci

Je viens de tester et cela fonctionne prfaitement.

Toutefois j'ai un petit probleme cela recupere les valeurs et pas les formules ni les couleurs de base .

Si il n'y as pas d'autre solution je ferais avec.

Merci beaucoup.

Bonjour,

Dans ce cas, il faut copier la feuille afin de la récupérer à l'identique. Seule la Sub "Test" est modifiée donc, je ne re-poste pas les fonctions, par contre, la fonction DefPlage() n'a plus lieu d'être donc, tu peux la supprimer :

Sub Test()

    Dim Cls As Workbook
    Dim Tbl() As String
    Dim Fe As Worksheet
    Dim I As Integer
    Dim Chemin As String
    Dim Nom As String
    Dim Message As String

    Application.ScreenUpdating = False

    'Les fichiers sont dans le même dossier que le classeur contenant cette procédure, à adapter si différent !
    Chemin = ThisWorkbook.Path & "\"

    'appel de la fonction pour récupérer les noms des classeurs
    Tbl = EnumFichiers(Chemin, ".xls*") 'astérisque si tous les fichiers Excel (.xls, .xlsx, .xlsm, etc...)

    'si initialisé (au moins 1 classeur)
    If Not (Not Tbl) Then

        'boucle sur le tableau
        For I = 1 To UBound(Tbl)

            'évite le classeur contenant la procédure !
            If Tbl(I) <> ThisWorkbook.Name Then

                'ouvre le classeur
                Set Cls = Workbooks.Open(Chemin & Tbl(I))

                'récupère le nom du classeurs en cours pour l'atribuer à la feuille
                Nom = Left(Cls.Name, InStr(Cls.Name, ".") - 1)

                'contrôle si la feuille existe déjà (une erreur est généré si elle n'existe pas)...
                On Error Resume Next
                Set Fe = ThisWorkbook.Worksheets(Nom)

                '...elle n'existe pas, on l'ajoute au classeur...
                If Err.Number <> 0 Then

                    Cls.Worksheets(1).Copy , ThisWorkbook.Worksheets(ThisWorkbook.Sheets.Count)
                    ThisWorkbook.Worksheets(ThisWorkbook.Sheets.Count).Name = Nom

                Else
                    '...elle existe, on construit le message
                    Message = Message & "La feuille '" & Nom & "' du classeur '" & Cls.Name & "' existe déjà dans ce classeur !" & vbCrLf

                End If

                Err.Clear

                'referme
                Cls.Close False

            End If

        Next I

    End If

    'affiche le message si au moins une des feuilles qui devaient être copiées existe déjà afin d'attirer l'attention !
    If Message <> "" Then MsgBox Message

    Application.ScreenUpdating = True

End Sub

Bonjour

Merci beaucoup

Rechercher des sujets similaires à "copier coller feuil1 classeurs"