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

  • Initiateur de la discussion Initiateur de la discussion FCMLE44
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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,

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
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
519
Réponses
4
Affichages
114
Retour