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

XL 2013 Récap de plusieurs onglets sur un seul

ANTONY34200

XLDnaute Occasionnel
Bonjour le forum,
j'ai fais un petit fichier, dans lequel il y a plusieurs onglets ... 1, 2, 3, et récap.
j'aimerais que dans l'onglet récap, il puisse s'y incrémenter automatiquement les données des onglets 1, 2, 3
J'ai bien trouver une pseudo solution avec des formules (mais la présentation ne me conviens pas ...),donc je préférerais passer par du VBA, mais je ne suis pas très doué avec le VBA ...
Si quelqu'un pouvais me filer un petit coup de main ...
Je vous joint un fichier test du fichier sur lequel je travail.

Merci d'avance
 

Pièces jointes

  • Onglet Récap.xlsx
    18.7 KB · Affichages: 10
Solution
Bonjour Staple1600,
je viens juste de trouver ma solution avec ce code ...
VB:
Sub importer()
  Dim i As Long, sh As Integer, lig As Long, j As Integer
  With Sheets("Récap")
   .Range("A3:J" & .Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents
   For sh = 1 To Sheets.Count
    If Sheets(sh).Name <> "Récap" And Sheets(sh).Name <> "3 (4)" Then ' entre les guillements les feuilles non désirées
      For i = 3 To Sheets(sh).Range("A" & Rows.Count).End(xlUp).Row + 1
        If .Range("A2") = "" Then lig = 2 Else lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
        For j = 1 To .Cells(2, Columns.Count).End(xlToLeft).Column
          .Cells(lig, j) = Sheets(sh).Cells(i, j)
        Next
      Next
    End If
   Next
  End With
End...

Staple1600

XLDnaute Barbatruc
Bonjour @ANTONY34200 ,le fil

Un premier essai (avec un petit souci)
VB:
Sub test_Recopie()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> "Récap" Then
ws.ListObjects(1).DataBodyRange.Copy Feuil4.ListObjects(1).ListRows.Add.Range
End If
Next
End Sub
 

ANTONY34200

XLDnaute Occasionnel
Bonjour Staple1600,
je viens juste de trouver ma solution avec ce code ...
VB:
Sub importer()
  Dim i As Long, sh As Integer, lig As Long, j As Integer
  With Sheets("Récap")
   .Range("A3:J" & .Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents
   For sh = 1 To Sheets.Count
    If Sheets(sh).Name <> "Récap" And Sheets(sh).Name <> "3 (4)" Then ' entre les guillements les feuilles non désirées
      For i = 3 To Sheets(sh).Range("A" & Rows.Count).End(xlUp).Row + 1
        If .Range("A2") = "" Then lig = 2 Else lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
        For j = 1 To .Cells(2, Columns.Count).End(xlToLeft).Column
          .Cells(lig, j) = Sheets(sh).Cells(i, j)
        Next
      Next
    End If
   Next
  End With
End Sub

Merci du coup de main.
je joints également mon fichier
 

Pièces jointes

  • Onglet Récap.xlsm
    35 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Re

@ANTONY34200
Mon code se base sur ton fichier exemple, celui du message#1
qui ne contient que 4 feuilles nommées
1
2
3
Récap

Donc testes ma macro sur ce fichier, pour voir le résultat de la macro (sans erreur)

NB: Dans ce fichier, les 4 feuilles contenait chacune un seul tableau structuré (Listobject)
D'où : ws.ListObjects(1) et Feuil4.ListObjects(1)
 

ANTONY34200

XLDnaute Occasionnel
Effectivement, le code fonctionne treès bien ... mais le soucis, 'est que quand je clique 2 fois sur mon bouton impoter, les données ne s'actualise pas, elle ce cumul
 

Pièces jointes

  • Onglet Récap.xlsm
    27.6 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Re

Mon code se contente de recopier
Donc si tu lances la macro N fois, tu auras N copies des tableaux des feuilles 1,2 et 3

Maintenant quel est le but poursuivi ?

Pourquoi ne pas utiliser un seul tableau pour la saisie et utiliser un tableau croisé dynamique pour exploiter tes données ?
Comme ceci par exemple
Ci-dessous un TCD
 

Staple1600

XLDnaute Barbatruc
Re

A mon sens, tu tu compliques la vie
Quant au TCD, il suffit de d'y mettre
(Il y a moult tutos sur le web)

Ton dernier fichier ne ressemble plus du tout au premier.
Dans lequel les tableaux avaient tous les même libellés en entêtes.

Si j'étais moi:
• une feuille base de données (*)
• une feuille Récap avec N TCD selon les besoins
ou N TCD sur des N feuilles distinctes créées à la volée.

(*) qui pourrait correspondre à la feuille Recherche de ton dernier fichier.

Exemple: ici j'ai isolé des données pour le mois de janvier 2023
NB: L'avantage d'utiliser un TCD, c'est qu'il se pilote à la souris et qu'il 'y a pas de risque de plantage VBA.

PS: Pourquoi sur ta feuille Recherche colonne HT = colonne TTC ?

Si tu ne souhaites pas envisager la piste du TCD, je laisse mes petits camarades de jeu prendre le relais
 

Discussions similaires

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