Jump to content
  • 0

Question générale au sujet d’un script


Thémis
 Share

Question

Bonjour,

Dans un post du 2 novembre 2020, je cherchais une solution à un problème précis en attendant, disais-je, de régler le problème qui était à la source de plusieurs autres, c’est-à-dire l’absence d’une table Personnes dans ma base.

Je souhaite maintenant régler ce problème, et j’ai donc créé une table Personnes qui, éventuellement, sera liée à mes autres tables par une table intermédiaire. Mais je n’en suis pas tout à fait là. Il me faut d’abord transférer dans cette table Personnes tous les noms figurant dans la rubrique Nom des autres tables. Et c’est ici que j’aimerais avoir certains conseils de nature générale, que quelqu’un me mette sur la bonne piste quant au script à utiliser.

Comment dois-je procéder ? Dois-je d’abord créer une liste concaténée de tous les noms figurant dans la rubrique Nom des autres tables? Si oui, comment ensuite puis-je « boucler » à travers cette liste ?

Dois-je plutôt « boucler » à travers tous les enregistrements des autres tables pour récupérer les noms un à un ? Mais comme certaines rubriques Noms contiennent plusieurs noms séparés par des retours chariot, la même difficulté se pose car je devrai « boucler » dans ces rubriques.

Bref, j’apprécierais obtenir quelques conseils généraux sur la meilleure façon de procéder avant de m’attaquer à l’écriture du script.

Merci de votre aide.

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Bonjour Thémis,

Oui, je me souviens de cette discussion.

Alors, boucler sur les enregistrements des différentes tables exigera de créer des scripts (ou des parties de script) avec les spécificités de chaque table, notamment la rubrique Table::nom, qui est forcément différente d'une table à l'autre. En outre, il faudra boucler à l'intérieur de chaque enregistrement (sous-boucle) si celui-ci comporte plusieurs valeurs (c'est à dire plusieurs lignes) à l'intérieur de la rubrique Nom. Et enfin, si on souhaite utiliser la propriété de création via lien (ce qui facilite la non création de doublons), il faudra une occurrence Table_Personne_creation reliée à chaque table comportant une rubrique Nom. Il faudra également prévoir une rubrique globale Table::nom_a_creer pour accueillir chaque nom successif, au sein de la sous-boucle destinée à isoler chaque nom s'il y en a plusieurs (et le lien sera en gros Table::nom_a_creer = Table_Personne_creation::nom avec propriété de création).

Avantage de cette méthode, qui est complexe, reconnaissons-le : dès que l'enregistrement Personne est créé, on peut rapatrier son identifiant dans une rubrique Table::id_personne (puisque l'objectif est de stocker les identifiants des enregistrements Personne plutôt que les noms).

Une autre méthode serait de regrouper tous les noms de toutes les tables dans un seul et même fichier Excel, d'utiliser le dédoublonnage d'Excel et d'importer le résultat dans la table Personne.

Cette méthode sera plus rapide. Par contre, après, il faudra compléter les Table::id_personne, par exemple avec des Remplacer contenu rubrique utilisant une formule SQL…

Qu'en penses-tu ?

Jérémie

Link to comment
Share on other sites

  • 0

Bonjour Jérémie, et merci de tes suggestions.

Oui, ta première méthode est effectivement complexe, et si elle l'est pour toi, imagine pour moi... Quant à la deuxième méthode, je ne connais rien à Excel ni à SQL. Ça risque d'être une vraie galère.

Avant d'aller plus loin dans l'une ou l'autre de ces voies, j'aimerais te soumettre une autre option : si je créais un enregistrement dans l'une des tables et si j'y incluais dans la rubrique Nom tous les noms qui figurent dans toutes les tables, ne resterait-il pas alors qu'à boucler sur cette seule rubrique et à faire des va-et-vient entre cette rubrique et la nouvelle table Noms ? Peut-être est-ce trop simpliste ? Qu'en penses-tu ?

Link to comment
Share on other sites

  • 0

Cette piste aussi est bien.

Pour collecter les noms d'une table, tu pourras utiliser une rubrique statistique Liste, puis faire des copier-coller.

Pour moi, si le point de regroupement était un fichier Excel plutôt qu'une rubrique FileMaker, ça serait quand-même plus tranquille. Tu pourrais dédoublonner dans Excel (il existe des explications pour cela en ligne), tu pourrais facilement trier, survoler l'ensemble, constater et corriger les anomalies (telles que "Jean Pierre" à la place de "Jean-Pierre"), etc.

Link to comment
Share on other sites

  • 0

D'accord, je vais tenter la piste Excel. Tu peux m'expliquer brièvement comment procéder pour regrouper tous les noms dans un fichier Excel ? Je les place tous dans une même rubrique FM pour commencer ?

Link to comment
Share on other sites

  • 0
Il y a 4 heures, Thémis a dit :

Je les place tous dans une même rubrique FM pour commencer ?

Pas forcément. Il te faut surtout une rubrique Statistique Liste de table::nom dans chaque table.

En mode utilisation, tu affiches tous les enregistrements, tu copies l'intégralité de cette rubrique et tu la colles dans Excel. Cette opération est à faire une fois par table.

NB : si seulement on pouvait copier directement depuis l'index (CMD-I), ça serait top, mais bon…

Link to comment
Share on other sites

  • 0

Bonjour,

Deux méthodes simples pour dédoublonner :

- dans la continuité de la proposition de @Jérémie Gimenez qui exploite la statistique de type ListeDe, créer un calcul (une rubrique ou une variable dans un script) qui utilise la fonction UniqueValues (qui peut aussi être combinée à SortValues pour avoir les valeurs dédoublonnées et triées) - notons que ces fonctions ne sont pas traduites en FR.

- utiliser le principe de regroupement lors de l'export. Trier les enregistrements sur le Nom - exporter la rubrique Nom (en Excel par exemple) en disant de regrouper par Nom (zone en haut à droite de la fenêtre d'export : grouper par

Si on part de la première proposition, on peut par exemple réaliser un script qui va successivement dans les différentes tables, définit une variable et l'augmente des valeurs de la rubrique stat en dédoublonnant : $listNom = UniqueValues ( liste ( $listNom ; RubStatTable1 ) ) et puis $listNom = UniqueValues ( liste ( $listNom ; RubStatTable2 ) ), etc. Cette variable pourra ensuite servir à une boucle de création des enregistrements des noms de personne dans la table dédiée.

 

 


bien à toi,

Tanguy

Link to comment
Share on other sites

  • 0
il y a 41 minutes, tcolles a dit :

en disant de regrouper par Nom (zone en haut à droite de la fenêtre d'export : grouper par

Truc auquel je ne pense jamais…  👏

Après, j'ai une bonne raison d'aller plutôt vers les techniques "mains dans le cambouis", qui est que souvent, pendant qu'on fait nos aller-retour FM / Excel ou pendant qu'on survole le résultat Excel, on s'aperçoit de cas particuliers auxquels on n'avait pas pensé avant : des doublons qui en fait n'en sont pas, et qui mériteraient qu'on modifie une partie des enregistrements en amont, des données vides qui ne devraient pas l'être, des données non conforme (avec espaces ou sauts de ligne), un nombre de données obtenues beaucoup plus petits ou plus grand que ce qu'on pourrait attendre, prénom qui est le même mais a subi des orthographes différentes au fil du temps, etc.

Bref, je profite toujours de ces phases de transfert pour contrôler humainement la cohérence des données, mais les 2 techniques de @tcolles sont hyper efficaces.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...