Fusion de 2 tableaux différents

Bonjour à tous,

J'ai fait une extraction d'un fichier disponible librement sur le site gouvernemental GeoDAE

Nous sommes toute une équipe qui travaille à remettre en ordre les informations obsolètes.

La base nationale des DAE doit être informée des modifications apportées sur les DAE ( modification d'emplacement, etc.)

Sur mon tableau de travail, qui est dans l'onglet "DAE" j'ai intercalé des colonnes supplémentaires (en jaune) qui contiennent les corrections à apporter.

Les colonnes titrées en bleu sont les informations que j'ai envoyées à Geo DAE le 31 juillet 2024.

Sur la nouvelle extraction du jour, (05 août 2024) dans l'onglet "source", j'ai des informations plus récentes qui tiennent compte des corrections faites.

C'est depuis ce tableau que je dois mettre le mien à jour.

Le problème à résoudre consiste à fusionner les nouvelles informations sur mon tableau de travail sans écraser les anciennes qui n'ont pas subi de changement.

Pour déterminer cela, il y a des champs "date" en fin de tableau :

  • les champs issus de GeoDAE sont en orange, la plupart ont la particularité d'être nommés " c_xxxxxx "
  • les champs ajoutés
    20classeur2.xlsx (19.14 Ko)
    à mon tableau sont en jaune.

Le souci est que le tableau réel fait une centaine de champs. le tableau source fait 46 champs.

Mais bon, s'il faut tous les nommer un par un, je prendrai le temps nécessaire.
Sur le l'onglet DAE du fichier excel ci-joint, j'ai mis 2 tableaux : celui de départ, et celui attendu après la fusion. (
NB : les données sont fantaisistes, bien sûr.

Comment réaliser cela ? Merci d'avance de votre aide.

Bonjour

2023 n'est pas une version Excel mais une révision pouvant s'appliquer à diverses versions

Merci de vérifier et mettre ton profil à jour en indiquant 2019, 2021, 365...

Ce que tu reçois est un xlsx ou un csv ? il y a seulement les colonnes orange dedans ?

L'ID unique d'une ligne est gig ou le couple gid, c_gid ?

Bonjour

J'ai corrigé mon profil. C'est une version Office Professional Plus 2021, achetée en 2023. oup's, désolé pour l'info erronée. ">

Le fichier que je télécharge est un .csv que je transforme en .xls. il y a environ 43 champs (les oranges).
Voir le site https geodae-base-nationale-des-defibrillateurs/
Le fichier extrait fait dans les 50 Mo et recense tous ceux de la France entière. Je sélectionne que ceux de ma commune et j'en fait un xls bien plus léger. 300 Ko.

Les champs jaunes sont ceux que j'ai insérés.

Le champs commun est le c_gid.

Le problème est aussi que quand j'ajoute un NOUVEAU DAE à la base officielle, le site GeoDAE lui attribue un N° de c_gid qu'il n'a évidement pas au départ.
Ce sera cas pour le square de Normandie et l'école DOLTO.
Les "nom corrigé" de mon tableau sera alors le champs commun avec "ç_nom" de la nouvelle extraction de la base GeoDAE pour pouvoir attribuer le N° c_gid sur mon tableau.

Il faudrait alors que la nouvelle extraction ajoute le N° de c_gid attribué et les c_lat_coor1 et c_long_coor1 et les 40 autres champs.
Si on a bien enregistré sur le site, ils devraient être semblables. Sinon, on refera une correction sur le site jusqu'à satisfaction.
Les enregistrements sur le site sont faites à la mano. Le formulaire que j'ai créé permet de comparer les 2 "bases" d'information.

Merci de t'être penché sur ma problématique.

Bonjour

Non ton profil indique toujours 2023 et non 2021.

Tu ne donnes pas le code postal mais a priori c'est 92400

Cependant ne trouvant pas les nouveaux, difficile de modéliser une solution

Mon profil est modifié ce jour. Je n'avais pas vu le bouton "enregistrer" sous mon bandeau.

J'ai refait un petit peu le tableau pour mettre en évidence les nouveaux DAE. + une capture d'écran.

Le tableau du haut est celui de travail, celui du bas est le résultat attendu. C'est pour présenter ce que je voudrais une fois la fusion faite.

Merci et encore désolé pour le profil.

17classeur3.xlsx (18.95 Ko)
capture d ecran 2024 08 07 120901

RE

J'avais bien compris le résultat attendu mais le problème est que sur le site GeoDAE la correction n'est pas faite pour les 2 lignes

Il faudrait un cas avec le tableau ancien correspondant à une modification déjà faite sur ce site sinon je ne peux modéliser

Le tableau de l'extraction (fictive bien sûr) de GeoDAE est sur l'onglet "source" de mon fichier.

Les numéros gid et c_gid sont bidons., créés de mon imagination :)

capture d ecran 2024 08 07 125512

C'est nous qui feront les extractions et on les collera dans l'onglet "source".
La fusion se fait donc depuis le tableau de l'onglet "SOURCE" vers le tableau dans l'onglet "DAE"

L'information que je donnais au sujet du site GeoDAE était pour indiquer que je ne dévoilais pas des données confidentielles.

Le tableau de travail réel fait 200 lignes actuellement et 100 champs.

RE

Il est beaucoup plus logique d'extraire un csv à traiter avec PowerQuery (auquel on passe le chemin du csv à exploiter en paramètre) qui pourra comparer les 2 tableaux et générer le nouveau

Le copier coller faisant partie des 7 plaies d'Excel, lol...

Sinon reste à attendre les VBistes et les boucles peu optmum ...

Bonjour,

J'ai regardé un peu votre problème hier et au vu des nouveaux messages je ne peux qu'appuyer la proposition de Chris. C'est un problème qui se traite le plus efficacement avec powerquery. Sinon vous devez faire des fonctions compliquées et/ou des macros, elles aussi pas évidentes.

Bonjour et merci à vous deux.

Je ne connais pas PowerQuery, mais je demande qu'à apprendre.
Le fichier .csv original disponible sur le site fait 57Mo.

Comment dois-je m'y prendre pour faire une extract et cibler que les DAE de ma commune sans le convertir en excel ? (pour avoir un fichier moins lourd)
Je ne comprends pas bien comment après on va pouvoir injecter des données .csv dans un tableau excel, mais je demande qu'à apprendre.

RE

Je ne connais pas PowerQuery, mais je demande qu'à apprendre.
Le fichier .csv original disponible sur le site fait 57Mo.

Comment dois-je m'y prendre pour faire une extract et cibler que les DAE de ma commune sans le convertir en excel ?

Cela se fait en quelques clics si le nom du fichier et l'emplacement du fichier ne changent pas...

Un exemple plus élaboré avec chemin et CP paramétrés.

J'ai affiché le résultat dans un onglet mais l'idée est de croiser avec le tableau de travail directement dans PowerQuery pour constituer le tableau à jour.

21geodae2.xlsx (80.71 Ko)

Ok. Je suis sur mon smartphone là. J'ai donc une vision du fichier mais pas des codes.

Tu as réussi a extraire les infos concernant ceux qui sont avec le code postal 92400., ce qui correspond à mon dossier "Source" de démo.

Bien !

Le plus compliqué à présent va être de mettre à jour le tableau de travail...

RE

Le plus compliqué à présent va être de mettre à jour le tableau de travail...

Non si on a effectivement un csv avec des changement sur des codes présents dans le fichier de travail, ce n'est pas compliqué.

Bonjour,

ce n'est pas compliqué

Pour celui qui sait faire, sûrement.

Bon, j'ai essayé de regarder s'il y avait un code qq part sur ton fichier. Je n'ai rien vu.
Comme indiqué précédemment, je ne connais absolument pas PowerQuery. Je ne sais donc pas où trouver le code qui permet l'extraction depuis le site GeoDAE.
et encore moins essayer d'y comprendre qq chose.

Peux tu me donner quelques indications histoire que je me couche moins ignorant ? Déjà, où se trouve PowerQuery ? Comment s'en servir ?

Pour l'exemple, tu peux modifier le tableau de travail en mettant des dates antérieures, effacer des données, et essayer de le mettre à jour avec l'extraction faite.

Le point de départ, c'est la date de mise à jour du site GeoDAE par rapport à celle enregistrée sur le tableau de travail.
Le champ de référence c'est "c_gid" et quand il n'existe pas sur mon tableau de travail, (cas d'un nouveau DAE) c'est le "c_nom" du DAE.

NB: les noms initiaux des DAE sont souvent modifiés sur les anciens enregistrement. Sur la commune ils ont eu la mauvaise idée de tous les appeler pareils. d'où le champs "noms corrigés" de mon tableau qu'on devra modifier en faisant la mise à jour sur GeoDAE.

Il faudra prévoir le cas où les code postaux n'ont pas été renseignés, voire faux. Dans ce cas, le nom de la commune sera le champs de recherche.
Mais on verra ça plus tard. Si j'ai la procédure pour faire la sélection avec le code postal, je devrais me débrouiller pour trouver comment faire pour faire l'extraction depuis le nom de la ville.

merci de ton indulgence et de ton aide.

J'ai trouvé l'éditeur de power query. J'ai vu les lignes de code, j'avoue que ça a l'air coton...

Je ne vois pas où est indiqué le lien vers le fichier du site GeoDAE.

J'ai trouvé une vidéo pour découvrir Power Query. Je vais visionner ça ce soir.

Bonjour

Pour 9 instruction sur 10, on ne code pas, on clique dans le ruban ou on clique droit.

Le nom et chemin du ficher csv ainsi que le code postal sont dans un tableau de paramètres (à gauche dans l'onglet geodae)

L'un comme l'autre sont modifiables... Et l'actualisation de la requête (un clic) prends en compte les nouveaux paramètres.

Dans une requête PowerQuery, chacune des étapes est listée à droite dans l'éditeur PowerQuery : quand on sélectionne une étape en voit le détail dans la barre de formule et en cliquant sur le petit rouage de la ligne d'étape.

Il y a 8 étapes dont la moitié sert à récupérer et utiliser les 2 paramètres du tableau initial.

Mouai... et comment ça se passe pour actualiser le tableau de travail ? Parce que là je suis toujours dans le noir total.

Et je ne vois toujours pas où on indique le lien du fichier .csv sur le site GeoDAE.

J'espère qu'avec la vidéo de démo je vais comprendre. 45 min. Je sens?que le tube d'aspirine va prendre cher.

RE

Manifestement tu n'as pas envie...

On ne sais d'ailleurs pas ce que tu envisageais...

Dernière tentative avec le lien vers le fichier site (j'ignore si son nom est mis à jour ou pas)

15geodae2b.xlsx (80.85 Ko)

Bonjour 78chris.

J'ai visionné la vidéo concernant les tout premiers pas avec PowerQuery. Ça m'a permis de comprendre plusieurs choses.
et justement, je me demandais où était la liaison entre le site et le fichier Excel. À savoir que le fichier .csv est mis à jours 4 fois par jour. Il me semble que le lien change parfois.

https: //ww w.youtube .com/ watch? v= L2sJPmfaPpE à 26'11" il explique comment ajouter une colonne.

J'ai visionné le code et dans la version geodae2.xls , la case A1 pointait vers un fichier csv local ( T:\TEMP\geodae.csv) ,
et, si je ne me trompe pas, dans ce cas il fallait faire le job en 2 étapes :

  • télécharger le fichier .csv de 57 Mo, l'enregistrer en local dans un dossier dédié
  • faire un nouveau fichier excel où là on peut travailler sur le csv pour extraire les infos.
    Je me trompe ?

Effectivement, le téléchargement et les propriétés des champs est bien plus puissant qu'une conversion depuis Excel.

Avec PowerQuery, depuis le site, en voulant sélectionner le code postal, ça ne fonctionne pas car il y plus de 1000 lignes à traiter et c'est la limite du logiciel.
L'objectif était de charger un fichier cvs ne contenant que les infos de ma commune.
Visiblement c'était un point de blocage à ma compréhension du fonctionnement de PowerQuery.

J'ai donc réussi, grâce à toi et à la vidéo, comment faire cette première étape. (faire le lien entre un tableau excel et la base nationale). Youpiiii

À présent, si j'ai bien compris, avec PowerQuery je peux ajouter des colonnes (mes fameuses jaunes) pour "refaire" mon tableau de travail et ainsi les données GeoDAE s'actualiseront à chaque fois que :

  1. je mettrais à jour le lien si besoin
  2. je cliquerai sur le bouton "actualiser tout"

C'est bien ça ?

J'ai un peu visualiser le code.
serait il possible d'ajouter des filtres INSEE et VILLE car parfois les enregistrements ne sont pas correctement effectués.

Certains il manque le code postal, d'autre la ville...
J'ai essayé mais même en le faisant directement dans le code avancé, il doit manquer des conditions ou bien je ne le fais pas correctement.
au code avancé initial

let
    Source = Excel.CurrentWorkbook(){[Name="Chemin"]}[Content],
    PStep = Table.AddColumn(Source, "FSource", each Csv.Document(File.Contents([Fichier]),[Delimiter=";", Columns=46, Encoding=65001, QuoteStyle=QuoteStyle.None])),
    CP = PStep[Code Postal]{0},
    #"Autres colonnes supprimées" = Table.SelectColumns(PStep,{"FSource"}),
    #"FSource développé" = Table.ExpandTableColumn(#"Autres colonnes supprimées", "FSource", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32", "Column33", "Column34", "Column35", "Column36", "Column37", "Column38", "Column39", "Column40", "Column41", "Column42", "Column43", "Column44", "Column45", "Column46"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32", "Column33", "Column34", "Column35", "Column36", "Column37", "Column38", "Column39", "Column40", "Column41", "Column42", "Column43", "Column44", "Column45", "Column46"}),
    #"En-têtes promus" = Table.PromoteHeaders(#"FSource développé", [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"c_gid", type text}, {"c_etat_valid", type text}, {"c_nom", type text}, {"c_x_coor2", type text}, {"c_y_coor2", type text}, {"c_lat_coor1", type text}, {"c_long_coor1", type text}, {"c_xy_precis", type text}, {"c_id_adr", type text}, {"c_adr_num", type text}, {"c_adr_voie", type text}, {"c_com_cp", type text}, {"c_com_insee", type text}, {"c_com_nom", type text}, {"c_acc", type text}, {"c_acc_lib", type text}, {"c_acc_pcsec", type text}, {"c_acc_acc", type text}, {"c_acc_etg", type text}, {"c_acc_complt", type text}, {"c_photo1", type text}, {"c_photo2", type text}, {"c_disp_j", type text}, {"c_disp_h", type text}, {"c_disp_complt", type text}, {"c_date_instal", type date}, {"c_etat_fonct", type text}, {"c_id_euro", type text}, {"c_lc_ped", type text}, {"c_dtpr_lcped", type text}, {"c_dtpr_lcad", type date}, {"c_dtpr_bat", type date}, {"c_freq_mnt", type text}, {"c_dispsurv", type text}, {"c_dermnt", type date}, {"c_maj_don", type date}, {"c_expt_siren", type text}, {"c_expt_rais", type text}, {"c_etat", type text}, {"c_application_provenance", type text}, {"c_doublon", type text}, {"c__edit_datemaj", type datetime}, {"c_srid_origin", type text}, {"the_geom", type text}, {"cc_photo1", type text}}),
    #"Lignes filtrées" = Table.SelectRows(#"Type modifié", each ([c_com_cp] = Text.From(CP)))
in
    #"Lignes filtrées"
    

j'ai essayé d'ajouter ça,

    
CP = PStep[Code Postal]{0}, VILLE = PStep[ville]{0}, INSEE = PStep[insee]{0},

#"Lignes filtrées" = Table.SelectRows(#"Type modifié", each ([c_com_cp] = Text.From(CP)), each ([c_com_insee] = Text.From(INSEE)), each ([c_com_nom] = Text.From(VIL))))

et j'ai bien entendu créé les colonnes adhoc

capture d ecran 2024 08 09 131806

mais ça me met des messages d'erreur.

comment dois-je m'y prendre via l'éditeur ? J'ai bien vu la variable "CP" et j'ai essayé d'y mettre la VILLE mais je n'y comprends rien.
Il faudrait la fonction "ou" et pour le nom de la ville "courbevoie", Courbevoie", ou "COURBEVOIE" ça dépend des gens qui ont enregistré ça.

via le menu à droite, j'ai tenté le clic droit "insérer l'étape d'après" mais je ne crée que des erreurs.

capture d ecran 2024 08 09 131730
Rechercher des sujets similaires à "fusion tableaux differents"