Microsoft 365 Regrouper plusieurs onglets avec les mêmes colonnes en un seul onglet

damsleretour

XLDnaute Nouveau
Bonjour,

Je récupère des données via un site Internet et ces données sont mis dans plusieurs onglets (appelés table). Vu que ces onglets ont les mêmes noms de colonne (uniquement noms de colonne), j'aimerais les synthétiser dans un seul onglet mais avec la commande fusionner ou regrouper je ne m'en sors pas.

Pourriez-vous m'aider s'il vous plaît?

Merci énormément.

Dans l'attente de votre retour.

Bon week-end.

Respectueusement,

Damien.
 

Pièces jointes

  • mickey.xlsx
    228.1 KB · Affichages: 13

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @damsleretour :),

Un essai via VBA:
  • Le code est dans le module de la feuille "Regrouper"
  • On a supposé que toutes les tables à regrouper étaient des tableaux structurés
  • Le tableau structuré final s'appelle "tRegroup"
  • cliquer sur le bouton "Hop!" de la feuille "Regrouper"
Le code:
VB:
Sub regrouper()
Dim x
   Application.ScreenUpdating = False
   Cells.Delete
   For Each x In ThisWorkbook.Worksheets
      If LCase(x.Name) Like "table #*" Then x.Range("a1").ListObject.DataBodyRange.Copy Me.Cells(Rows.Count, 2).End(xlUp).Offset(1)
   Next x
   For Each x In ThisWorkbook.Worksheets
      If LCase(x.Name) Like "table #*" Then x.Range("a1").ListObject.HeaderRowRange.Copy Me.Cells(1, 2): Exit For
   Next x
   With Me
      .ListObjects.Add(xlSrcRange, .Range("b1").CurrentRegion, , xlYes).Name = "tRegroup"
      .ListObjects(1).TableStyle = "TableStyleMedium7"
      .Range("tRegroup").Interior.ColorIndex = xlColorIndexNone
      .Range("tRegroup").EntireColumn.AutoFit
    End With
End Sub
 

Pièces jointes

  • damsleretour- mickey- v1.xlsm
    257.2 KB · Affichages: 37
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour à tous

Toutes les tables sont des duplicatas (51 duplicatas...) d'une unique requête PowerQuery où tu développes dans chacune une seule table.

Au lieu d'extraire ainsi chaque table, tu pouvais directement dans Table 0 développer l'ensemble et non avoir une requête par table.
En quelques clics c'est fait et tu as le tout dans un unique onglet et un classeur bien plus léger.

Il y avait des double retours à la ligne dans plusieurs colonnes : j'ai remplacé par un seul.

Edit : une pseudo table à filtrer pour éviter la dernière ligne vide
 

Pièces jointes

  • Tout_mickey_PQ.xlsx
    42.3 KB · Affichages: 19
Dernière édition:

chris

XLDnaute Barbatruc
RE

Il te suffit de regarder l'unique requête du fichier que j'ai joint : j'ai supprimé les requêtes table_1 à Table_51 et simplement modifié Table_0

Si tu coinces reposte

Il faudra néanmoins une requête par page mais on peut paramétrer je pense : je regarde et reviens
 
Dernière édition:

damsleretour

XLDnaute Nouveau
Re,

je vais fouiller car j’ai vu que tu avais filtrer … mais j’ai jamais modifié des tables. Est ce que ce genre de choses peut aussi fonctionner si j’ai plusieurs pages web?

p.s. j’ai fait 2 essais avec plusieurs pages web. pour le moment, je suis en difficultés pour qu’il trouve toutes les tables. Il me demande la ressource à laquelle acceder dans navigation mais pas les tables. Et si je pars sur paramètre, je vois toutes les tables mais j’arrive pas à les exploiter. Je fouille de mon côté.En tout cas, ton exemple m’aide énormément. Si je dois faire cela à chaque page web, je le ferais sans soucis. Si c’est est possible de l’automatiser, ce serait mieux.
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour

J'ai récupéré les 70 pages soit plus de 33 000 lignes en une seule requête

Il faut un petit moment pour tout récupérer (5 minutes sont mon PC avec une connexion fibre rapide) mais cela fonctionne.

Si la source ne change pas, délier le résultat de la requête pour ne pas réimporter ces 33 182 lignes

Fichier trop gros donc à récupérer ici https://www.cjoint.com/c/KGzpvFcJoCc

Pour info le code M
VB:
let
    Source = Table.FromColumns({Lines.FromBinary(Web.Contents("https://inducks.org/publication.php?c=fr%2FJM"))}),
    #"Lignes filtrées" = Table.SelectRows(Source, each Text.Contains([Column1], "c1=JM")),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Lignes filtrées", "URL", each Text.BetweenDelimiters([Column1],"=JM",""">all")),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Personnalisée ajoutée",{"URL"}),
    #"Personnalisée ajoutée2" = Table.AddColumn(#"Autres colonnes supprimées", "Pages", each Web.Page(Web.Contents("https://inducks.org/issue2.php?c=fr&c1=JM"&[URL]))),
    #"Pages développé" = Table.ExpandTableColumn(#"Personnalisée ajoutée2", "Pages", {"Data"}, {"Data"}),
    #"Data développé" = Table.ExpandTableColumn(#"Pages développé", "Data", {"Code de l'histoire", "Titre", "Nombre de pages", "Auteurs", "Publications", "Personnages, commentaires"}, {"Code de l'histoire", "Titre", "Nombre de pages", "Auteurs", "Publications", "Personnages, commentaires"}),
   #"Valeur remplacée" = Table.ReplaceValue(#"Data développé","#(lf)#(lf)","#(lf)",Replacer.ReplaceText,{"Code de l'histoire", "Titre", "Nombre de pages", "Auteurs", "Publications", "Personnages, commentaires"})
in
    #"Valeur remplacée"
 
Dernière édition:

damsleretour

XLDnaute Nouveau
Bonsoir,

Désolé pour mon manque de nouvelles. J'ai du boucler un boulot avant les vacances.

J'ai regardé le code et j'ai essayé de l'adapter pour partir sur chaque numéro et non sur le listing par année. Cela me permettrait grâce à l'url, de pouvoir nommer chaque histoire par l'apparition (numéro du magazine).

Pour le moment, je n'y arrive pas mais je continue à fouiller. De même, j'aurais aimé trouvé une astuce pour le faire en automatique sur toutes les parutions françaises (avoir une énorme base de données) mais je ne sais pas si c'est faisable et surtout si excel supporterait cela.

Je continue à fouiller. Un gros merci pour ton aide. J'essaierais de l'appliquer à d'autres sites pour avoir un bon gros support pour mon projet.

Bonne soirée et encore merci du temps que tu prend pour m'aider.
 

chris

XLDnaute Barbatruc
Bonjour

Tu as bien chaque numéro avec le détail des pages

Le listing par années est le passage obligé pour accéder aux numéros

La page que tu utilisais dans ton post initial fait partie de cette arborescence...
 

damsleretour

XLDnaute Nouveau
Bonjour Chris,


Oui oui je confirme que ton travail fait ce que j'ai demandé. J'ai voulu pousser plus loin l'automatisation au lieu de taper à la main les numéros de magazine mais ça fait tout à fait ce que je souhaitais.

Un énorme merci. J'ai encore énormément de boulot sur ce projet et un projet professionnel sur excel qui me tord le cerveau.

Encore merci pour tout.
 

chris

XLDnaute Barbatruc
Bonjour

Je ne comprends pas ta réponse

Là tout est automatique : la requête récupère les 33 000 lignes décrivant TOUS les numéros...

On ne tape rien, elle utilise directement l'index du listing par années...
 

damsleretour

XLDnaute Nouveau
Bonsoir Chris,

Désolé je suis en vacances avec un accès trés limité à internet et j'ai testé le fichier sur excel online.

Effectivement tout se passe comme je le souhaitais. Je ne voyais pas la colonne publications.

Vraiment top. Tu m'a filé un gros coup de main.

A appliquer sur les autres magazines maintenant. Encore un énorme merci.
 

Discussions similaires

Statistiques des forums

Discussions
314 723
Messages
2 112 214
Membres
111 465
dernier inscrit
Pigier