Macro extraire des données de plusieurs classeurs fermés sur un autre classeur

genhino

XLDnaute Nouveau
Bonjour à tous,

A la vue de mon titre vous avez dû vous dire "encore un qui n'a pas chercher à faire le tour des discutions"... je peux vous assurez que si mais je n'ai rien trouver ou bien les solutions dépassais mes compétences...

Pour démarrer, je mis les mains dans les macro depuis ce soir :D ... je n'y connaissais absolument rien avant... Bref

Voilà mon problème :

J'ai plusieurs classeurs excel (Environ 100, chaque classeur étant une commande client). Ces classeurs sont donc identique sur la forme mais pas sur le fond.

Mon but :
Regrouper certaines informations de tous ces bons de commande dans un même classeur (nom du client, remise, adresse livraison,...)

J'ai "fouillé" un peu et j'ai réussi à sortir ce code : (merci de ne pas être trop dur avec moi... je débute de ce soir pour rappel :D)

Sub IMPORTATION()

Workbooks.Open Filename:="C:\Users\All\Commande\\COMMANDE_LGRC_NOM_CLIENT"

ThisWorkbook.Worksheets("Feuil1").Range("A2").Value = Range("AA2").Value
ThisWorkbook.Worksheets("Feuil1").Range("B2").Value = Range("AA65").Value
ThisWorkbook.Worksheets("Feuil1").Range("C2").Value = Range("AA66").Value
ThisWorkbook.Worksheets("Feuil1").Range("S2").Value = Range("AA44").Value
ThisWorkbook.Worksheets("Feuil1").Range("T2").Value = Range("X44").Value
ThisWorkbook.Worksheets("Feuil1").Range("U2").Value = Range("AC17").Value
ThisWorkbook.Worksheets("Feuil1").Range("V2").Value = Range("AC14").Value
ThisWorkbook.Worksheets("Feuil2").Range("P2").Value = Range("P3").Value

ActiveWorkbook.Close

End Sub


Première question : Ce code fonctionne mis à part pour la dernière ligne, il ne va pas chercher l'info de "feuil2" (j'ai vérifier le nom et l'emplacement de la cellule c'est ok) savez-vous ce que j'ai raté?

Enfin ma principale préocupation est que, comme je vous l'ai dit:
J'ai 100 fichiers, et je me voit mal copier/coller ce code 100 fois en changeant à chaque fois : L'emplacement du classeur, et le décalage d'une ligne vers le bas dans classeur récap. :s

Auriez-vous une solution plus judicieuse?

Ah oui dernière chose, avec ce code je demande la fermeture automatique du fichier mais, au moment de refermer il me demande si je veux sauvegarder les fichier ouvert... est-il possible de "forcer" la fermerture sans avoir à cliquer sur "ne pas sauvergarder"

J'espère avoir été clair...

Merci d'avance.
 

genhino

XLDnaute Nouveau
Re : Macro extraire des données de plusieurs classeurs fermés sur un autre classeur

Je me pose la question suivante :

Est-il possible de demander l'ouverture de tous les fichiers du dossier et d'aller chercher les infos dans tous ces fichiers puis de refermer?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro extraire des données de plusieurs classeurs fermés sur un autre classeur

Bonjour Genhino, bonjour le forum,

Essaie comme ça :
Code:
Sub Macro1()
Dim ch As String 'déclare la variable ch (CHemin d'accès)
Dim cc As Workbook 'déclare la variable cc (Classeur Cible)
Dim fs As Variant 'déclare la variable fs (FichierS)
Dim cs As Workbook 'déclare la variable cs (Claseur Source)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim li As Long 'déclare la variable li (LIgne)

ch = "C:\Users\All\Commande\" 'définit le chemin d'acces ch (à vérifier dans ton cas)
Set cc = ThisWorkbook 'définit le classeur cible cc
fs = Dir(ch & "*.xlsx") 'définit les fichiers du dossier de ch
Do Until fs = "" 'boucle tant que fs n'est pas vide
    li = IIf(cc.Sheets("Feuil1").Range("A2").Value = "", 2, cc.Sheets("Feuil1").Cells(Application.Rows.Count, 1).End(xlUp).Row + 1) 'définit la première ligne vide de la colonne A du classeur cible
    Set cs = Workbooks.Open(ch & fs) 'ouvre le fichier
    Set os = cs.Sheets("Feuil2") 'définit l'onglet source (à adapter à ton cas)
    cc.Sheets("Feuil1").Range("A" & li).Value = os.Range("AA2").Value 'place en colonne A du classeur cible la valeur de AA2 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("B" & li).Value = os.Range("AA65").Value 'place en colonne B du classeur cible la valeur de AA65 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("C" & li).Value = os.Range("AA66").Value 'place en colonne C du classeur cible la valeur de AA66 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("S" & li).Value = os.Range("AA44").Value 'place en colonne S du classeur cible la valeur de AA2 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("T" & li).Value = os.Range("X44").Value 'place en colonne T du classeur cible la valeur de X44 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("U" & li).Value = os.Range("AC17").Value 'place en colonne U du classeur cible la valeur de AC17 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("V" & li).Value = os.Range("AC14").Value 'place en colonne V du classeur cible la valeur de AC14 de l'onglet "Feuil1" du classeur source
    cc.Sheets("Feuil1").Range("P" & li).Value = cc.Sheets("Feuil2").Range("P3").Value 'place en colonne P du classeur cible la valeur de P3 de l'onglet "Feuil2" du classeur source
    cs.Close SaveChanges:=False 'ferme le classeur source sans enregistrer les changements
    fs = Dir 'définit fs comme le prochain fichier du dossier de ch
Loop 'boucle
End Sub
Vérifie dans le code que le chemin d'accès ch et le nom des onglets soit bien adapté à ton cas...
 

genhino

XLDnaute Nouveau
Re : Macro extraire des données de plusieurs classeurs fermés sur un autre classeur

Bonjour Robert,

Désolé pour le temps de réponse j'étais en déplacement,

Voilà, j'ai essayé de me débrouillé mais, malgré que tes explications claire j'ai un peu mal car j'ai un bocage des le début... (je suis novice sur VBA... mais je commence à comprendre promi :) )

voila ce que j'ai fait :

Sub TEST_EXPORT()
Dim ch As String 'déclare la variable ch (CHemin d'accès)
Dim cc As Workbook 'déclare la variable cc (Classeur Cible)
Dim fs As Variant 'déclare la variable fs (FichierS)
Dim cs As Workbook 'déclare la variable cs (Claseur Source)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim li As Long 'déclare la variable li (LIgne)

ch = "C:\Users\ggenier\Desktop\EXPORTATION"
Set cc = ThisWorkbook ("exportation_test")'définit le classeur cible cc
fs = Dir(ch & "*.xlsx") 'définit les fichiers du dossier de ch
Do Until fs = "" 'boucle tant que fs n'est pas vide
li = IIf(cc.Sheets("Feuil1").Range("A2").Value = "", 2, cc.Sheets("Feuil1").Cells(Application.Rows.Count, 1).End(xlUp).Row + 1) 'définit la première ligne vide de la colonne A du classeur cible
Set cs = Workbooks.Open(ch & fs) 'ouvre le fichier
Set os = cs.Sheets("Feuil") 'définit l'onglet source (à adapter à ton cas)
cc.Sheets("Feuil1").Range("A" & li).Value = os.Range("AA2").Value 'place en colonne A du classeur cible la valeur de AA2 de l'onglet "Feuil1" du classeur source
cc.Sheets("Feuil1").Range("B" & li).Value = os.Range("AA65").Value 'place en colonne B du classeur cible la valeur de AA65 de l'onglet "Feuil1" du classeur source

Set os = cs.Sheets("Feuil") 'définit l'onglet source (à adapter à ton cas)
cc.Sheets("Feuil2").Range("P" & li).Value = cc.Sheets("Feuil2").Range("P3").Value 'place en colonne P du classeur cible la valeur de P3 de l'onglet "Feuil2" du classeur source
cs.Close SaveChanges:=False 'ferme le classeur source sans enregistrer les changements
fs = Dir 'définit fs comme le prochain fichier du dossier de ch
Loop 'boucle
End Sub



Mon erreur arrive dès :

U] Set cc = ThisWorkbook ("exportation_test")'définit le classeur cible cc[/U]

Quand je ne mets pas ("exportation_test") la macro ne se lance pas...


Afin d'arriver à m'en "dépatouiller" pourrais tu m'indiquer les champs que je dois changer c'est à dire :

Dois-je modifier quelques choses dans :

Dim ch As String 'déclare la variable ch (CHemin d'accès)
Dim cc As Workbook 'déclare la variable cc (Classeur Cible)
Dim fs As Variant 'déclare la variable fs (FichierS)
Dim cs As Workbook 'déclare la variable cs (Claseur Source)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim li As Long 'déclare la variable li (LIgne)
Set cc = ThisWorkbook
fs = Dir(ch & "*.xlsx")



Merci d'avance!!!!!!!

Genhino
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro extraire des données de plusieurs classeurs fermés sur un autre classeur

Bonjour Genhino, bonjour le forum,

Le code que je t'ai proposé doit être placé dans le classeur de regroupement (le classeur cible). ThisWorkbook ce suffit à lui même. Rajouter un nom de classeur va faire planter le code. Donc si tu places le code dans le bon classeur cela donne :
Set cc = Thisworkbook le classeur cible est définit comme le classeur contenant le code... (This Workbook signifie "Ce Classeur" en anglais).
le classeur source devient le classeur ouvert : Set cs = Workbooks.Open(ch & fs)
ensuite j'ai défini l'onglet du claseur source : Set os = cs.Sheets("Feuil1") mais tu dois vérifier qu'il se nomme bien Feuil1 dans tous les classeurs à ouvrir. Si ce n'est pas la cas ça va planter... Si le nom est différent mais que c'est toujours le premier onglet du classeur tu peux remplacer par : Set os = cs.Sheets(1).
Après j'avoue n'avoir tester qu'avec quatre fichiers vierges car tu n'as pas pris la peine de les fournir...
 

Discussions similaires

Statistiques des forums

Discussions
312 027
Messages
2 084 763
Membres
102 657
dernier inscrit
Ferdy