Excel VBA - Réunir les données de plusieurs pages en une unique
Bonjour à tous,
J'espère que vous allez bien,
Je vous demande votre aide à propos d'une macro avec une "loop". J'en ai déjà rédigé mais pas à ce niveau de complexité.
Pour contextualiser, J'utilise une application nommée "Kizeo" qui me permet de recevoir des rapports de chantier journaliers sur Excel.
A la fin du mois, je récupère tous ces fichiers Excel et je déplace les feuilles dans un seul Excel.Toutes les feuilles se nomment automatiquement "Worksheet", "Worksheet (2)", "Worksheet (3)", ... etc. Dans cet excel, j'y intègre ma feuille intitulée "Synthèse". Cette feuille "Synthèse" se présente de la même façon que les tableaux des worksheets, seulement elle réunira toutes les données des ces worksheets.
Je me retrouve donc avec un Excel contenant ma feuille "synthèse" (vierge pour le moment) et un nombre aléatoire de feuille "Worksheet (X)". (X étant le nombre de feuille nommée Worksheet)
A partir de là, je dois trouver un moyen de créer un bouton permettant l'éxecution du programme suivant :
- Copier/coller les données des tableaux "Worksheet (X)" dans le tableau de synthèse et supprimer ces feuilles après. Sachant que l'intégration d'une "loop" sera certainement nécessaire car le nombre de feuilles "Worksheet (X)" est aléatoire. J'ignore comment lancer le programme jusqu'à ce qu'il n'y ai plus de feuille autre que ma feuille de synthèse.
-Egalement, si l'on rentre dans le détail des tableaux, ils sont tous présentés de la même façon (worksheets et tableau de synthèse). Les noms de colonnes sont les mêmes dans le même ordre. Seul les données des tableaux diffèrent. il y a les colonnes "Nom", "prénom", "date de réponse", "date", ... etc. Un point important, les colonnes "Effectif", "V.U. (<3,5T)", "P.L. (>3,5T)" et "Pelle hydraulique" se présentent sous forme de doublons (format nombre, toutes les autres colonnes sont au format Texte ou date). Par exemple, la personne qui va remplir le rapport va rentrer les 5 chantiers qu'il a effectué aujourd'hui et chaque chantier va représenter une ligne du tableau. Donc, les valeurs "Effectif", "V.U. (<3,5T)", "P.L. (>3,5T)" et "Pelle hydraulique" vont être reportées une fois par ligne. Or, quand nous lisons le tableau pour la date du jour, nous allons croire que la personne qui a renseigné le rapport à utilisée un effectif de 4 personnes pour le chantier 1, puis 4 personnes pour le chantier 2, ... etc. Alors qu'il n'a eu recours qu'a 4 personnes dans la journée pour tous les chantiers. J'ai donc besoin, lors du transfert des données des feuilles "Worksheet (X)" vers la feuille "Synthèse", de supprimer les doublons des colonnes "Effectif", "V.U. (<3,5T)", "P.L. (>3,5T)" et "Pelle hydraulique" pour la même "date".
Voilà, j'èspère avoir été clair dans la description de ma problématique. Je vous remercie énormément pour votre aide.
Dernier point, je cherche à apprendre comme résoudre mon problème et non simplement le résoudre. Je vous serais encore plus reconnaissant si vous pouviez détailler légèrement comment vous avez procédez pour les résoudre.
Pour info, j'utilise une version "Microsoft® Excel® pour Microsoft 365 MSO (Version 2202 Build 16.0.14931.20648) 32 bits" entreprise.
N'hesitez pas à me contacter si vous avez des questions.
Merci d'avance,
Arthur
Bonjour,
Il n'était pas utile de supprimer le texte de la première discussion et d'en créer une nouvelle (avec la pièce jointe).
Ceci étant, je n'ai pas regardé ton classeur (non pas qu'il soit dénué de tout intérêt, mais parce qu'avant de t'embarquer sur une galère, il serait préférable de vérifier si un pédalo n'est pas disponible
Dans le cas présent, il me semble qu'un coup d'œil (appuyé) du côté de Power Query serait profitable ... Tu peux :
- "consolider" tous les classeurs sauvegardés dans un dossier particulier (puisque tous ont une structure identique)
- ne pas copier-coller toutes tes feuilles dans un classeur centralisateur et les supprimer ensuite
- une fonctionnalité existe qui permet de supprimer les doublons
- etc.
Puisque tu cherches à apprendre, ça me paraît l'occasion rêvée (et je pense sincèrement que c'est un peu plus simple à appréhender et à mettre en œuvre qu'une usine à gaz en VBA)
Bonjour,
Merci pour votre réponse. Je ne connais pas Power Query. Je vais me pencher dessus. Est-ce une power plateform ?
Malheureusement, j'ai une deadline assez courte et mes collègues n'utilisent qu'Excel. Ce projet ayant pour objectif de les dépanner rapidement, je n'ai pas le temps d'apprendre l'utilisation de cet outil.
Re-bonjour,
Power Query, c'est de l'Excel pur
Voir, par exemple : Importer des données à partir d’un dossier contenant plusieurs fichiers (Power Query) - Support Microsoft
bonjour
Sub Teste()
With Sheets("Synthèse")
r = Application.Match("Cumul", .Columns(1), 0) 'chercher la cellule "CUMUL"
If IsNumeric(r) Then ' trouvé
Set c = .Cells(r, 1) 'la cellule "CUMUL"
c.Offset(-1).Resize(1000).EntireRow.Insert 'ajouter 1000 lignes (exagéré !!)
With .Range(.Range("a4"), c.Offset(-1, 17)) 'la plage de A4 jusqu'à la ligne précedente de CUMUL
.ClearContents 'RAZ
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
If .Range("A3").Value = "" Then .Range("A3").Value = " " 'cette cellule ne peut pas être vide
For Each sh In ThisWorkbook.Worksheets 'boucle les worksheets
If LCase(sh.Name) Like "worksheet*" Then 'le nom est "worksheet..."
With sh.UsedRange
Set c1 = .Offset(2).Resize(.Rows.Count - 2, 17) 'la plage à déplacer
End With
With c.End(xlUp).Offset(1).Resize(c1.Rows.Count, c1.Columns.Count) 'la destination
.Value = c1.Value 'coller les données
.Borders(xlEdgeBottom).Weight = xlMedium 'lignes horizontal avant et après
.Borders(xlEdgeTop).Weight = xlMedium
.Columns(18).Value = sh.Name 'le nom de la feuille dans la colonne R
End With
Application.DisplayAlerts = False
sh.Delete 'delete la feuille
Application.DisplayAlerts = True
End If
Next
r = c.End(xlUp).Row 'dernière ligne avec données
.Rows(r + 1).Resize(c.Row - r - 1).Delete 'delete la plage inutile
Else
MsgBox "pas de cellule ""CUMUL"""
End If
End With
End SubU. Milité,
Je viens de comprendre ce que tu m'as expliqué. Merci beaucoup pour le lien et le conseil, en effet, cela facilite bien les choses. Je vais me pencher sur l'apprentissage de cet onglet.
Et Bart, Merci beaucoup pour le programme, il fonctionne à merveille ! Et merci pour les commentaires dans ta macro, j'ai compris ta façon de procédé.
Encore Merci à vous.
Bonsoir à tous !
En retard....une approche Power Query :
Pour éventuellement tester : mettre à jour l'emplacement du classeur à analyser puis "Actualiser tout".
Merci beaucoup JF,
Aux vues de la puissance de Power Query, je vais chercher une formation car je n'arrive pas à exploiter ton excel sans me poser 1000 questions sur les fonctionnalités et possibilités de Power Query. J'ignore totalement la puissance de l'onglet "Données".
Merci pour ton aide,
Arthur
Bonjour à tous !
Aux vues de la puissance de Power Query, je vais chercher une formation car je n'arrive pas à exploiter ton excel sans me poser 1000 questions sur les fonctionnalités et possibilités de Power Query. J'ignore totalement la puissance de l'onglet "Données".
L'investissement dans cet outil d'une grande puissance est rapidement rentabilisé.
Sachez qu'il existe une quantité impressionnante de tutoriels pour vous mettre le pied à l'étrier.
Bonnes découvertes !