Consolidation de plusieurs onglets
BOnjour à tous,
Excel 2010 et sa fonction consolidation ne prend en compte que les chiffres et non le texte je cherche donc une macro qui va bien qui ira copier mes 3 onglets pour me les coller dans l'onglet BDD.
Je n'ai pas trouvé ma réponse dans le forum.
Merci beaucoup de votre aide !
Bien à vous.
une petite aide svp ?
J'ai essayé de faire une macro mais cela ne fonctionne pas, pouvez-vous m'expliquer ?
Merci
Sub Macro2()
'
' Macro2 Macro
'
'
Sheets("BDD").Select
Range("d4").Select
Sheets("JLB" And "YF" And "MEB").Select
Rows("3:3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("BDD").Select
ActiveSheet.Paste
Rows("3:3").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D4").Select
End Sub
Bonjour,
un gros nettoyage (n'utilise pas de select, ça prend de la ressource pour rien) et décompo de ta macro (et pense à utiliser les balises de code pour mettre en forme ton code) :
Sub Copie3Feuilles()
'
Dim x As Long, y As Long
Sheets("BDD").ClearContents
x = Worksheets("JLB").Range("A" & Rows.Count).End(xlUp).Row
Sheets("JLB").Rows("3:" & x).Copy Sheets("BDD").Range("A1")
x = Worksheets("YF").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("YF").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
x = Worksheets("MEB").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("MEB").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
End SubMerci beaucoup Reuk de ton aide !
La macro bloque sur
Sheets("BDD").ClearContents
et je ne sais pas pourquoi, tu as une explication ?
Oui désolé, dans la précipitation j'ai pas vérifié mon code :
Sheets("BDD").Cells.ClearContentsdevrait marcher!
cool ça marche ! merci beaucoup beaucoup
Par contre j'ai décalé le copier coller du premier onglet de A1 vers A4 afin de laisser les titres apparaître mais cela ne fonctionne pas.
Peux tu m'aider la dessus ?
Sub test_conso()
'
Dim x As Long, y As Long
Sheets("BDD").Cells.ClearContents
x = Worksheets("JLB").Range("A" & Rows.Count).End(xlUp).Row
Sheets("JLB").Rows("3:" & x).Copy Sheets("BDD").Range("A4")
x = Worksheets("YF").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("YF").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
x = Worksheets("MEB").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("MEB").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
End Sub
Utilise les balises de code (tu les trouveras au dessus de la zone dans laquelle tu tapes tes messages, c'est les boutons verts, sur le côté gauche), pour le mettre en forme comme ceci :
Sub test_conso()
'
Dim x As Long, y As Long
Sheets("BDD").Cells.ClearContents
x = Worksheets("JLB").Range("A" & Rows.Count).End(xlUp).Row
Sheets("JLB").Rows("3:" & x).Copy Sheets("BDD").Range("A4")
x = Worksheets("YF").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("YF").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
x = Worksheets("MEB").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("MEB").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
End SubEt qu'est ce qui ne marche pas exactement? Le code bloque ou il fait mal les copies?
Si le code te donne une erreur dit moi sur quel ligne, ça m'aidera à voir d'où peut venir le problème et j'espère trouver une solution!
Reuk,
Avant de lancer la macro, le nom de mes colonnes apparaît en ligne 2 et 3
j'ai demandé le copiage des onglets à partir de A4.
Et lorsque je lance la macro, elle efface le nom des colonnes.
En pj le résultat obtenu pr mieux comprendre
ok c'est bon ! j'ai réussi !!
yalaaaaa
Merci beaucoup
par contre j'ai une autre question si tu peux !
Une fois onglet "BDD" mise à jour j'aimerai qu'elle me fasse un tri croissant par date d'émission de facture.
tu sais comment je peux l'obtenir ?
Merci beaucoup
https://forum.excel-pratique.com/post176838.html#p176838
Tu trouveras le code que j'utilise (à adapter pour toi) et sinon, je te conseille l'enregistreur de macro pour découvrir des commandes que tu connais pas!
Pense à valider le sujet si la solution est trouvée!
J'avais essayé l'enregistreur de macro mais après dans la simplification de l'enregistreur c'est la ou je me perds et ou je foire tout, mais j'apprends déjà ...
J'ai adapté ta macro à mon petit fichier, mais ça coince sur le nom du fichier, je ne comprends pas...
Merci de jeter un petit coup d'oeil pr "réparer"
Merci bcp Reuk :!
Je bouge là mais je fais ça ce soir!
Pas de soucis, faut bien apprendre!
ok merci beaucoup !
bon courage
Voilà mon grand :
Sub test_conso()
'
Dim x As Long, y As Long
Sheets("BDD").Cells.ClearContents
x = Worksheets("JLB").Range("A" & Rows.Count).End(xlUp).Row
Sheets("JLB").Rows("1:" & x).Copy Sheets("BDD").Range("A2")
x = Worksheets("YF").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("YF").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
x = Worksheets("MEB").Range("A1").End(xlDown).Row
y = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("MEB").Rows("3:" & x).Copy Sheets("BDD").Range("A" & y)
Dim RangDate As String, RangEcheance As String, RangTotal As String
'modif à faire : Nom de feuille (pour toi BDD)
x = Worksheets("BDD").Range("A2").End(xlDown).Row
'modif à faire : 3 et AI
RangTotal = "A3" & ":" & "AI" & x
'parce qu'il y a des données jusquà AI et
'que tu tries qu'à partir de la ligne 4 (mais que tu as des entêtes donc 3!)
'on nettoie les filtres
ActiveWorkbook.Worksheets("BDD").Sort.SortFields.Clear
'là tu choisis les colonnes grace auxquelles tu veux trier
'tu n'as qu'à modifier ici
RangDate = "C1" & ":" & "C" & x
RangEcheance = "D1" & ":" & "D" & x
'on entre les filtres par importance decroissante
'tu enlèves si y en a trop!
ActiveWorkbook.Worksheets("BDD").Sort.SortFields.Add Key:=Range(RangDate), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("BDD").Sort.SortFields.Add Key:=Range(RangEcheance), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
'et là tu appliques le tri
With ActiveWorkbook.Worksheets("BDD").Sort
.SetRange Range(RangTotal)
.Header = xlYes 'xlNo si tu n'as pas d'entête
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubAlors, si dans le sujet dont je t'ai passé le lien il y a plusieurs blocs de code, ce n'était pas pour rien!
Tu avais juste mis le dernier qui applique les filtres mais comme tu n'en avais pas défini... ça marchait pas et pi t'avais pas non plus défini RangTotal ou d'autres choses du genre!
Dans celle là, tu trouveras un classement par date d'émission puis par date d'échéance!
Pense à clôturer le sujet si j'ai répondu à ta question!
Et j'ai regardé les autres modules de ton fichier, tu as 3 fois une macro très semblable, donc plusieurs possibilités :
- tu fais une fonction ou macro qui fait appel à un paramètre (ta feuille) et tu as 3 petites macros (ou même une seule (avec la solution suivante) qui font appel à cette fonction)
- tu met tout en une seule en utilisant ActiveSheet puisque tu lances la macro depuis un bouton sur la feuille que tu veux remplir
Pour la 2eme solution (plus simple et plus logique), ça donnerait ça :
ehhh en fait je viens de voir que tu avais déjà fait ça!
Donc très bien! Et clean tes modules inutiles au fur et à mesure parce que ça peut vite devenir le bazar quand tu as un gros programme et que tu le fais pas régulièrement (je devrais le faire sur mon progz de l'an dernier mais j'ai la flemme pkc j'ai 8 modules de minimum 3 "pages" et jusqu'à environ 18 "pages" je pense...)
c'est exactement ça !!!
merci beaucoup pour tous tes conseils ! je vais essayer de cleaner tous mes modules afin de les garder opérationnels...
Bon courage pour tes 18 pages...
Bonne journée