Regrouper plusieurs onglets dans un seul onglet


#1

Bonjour à tous,
Je sollicite votre aide.
J’ai un fichier contenant plusieurs onglets:
Synthèse; TPS; J.E.; M.S.; 12ème; CP1; CP2; CE; CM; 6ème; 5ème; 4ème; 3ème; 2ndeS; 1ère L, 1ère S, T.L. ,T.S.
Je voudrais avoir: dans l’onglet synthèse, on crée un bouton, et on lançant le bouton, toutes les données des autres onglets(T.P.S. à T.S) sont consolidées dans cette feuille synthèse.

A noter qu’il y a d’autres onglets à part ceux cités ci-dessus.
Vous trouvez ci-joint le fichier.
Vous remerciant par avance et espérant votre aide.
Cordialement!
consolidé.xlsx (144,4 Ko)


Consolidation de plusieurs onglets dans un seul onglet
#2

M’enfin ?! Y’a un bug dans la matrice ? J’ai déjà vu ça quelque part Consolidation de plusieurs onglets dans un seul onglet

Enfin bref, bonjour @panda et bienvenue.

Oui, il est possible de regrouper vos onglets.
Avant de vous donner la solution, je me permets quelques remarques:

  • pourquoi vous casser la tête avec autant d’onglets alors que vous indiquez déjà une colonne avec le nom de classe (qui est aussi celui de l’onglet) ? Un seul onglet suffirait, les filtres feront le reste, non ?
  • j’espère que ce ne sont pas des vraies données qu’il y a dans votre fichier :sweat_smile:
    (sinon à l’avenir, changer par du fake, c’est plus sécure :wink: )

Enfin, voici le bout de code qui va fusionner vos onglets

Sub RestezGroupir() 'dans “Copie”
Dim Lg&, Sh As Worksheet, f As Worksheet
Set f = Sheets(“Copie”)
f.Range(“B2:AB” & f.[a65000].End(xlUp).Row).ClearContents 'efface Copie

For Each Sh In Worksheets
If Sh.Name <> f.Name And Sh.Name <> “Recettes” And Sh.Name <> “Dépenses” And Sh.Name <> “Base de données” And Sh.Name <> “Recherche” And Sh.Name <> “Param” Then 'Ici on exclut les onglets qu’on ne veut pas
Lg = Sh.Range(“a” & Rows.Count).End(xlUp).Row
Sh.Range(“C5:AB100” & Lg).Copy Destination:= _
f.Range(“a” & Rows.Count).End(xlUp)(2)
End If
Next
End Sub

Pour ce faire:

  • Créez un onglet “Copie”
  • ALT+F11 dans votre fichier, puis Insertion -> module
  • Copier/coller le code ci-dessus, puis F5
  • Il vous faudra rajouter vos intitulées de colonnes avec un bon vieux copier/coller la ligne (j’avais un peu la flemme de rajouter la ligne de code, dsl)
  • On pourrait créer un bouton pour le faire à volonté.

Bonne continuation!


#3

Bonjour Nono,
Merci beaucoup pour votre remarque. Merci aussi pour le temps que vous avez consacré pour moi.
Je vais essayer le code et je reviendrai vers vous!
Bien cordialement!


#4

Bonsoir Panda,

Avec plaisir :wink:

Si ça fonctionne, n’hésitez pas à passer les (2) sujets en “résolu”, et si ça fonctionne pas alors on si remettra :slight_smile:

A bientôt!


#5

Bonjour Nono,
J’ai suivi votre instruction et en lançant le bouton, il y a une erreur.
Je vous envoie ci-joint le fichier avec le code.
Merci à vous
=>consolidé (2).xlsm (152,9 Ko)


#6

Salut Panda,

L’erreur venait d’un mauvais formatage de copier-coller

Voici qui devrait aller mieux :wink:

EDIT (12h00): CODE PLUS SYMPA :wink:

Sub RestezGroupir() 'dans "Copie"
Dim Lg&, Sh As Worksheet, f As Worksheet
Application.ScreenUpdating = False
Set f = Sheets("Copie")
Cells.Clear 'efface Copie

For Each Sh In Worksheets
On Error Resume Next
If Sh.Name <> f.Name And Sh.Name <> "Recettes" And Sh.Name <> "Dépenses" And Sh.Name <> "Base de données" And Sh.Name <> "Recherche" And Sh.Name <> "Param" Then 'Ici on exclut les onglets qu’on ne veut pas
Lg = Sh.Range("a" & Rows.Count).End(xlUp).Row
Sh.Range("C5:AB100" & Lg).Copy Destination:= _
f.Range("a" & Rows.Count).End(xlUp)(2)
End If
Next
Sheets("TS").Select
Range("C4:AB4").Select
Selection.Copy
Sheets("Copie").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A1").Select
Application.ScreenUpdating = True
MsgBox "Fait !", vbOKOnly + vbInformation, "Information"
End Sub

#7

Re Nono,
Le code a marché mais une dernière demande, est-ce possible que dans l’onglet copie, les données sont collées à partir de la cellule C5?
Encore merci!


#8

Bonjour Nono

Une petite contraction de la macro
(les . select sont à éviter au max)

Sub RestezGroupir() 'dans "Copie"
  Dim Lg&, Sh As Worksheet, f As Worksheet
  Application.ScreenUpdating = False
  Set f = Sheets("Copie")
  Cells.Clear 'efface Copie
    For Each Sh In Worksheets
      On Error Resume Next
      If Sh.Name <> f.Name And Sh.Name <> "Recettes" And Sh.Name <> "Dépenses" And Sh.Name <> "Base de données" _
          And Sh.Name <> "Recherche" And Sh.Name <> "Param" Then 'Ici on exclut les onglets qu’on ne veut pas
        Lg = Sh.Range("a" & Rows.Count).End(xlUp).Row
        Sh.Range("C5:AB100" & Lg).Copy Destination:=f.Range("a" & Rows.Count).End(xlUp)(2)
      End If
    Next
  Sheets("TS").Activate
  Sheets("TS").Range("C4:AB4").Copy Sheets("Copie").Range("A1").Paste
  Range("C4").CurrentRegion.AutoFilter
  MsgBox "Fait !", vbOKOnly + vbInformation, "Information"
  Set f = Nothing
End Sub

Et cela pourrait être encore plus condensé avec un WITH et END WITH pour la feuille TS :wink:
De plus, prend le principe d’indenter la/les macro(s) quand il y a boucle ou autre correspondant à un END …

cela rend le code facile à lire et corriger

et pour éviter les variables non déclarées, depuis VBA - menu / outils / options / éditeur

cocher --> déclaration des variables obligatoire

ainsi tu auras toujours OPTION EXPLICIT sur les feuilles ou Modules :wink:


#9

Salut @Mimimathy

Encore une fois merci pour tes conseils! Bien que calé sur les formules, le vba est encore un grand champs à explorer pour moi :slight_smile:
Tu viens de m’apprendre un super truc avec OPTION EXPLICIT!! Merci beaucoup!

Je pense que je vais souvent venir vers toi avec moult questions :wink:


#10

Bonjour Mimimathy,
Merci beaucoup pour votre soutien.
Bien cordialement!


#11

Merci aussi à vous Nono!


#12

Bonjour Nono, Bonjour Mimimathy,
Le code a marché mais seul les données de l’onglet TS sont rapportées dans l’onglet copie. Le but c’est que toutes les données de J.E. à TS sont à consolider dans l’onglet copie.
Merci à vous


#13

Mais heuuuu🤨
Je tente de voir ça cet aprem


#14

Re,
Ta formule marche mais les données sont collées dans A1 mais il vaut mieux dans C4.
La formule de Mimimathy marche et collées dans C4mais seul les données du TS sont prises en compte.
Merci à vous


#15

Bonjour,

Cela devrait faire

Sub RestezGroupir() 'dans "Copie"
  Dim Lg&, Dl&, Sh As Worksheet, f As Worksheet
  Application.ScreenUpdating = False
  Sheets("Copie").Activate
  Set f = Sheets("Copie")
  Cells.Clear 'efface Copie
  Sheets("TS").Range("C4:AB4").Copy Sheets("Copie").Range("C4") 'Copie de l'entête
    For Each Sh In Worksheets 'Boucle sur les onglets sauf certaines
      On Error Resume Next
      If Sh.Name <> f.Name And Sh.Name <> "Recettes" And Sh.Name <> "Dépenses" And Sh.Name <> "Bases de données" _
          And Sh.Name <> "Recherche" And Sh.Name <> "param" Then 'Ici on exclut les onglets qu’on ne veut pas
        Lg = Sh.Range("c" & Rows.Count).End(xlUp).Row ''Dernière ligne de feuille à copier
        Dl = f.Range("C" & Rows.Count).End(xlUp).Row + 1 'Première ligne vide de feuille COPIE
        Sh.Range("C5:AB" & Lg).Copy f.Range("C" & Dl)
      End If
    Next
    Range("F5").Select
    ActiveWindow.FreezePanes = True
  Range("C4").CurrentRegion.AutoFilter
  Application.ScreenUpdating = True 'réactive le rafraichissement d'écran
  MsgBox "Fait !", vbOKOnly + vbInformation, "Information"
  Set f = Nothing
End Sub

consolidé (2).xlsm (268,5 Ko)


#16

Merci Mimimathy.
Cordialement


#17

Re,
Je viens pour vous demander un truc. Dans l’onglet copie, les données des différents onglets sont copié mais il vaut mieux si elles sont copié avec valeur donc pas de formule.
S’il vous plaît.
Encore merci !


#18

Re,
Plus précisément, c’est depuis le fichier de Nono que j’ai du faire la remarque, les fichiers sources ont des formules et lors du regroupement dans Copie, on utilise collage valeur au lieu de collage simple.
Cordialement,


#19

Bonjour

Ah oui?? et où :hushed:


#20

Bonjour,
Oui, les fichiers sources contiennent des formules mais si possible lorsqu’elles sont regroupées dans l’onglet Copie, on a des valeurs au lieu de formules.
Merci