Macro pour importer donnees de plusieurs classeurs

Fermé
TheYéti Messages postés 3 Date d'inscription mercredi 26 juin 2013 Statut Membre Dernière intervention 26 juin 2013 - 26 juin 2013 à 11:03
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 26 juin 2013 à 14:22
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
A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
26 juin 2013 à 11:39
Bonjour,

Tu peux aller lire cette fiche pratique. Si cela te convient reviens ici demander l'adaptation à ton cas.
0
TheYéti Messages postés 3 Date d'inscription mercredi 26 juin 2013 Statut Membre Dernière intervention 26 juin 2013
26 juin 2013 à 13:37
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
26 juin 2013 à 13:41
Oui, je penses.
Il suffit d'adapter le code...
0
TheYéti Messages postés 3 Date d'inscription mercredi 26 juin 2013 Statut Membre Dernière intervention 26 juin 2013
26 juin 2013 à 13:43
OK . Du coup tu pourrai me donner un exemple d'importation de 2 classeurs contenant 2 feuilles chacun ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
26 juin 2013 à 14:22
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