Macro pour importer donnees de plusieurs classeurs

TheYéti Messages postés 3 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je souhaite créer une macro qui stoque les données de plusieurs classeurs d'un même répertoire dans un classeur unique ( appelons le BDDBenoit2). Chaque classeur dispose de plusieurs feuilles ( ex: FormulaireAuvents, FormulaireGC ... ) et ces feuilles sont les mêmes dans BDDBenoit2.

J 'ai le code de la macro d'importation d'un classeur suivante, mais cela ne marche pas :

Sub Imports()
'
' Imports Macro
'

'
Workbooks.Open Filename:= _
"\\192.168.0.3\Public\FSB\Boitenoire\utilisateur_26_06_2013_10_04_23_.xls"
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
ActiveSheet.Paste
Sheets("FormulaireGC").Select
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Sheets("FormulaireGC").Select
Range("A2:M4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Range("A3").Select
ActiveSheet.Paste
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Sheets("FormulaireEsc").Select
Range("A2:L4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Sheets("FormulaireEsc").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("FormulaireBV").Select
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Sheets("FormulaireBV").Select
Range("A2:J4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Range("A2").Select
ActiveSheet.Paste
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Sheets("FormulairePortes").Select
Range("I2:Q4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Sheets("FormulairePortes").Select
Range("A2").Select
ActiveSheet.Paste
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Sheets("FormulaireMC").Select
Range("A2:K4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Sheets("FormulaireMC").Select
Range("A2").Select
ActiveSheet.Paste
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
Sheets("FormulairePC").Select
Range("A2:L4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Sheets("FormulairePC").Select
Range("A2").Select
ActiveSheet.Paste
Windows("utilisateur_26_06_2013_10_04_23_.xls").Activate
ActiveWindow.ScrollWorkbookTabs Position:=xlLast
ActiveWindow.ScrollWorkbookTabs Position:=xlLast
Sheets("FormulairePB").Select
Range("A2:N4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("BDDBenoit2.xlsm").Activate
Sheets("FormulairePB").Select
Range("A2").Select
ActiveSheet.Paste

End Sub

5 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Bonjour,

    Tu peux aller lire cette fiche pratique. Si cela te convient reviens ici demander l'adaptation à ton cas.
    0
  2. TheYéti Messages postés 3 Statut Membre
     
    Bonjour pijaku.

    Ton code semble être le bon, mais est-ce qu'il peut marcher si dans chaque classeur il y a plusieurs feuilles contenant des données à importer ?
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Oui, je penses.
    Il suffit d'adapter le code...
    0
  4. TheYéti Messages postés 3 Statut Membre
     
    OK . Du coup tu pourrai me donner un exemple d'importation de 2 classeurs contenant 2 feuilles chacun ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    J'ai essayé d'adapter mon code à ton cas précis.
    C'est pas simple simple sans pouvoir tester...

    Bon, à toi donc de tester cette macro.
    Adapte là d'abord, il y a pour cela plusieurs commentaires dans le code.

    Pour tester :
    1- Fais une copie du répertoire dans lequel tu as tous tes fichiers
    2- renomme cette copie
    3- travaille à partir de la copie de tes fichiers, pas sur les originaux
    4- reviens ici me dire ce qui aura planté....

    Option Explicit
    
    Sub Importer()
    Dim objShell As Object, objFolder As Object
    Dim Chemin As String, fichier As String
    Dim Ws As Worksheet, maPlageExp As String, Col As String
    Dim Erreur As Boolean, maPlageImp As String
    
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
    
    If objFolder Is Nothing Then
        MsgBox "Abandon opérateur", vbCritical, "Annulation"
    Else
        ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "TravailEnCours"
        Sheets("FormulaireGC").Select 'ICI, peu importe le nom de la feuille, mets en un qui existe dans le classeur BDDBenoit2.xlsm
                                        'il faut juste sélectionner une autre feuille que celle que l'on vient d'ajouter
        Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
        '************************************A ADAPTER : tes fichiers sont ils tous .xls???
        fichier = Dir(Chemin & "*.xls")
        '************************************
        Do While Len(fichier) > 0
            If fichier <> ThisWorkbook.Name Then
                '****************************A ADAPTER : l'Array doit contenir le nom des feuilles à importer
                    '!!!Précaution, assures toi que ces feuilles sont bien dans le classeur BDDBenoit2.xlsm
                For Each Ws In ThisWorkbook.Worksheets(Array("FormulaireGC", "FormulaireEsc", "FormulaireBV", "FormulairePortes", "FormulaireMC", "FormulairePC", "FormulairePB"))
                    Erreur = False
                    'ici on attribue la bonne plage en fonction de la feuille importée '*********** A ADAPTER
                        'maPlageExp est la plage de cellules des fichiers à importer
                        'maPlageImp est la même plage de cellules, mais dans le fichier BDDBenoit2.xlsm
                    Select Case Ws.Name
                        Case "FormulaireGC"
                            maPlageExp = "FormulaireGC'!$A$2:$M$4"
                            maPlageImp = "A2:M4"
                            Col = "A"
                        Case "FormulaireEsc"
                            maPlageExp = "FormulaireEsc'!$A$2:$L$4"
                            maPlageImp = "A2:L4"
                            Col = "A"
                        Case "FormulaireBV"
                            maPlageExp = "FormulaireBV'!$A$2:$J$4"
                            maPlageImp = "A2:J4"
                            Col = "A"
                        Case "FormulairePortes"
                            maPlageExp = "FormulairePortes'!$I$2:$Q$4"
                            maPlageImp = "I2:Q4"
                            Col = "I"
                        Case "FormulaireMC"
                            maPlageExp = "FormulaireMC'!$A$2:$K$4"
                            maPlageImp = "A2:K4"
                            Col = "A"
                        Case "FormulairePC"
                            maPlageExp = "FormulairePC'!$A$2:$L$4"
                            maPlageImp = "A2:L4"
                            Col = "A"
                        Case "FormulairePB"
                            maPlageExp = "FormulairePB'!$A$2:$N$4"
                            maPlageImp = "A2:N4"
                            Col = "A"
                        Case Else
                            MsgBox "Feuille inconnue"
                            Erreur = True
                    End Select
                    If Erreur = False Then
                        ThisWorkbook.Names.Add "Plage", RefersTo:="='" & Chemin & "[" & fichier & "]" & maPlageExp
                        With Sheets("TravailEnCours")
                            .Range(maPlageImp) = "=Plage"
                            .Range(maPlageImp).Copy
                            ThisWorkbook.Sheets(Ws.Name).Range(Col & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                            .Cells.Clear
                        End With
                    End If
                Next Ws
            End If
            fichier = Dir()
        Loop
        Application.DisplayAlerts = False
        Sheets("TravailEnCours").Delete
        Application.DisplayAlerts = True
    End If
    End Sub

    0