Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Rassembler les données de plusieurs feuilles dans une feuille récapitulative

FCMLE44

XLDnaute Impliqué
Bonjour

Dans le fichier en pièce jointe, je souhaite rapatrier dans la feuille RECAP, toutes les données des autres onglets de cette manière
Colonne A et B des onglets dans les colonnes A et B de la feuille Récap
En colonne C de la feuille RECAP, le nom de l'onglet d'ou provient les données rapatriée
Colonne C à K des onglets dans les colonnes D à L de la feuille Récap

Dans un second temps, je souhaiterais pouvoir créer un ou des onglets identiques à celui déja présent uniquement avec le tableau mais sans données

Quelqu'un aurait une idée ?

Merci
 

Pièces jointes

  • Classeur2.xlsx
    34.1 KB · Affichages: 21
Solution
Bonjour tout le monde,

@FCMLE44 : Si j'ai bien compris, code modifié à tester.
VB:
Option Explicit

Sub Recapitulation()
   Dim ws As Worksheet, dl As Long, dl2 As Long, Fr As Worksheet, c As Range
   Set Fr = ThisWorkbook.Worksheets("recap")
   Application.ScreenUpdating = False
   With Fr
      dl = .Cells(Rows.Count, 1).End(xlUp).Row
      If dl > 5 Then .Range(.Cells(6, 1), .Cells(dl, 12)).ClearContents
   End With

   For Each ws In Worksheets
      If ws.Name <> "RECAP" Then
         dl2 = ws.Cells(Rows.Count, 1).End(xlUp).Row
         If dl2 > 5 And ws.Cells(dl2, 1) <> "" Then
            For Each c In ws.Range(ws.Cells(6, 1), ws.Cells(dl2, 1))
               dl = Fr.Cells(Rows.Count, 1).End(xlUp).Row + 1...

FCMLE44

XLDnaute Impliqué
C'est bien l'option macro que j'envisage
Chaque gestionnaire pourra se trouver en même temps sur le fichier et sur son onglet
Je lancerais moi même la macro de regroupement vers la feuille récap via un ctrl
 

tbft

XLDnaute Accro
une fois que la macro (sub) fonctionne, il sera possible de la convertir en fonction (function) pour quelle s'exécute automatiquement (en même temps que les fonctions excel standard)
je peux regarder demain
 

cp4

XLDnaute Barbatruc
Bonjour,

J'ai supposé que l'on doit récupérer les données de toutes les feuilles du classeur dans la feuille Recap.
Code à mettre dans un module standard à appeler à l'activation de la feuille Recap ou via un bouton.
VB:
Option Explicit

Sub Recapitulation()
   Dim ws As Worksheet, dl As Long, dl2 As Long, Fr As Worksheet, c As Range
   Set Fr = ThisWorkbook.Worksheets("recap")
   Application.ScreenUpdating = False
   With Fr
      dl = .Cells(Rows.Count, 1).End(xlUp).Row
      If dl > 5 Then .Range(.Cells(6, 1), .Cells(dl, 12)).ClearContents
   End With

   For Each ws In Worksheets
      If ws.Name <> "RECAP" Then
         dl2 = ws.Cells(Rows.Count, 1).End(xlUp).Row
         For Each c In ws.Range(ws.Cells(6, 1), ws.Cells(dl2, 1))
            dl = Fr.Cells(Rows.Count, 1).End(xlUp).Row + 1
            Fr.Cells(dl, 1) = c
            Fr.Cells(dl, 2) = c.Offset(0, 1)
            Fr.Cells(dl, 3) = ws.Name
            Fr.Cells(dl, 4) = c.Offset(0, 2)
            Fr.Cells(dl, 5) = c.Offset(0, 3)
            Fr.Cells(dl, 6) = c.Offset(0, 4)
            Fr.Cells(dl, 7) = c.Offset(0, 5)
            Fr.Cells(dl, 8) = c.Offset(0, 6)
            Fr.Cells(dl, 9) = c.Offset(0, 7)
            Fr.Cells(dl, 10) = c.Offset(0, 8)
            Fr.Cells(dl, 11) = c.Offset(0, 9)
            Fr.Cells(dl, 12) = c.Offset(0, 10)
         Next c
      End If
   Next
   Application.ScreenUpdating = True
   MsgBox "Recap terminée!", vbInformation + vbOKOnly, "TRAITEMENT"

End Sub
 

FCMLE44

XLDnaute Impliqué
Bonjour

Lorsque je lance la macro sans données dans les onglets, j'obtiens les données de la ligne 5, est ce possible de rajouter une condition à ce code en disant si vide alors rien

Merci
 

cp4

XLDnaute Barbatruc
Bonjour

Lorsque je lance la macro sans données dans les onglets, j'obtiens les données de la ligne 5, est ce possible de rajouter une condition à ce code en disant si vide alors rien

Merci
Bonsoir,
En ajoutant une condition sur la dernière ligne non vide de la colonne A.
VB:
Option Explicit

Sub Recapitulation()
   Dim ws As Worksheet, dl As Long, dl2 As Long, Fr As Worksheet, c As Range
   Set Fr = ThisWorkbook.Worksheets("recap")
   Application.ScreenUpdating = False
   With Fr
      dl = .Cells(Rows.Count, 1).End(xlUp).Row
      If dl > 5 Then .Range(.Cells(6, 1), .Cells(dl, 12)).ClearContents
   End With

   For Each ws In Worksheets
      If ws.Name <> "RECAP" Then
         dl2 = ws.Cells(Rows.Count, 1).End(xlUp).Row
         If dl2 > 5 Then
            For Each c In ws.Range(ws.Cells(6, 1), ws.Cells(dl2, 1))
               dl = Fr.Cells(Rows.Count, 1).End(xlUp).Row + 1
               Fr.Cells(dl, 1) = c
               Fr.Cells(dl, 2) = c.Offset(0, 1)
               Fr.Cells(dl, 3) = ws.Name
               Fr.Cells(dl, 4) = c.Offset(0, 2)
               Fr.Cells(dl, 5) = c.Offset(0, 3)
               Fr.Cells(dl, 6) = c.Offset(0, 4)
               Fr.Cells(dl, 7) = c.Offset(0, 5)
               Fr.Cells(dl, 8) = c.Offset(0, 6)
               Fr.Cells(dl, 9) = c.Offset(0, 7)
               Fr.Cells(dl, 10) = c.Offset(0, 8)
               Fr.Cells(dl, 11) = c.Offset(0, 9)
               Fr.Cells(dl, 12) = c.Offset(0, 10)
            Next c
         End If
      End If
   Next
   Application.ScreenUpdating = True
   MsgBox "Recap terminée!", vbInformation + vbOKOnly, "TRAITEMENT"

End Sub
 

R@chid

XLDnaute Barbatruc
Supporter XLD
Bonjour @ tous,
Tu peux convertir tes tableaux en tableaux structurés d'Excel et te servir de PowerQuery pour récupérer les informations de tous les tableaux dont le nom commence par GST.

Un simple clic-droit dans le tableau vert puis actualiser fera l'affaire.

Bien cordialement
 

Pièces jointes

  • FCMLE44_PowerQuery.xlsx
    43.2 KB · Affichages: 12

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…