Macro pour importer donnees de plusieurs classeurs
TheYéti
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 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
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:
- Macro pour importer donnees de plusieurs classeurs
- Fuite données maif - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Importer favoris chrome - Guide
- Supprimer les données de navigation - Guide
5 réponses
Bonjour,
Tu peux aller lire cette fiche pratique. Si cela te convient reviens ici demander l'adaptation à ton cas.
Tu peux aller lire cette fiche pratique. Si cela te convient reviens ici demander l'adaptation à ton cas.
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 ?
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 ?
OK . Du coup tu pourrai me donner un exemple d'importation de 2 classeurs contenant 2 feuilles chacun ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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é....
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