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

FCMLE44

XLDnaute Impliqué
Supporter XLD
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: 20

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é
Supporter XLD
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
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
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: 11

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 244
Membres
103 162
dernier inscrit
fcfg