OVH Cloud OVH Cloud

Fusionner des classeurs

8 réponses
Avatar
Sou PULL
Bonjour voici ce que je veut faire :

Rassembler dans une seule feuille d'un même classeur les 7 feuilles
arrivant des mes 7 vendeurs de manière hbdomadaire.
Toutes ces différentes feuilles ont le même nombre de colonnes et arrive
donc toutes avec le même format.

Pour l'instant j'utilise le copier collez des ces 7 feuilles dans une
seule et même feuille pour traiter ensuite ces infos dans un tableau
croisé dynamique, et ces 7 manipulations me gonfle, je suis sur que
Excel dans sa toute puissance doit pouvoir faire cela pour avec une
commande spécifique.

Quelqu'un a t'il des pistes ?

Merci d'avance

Soupull

8 réponses

Avatar
JB
Bonjour,

Sub essai()
hauteur = 20
largeur = 4
Sheets.Add
For i = 2 To Sheets.Count
Sheets(i).[A1].Resize(hauteur, largeur).Copy ActiveCell
ActiveCell.Offset(hauteur, 0).Select
Next i
End Sub

Cordialement JB
Avatar
Sou PULL
Je vais paraître grossier, mais tout d'abord merci pour votre réponse
rapide...par contre, qu'est ce que je dois faire avec votre
réponse....créer une nouvelle macro et copiez simplement ce texte
dedeans...quelles sont les zones à paramétrer pour les adapterà mon cas ?

Merci d'avance

Bonjour,

Sub essai()
hauteur = 20
largeur = 4
Sheets.Add
For i = 2 To Sheets.Count
Sheets(i).[A1].Resize(hauteur, largeur).Copy ActiveCell
ActiveCell.Offset(hauteur, 0).Select
Next i
End Sub

Cordialement JB



Avatar
JB
Voir PJ

http://cjoint.com/?cwje1MYoiU


-ALT+F11
-Insertion/Module
-Dessiner un bouton avec la barre d'outils Formulaires et lui affecter
la macro.

-largeur représente le nb de colonnes
-hauteur le nb de lignes

Sub syntèseFeuilles()
hauteur = 20
largeur = 4
Sheets.Add
For i = 2 To Sheets.Count
Sheets(i).[A1].Resize(hauteur, largeur).Copy ActiveCell
ActiveCell.Offset(hauteur, 0).Select
Next i
End Sub

JB
Avatar
Sou PULL
Ce n'est pas tout a fait que je cherchait car en fait mes 7 feuilles ont
un nombre de lignes variable. Mais j'a tout de même trouvé une solution
dans un autre post, la ligne :

Range("H65000").End(xlUp).Offset(1, 0).Select

Ainsi, je sélectionne dans chaque classeur que m'envoi les vendeurs
toute les cellules de A1 à Uxx que je copie/colle dans ma feuille de
synthèse, à partir de la colone H et la ligne 5 qui est le début de la
plage de données dans laquelle vient ensuite piochez un tableau croisé
dynamique et le copiez collez suivant démarre tout seul à la première
ligne vide.


Je vous livre le résultat de ma macro, au cas ou cela pourrait aider
d'autres personnes. Si vous voyez une amélioration possible, je suis
preneur...:

Sub synthese()

'incorporer vendeur 1
Workbooks.Open Filename:="C:Reportingreport_vendeur1.xls"
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Windows("synthese_vendeur.xls").Activate
Range("H5").Select
ActiveSheet.Paste
Windows("report_vendeur1.xls").Activate
ActiveWorkbook.Close

'incorporer vendeur 2
Workbooks.Open Filename:="C:Reportingreport_vendeur2.xls"
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Windows("synthese_vendeur.xls").Activate
Range("H65000").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Windows("report_vendeur2.xls").Activate
ActiveWorkbook.Close

'incorporer vendeur 3
Workbooks.Open Filename:="C:Reportingreport_vendeur3.xls"
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Windows("synthese_vendeur.xls").Activate
Range("H65000").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Windows("report_benoit.xls").Activate
ActiveWorkbook.Close

'et ainsi de suite....

End Sub

Merci pour votre aide si précieuse

Soupull

Voir PJ

http://cjoint.com/?cwje1MYoiU


-ALT+F11
-Insertion/Module
-Dessiner un bouton avec la barre d'outils Formulaires et lui affecter
la macro.

-largeur représente le nb de colonnes
-hauteur le nb de lignes

Sub syntèseFeuilles()
hauteur = 20
largeur = 4
Sheets.Add
For i = 2 To Sheets.Count
Sheets(i).[A1].Resize(hauteur, largeur).Copy ActiveCell
ActiveCell.Offset(hauteur, 0).Select
Next i
End Sub

JB



Avatar
JB
http://cjoint.com/?cwlkXRBbNm

Sub syntèseFeuilles()
Sheets.Add
For i = 2 To Sheets.Count
Sheets(i).UsedRange.Copy ActiveCell
Cells(Cells.SpecialCells(xlLastCell).Row + 2, 1).Select
Next i
End Sub

JB
Avatar
JB
Si formules dans le classeurs importés:

Sub syntèseClasseursMemeFeuille()
Cells.Clear
[A1].Select
fenetre = ActiveWorkbook.Name
ChDir ActiveWorkbook.Path
nf = Dir("vendeur*.xls") ' premier fichier
Do While nf <> ""
Workbooks.Open Filename:=nf
ActiveSheet.UsedRange.Copy
Windows(fenetre).Activate
ActiveSheet.PasteSpecial ' pour éliminer les formules
Workbooks(nf).Close False
Cells(Cells.Find("*", SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row + 1, 1).Select
nf = Dir ' fichier suivant
Loop
End Sub

S'il n'y a pas de formules dans les classeurs importés:

Sub syntèseClasseursMemeFeuille2()
Cells.Clear
[A1].Select
fenetre = ActiveWorkbook.Name
ChDir ActiveWorkbook.Path
nf = Dir("vendeur*.xls") ' premier fichier
Do While nf <> ""
Workbooks.Open Filename:=nf
Windows(fenetre).Activate
Workbooks(nf).ActiveSheet.UsedRange.Copy ActiveCell
Workbooks(nf).Close False
Cells(Cells.Find("*", SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row + 1, 1).Select
nf = Dir ' fichier suivant
Loop
End Sub

JB
Avatar
Sou PULL
Re-bonjour, j'ai des difficultés à mettre en place cette Sub :
Les 7 classeurs que je souhaite importer n'ont pas de formules donc j'ai
essayé de mettre en place la deuxième solutions proposé. J'ai remplacé
"vendeur*.xls" par le nom du premier classeur.

Quand j'exécute la macro, tout est OK, les données du classeur
"vendeur_nomduvendeur1" se copie comme je le désire dans la feuille à
partir de laquelle est exécuté la macro.

Là où cela se corse c'est quand à la suite du deuxième nf = Dir je
saisie ("vendeur_nomduvendeur2.xls") et que j'exécute la macro, il
récupère bien les données du vendeur 1, puis celle du vendeur 2 et là il
recommence la copie des données du vendeur 2 à l'infinie tant que je
n'appuis pas sur Esc pour stopper l'exécution de la macro.

A partir de quelle ligne et jusqu'ou dois dupliquer le code sachant que
j'ai au total 7 classeurs différent à assembler dans la même feuille ?

Excusez par avance mon amateurisme....

Soupull

S'il n'y a pas de formules dans les classeurs importés:

Sub syntèseClasseursMemeFeuille2()
Cells.Clear
[A1].Select
fenetre = ActiveWorkbook.Name
ChDir ActiveWorkbook.Path
nf = Dir("vendeur*.xls") ' premier fichier
Do While nf <> ""
Workbooks.Open Filename:=nf
Windows(fenetre).Activate
Workbooks(nf).ActiveSheet.UsedRange.Copy ActiveCell
Workbooks(nf).Close False
Cells(Cells.Find("*", SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row + 1, 1).Select
nf = Dir ' fichier suivant
Loop
End Sub


Avatar
JB
IL n'y a besoin du dupliquer de code.
C'est la boucle qui doit parcourir tous les classeurs commençant par
Vendeur. Il faut:
-que les noms des fichiers commencent par Vendeur
-qu'ils soient dans le même répertoire que le programme

Exécuter la macro en pas à pas avec F8 pour comprendre le
fonctionnement.

Voir PJ avec exemple: http://cjoint.com/?cwsfTBaDwq

JB