Recopier une Référence sans doublons

Résolu
Bonjour,

Me voici avec un petit souci, qui devrai être simple a résoudre.
J'ai plusieurs tableaux de dossiers concernant un personne. déclaration, dossier médicaux, dossier judiciaire ... Dans le tableau population qui me dit si la personne a un dossier judiciaire, médical ... doit reprendre la référence de la personne, mais il ne doit pas avoir de doublons de référence.

Ex : La personne avec la référence L6SXWKT57GT a un dossier médical. sa référence doit s'afficher dans le tableau population avec le signe qu'elle a un dossier médical. Cette même personne revient mais cette fois pour un dossier judiciaire, vu que sa référence figure déjà dans le population, il faut qu'il ajoute juste le signe qu'elle a un dossier judiciaire. Vu que les références peuvent ce ressemblé a une lettre ou un chiffre prés, il faudrait que c référence s'inscrive dans le tableau population des qu'une nouvelle entrée ce fait. Aurait-il un solution en dehors d'un macro ?

J'espère que mes explications sont aser claire.

Je vous remercie d'avance pour vos réponses

10 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Problème rencontré : synchroniser les références d'une même personne entre plusieurs tableaux (déclarations, dossiers médicaux, dossiers judiciaires) afin que le tableau population indique, sans doublons, les dossiers existants et leur type. Des solutions évoquées privilégient des macros et des UserForms en VBA pour créer des entrées, vérifier l'existence d'une référence et mettre à jour les colonnes correspondantes lorsque de nouveaux dossiers sont enregistrés. Plusieurs intervenants suggèrent d'utiliser un seul formulaire pour tous les types de données ou d'adapter les macros existantes afin de rediriger les saisies vers les bonnes feuilles et colonnes. Des détails techniques portent sur des références structurées et l’alignement des colonnes BG et BL selon le type de dossier lors des enregistrements.

Bobot (l’IA à votre service)
  1. Bonjour Lucasine

    Aurait-il un solution en dehors d'un macro ?

    Peut-être, tout dépend de la structure de ton fichier et des correspondances entre les tableaux, il faut voir
    Postes un exemple allégé et anonymé de ton fichier sur cjoint.com, fais créer un lien, copies le et reviens le coller ici

    Cdlmnt
    Via
    1. Je fait ça tout de suite merci
  2. j'ai oublier de préciser que une personne pouvais apparaître plusieurs fois dans une tableau,

    Ex : la personne a un fait judiciaire pour (ex : jugement enfant et pour vole) deux fait différent qui figure sous sa référence personnelle dans le tableau judiciaire
    1. Voici le lien vers http://www.cjoint.com/c/FCkqrVk08qT

      Ceci n'est que le fichier basique, il n'a aucune donnée, mais je vous est mis quelques infos sur des zone de textes
      1. Re

        Vu la complexité et la multiplicité des informations et des onglets tu vas devoir passer par des macros

        Om faudrait faire (par type de situation) un userform avec toutes les données nécessaires à entrer et un bouton validation
        Au clic sur le bouton validation une macro relèvera dans l'onglet correspondant (par exemple Déclaration NS) toutes les informations sur la 1ere ligne vide rencontrée puis ira rechercher la ligne de la référence dans l'onglet Population : si elle existe la macro mettre le signe dans la colonne Naissance sinon elle inscrira la nouvelle référence sur la première ligne vide et mettra le signe dans la colonne Naissance

        Ce qui suppose plusieurs userforms et plusieurs macros, c'est loin d'être si simple que ça mais ce sera le meilleur moyen et le plus ergonomique

        Il faudra aussi prévoir une page d'accueil avec un userform permettant de choisir le type d'infos à saisir (naissance, mariage etc) et qui déclenchera l'ouverture de l'userform de saisie correspondant et la suite telle qu'exposée au dessus

        Cdlmnt
        Via
        1. Merci beaucoup pour ton analyse ;-) Le petit souci c'est que je connait Excel et tout ce qui peu être utile niveau tableau mais coté développeur autant dire que je n'y connait rien.

          Je vois ce qu'il faudrait faire mais le voir et le concevoir il a tout un monde ;-)
        2. @LucasineSi tu est prête à te lancer je pourrais te donner un coup de main pour les macros

          Il faut déjà que tu conçoives tes userform

          En commençant par celle des Déclarations de naissance
          Tu fais ALT + F11 pour ouvrir l'Editeur VBA puis Insertion Userform puis à partir de la boite à outils tu places tous tes intitulés (Reference par ex) puis le textbox pour saisir la donnée
          Et en bas de l' userform tu places un bouton pour valider les saisies

          Une fois cela établi on verra pour la macro à associer à ce bouton

          Après les autres userform seront sensiblement pareilles et les macros aussi (suffira d'adapter le renvoi des indos à la bonne feuille et aux bonnes colonnes)

          Cdlmnt
          Via
        3. Merci beaucoup Via55

          Je fait ça et met le fichier via Cjoint des que c'est fait.
          En tout cas un grand grand merci
      2. Bonjour Via55

        J'ai effectuer les Userform de départ et de Déclaration NS avec le max d'infos qui devrai être inscrit. Voici le liens du document

        http://www.cjoint.com/c/FClnPfVfO4T
        1. Bonsoir Lucasine

          Tu as déjà fait du bon boulot, je vais m'attaquer à la macro dès que possible

          Mais avant tout questions :
          1) Est il nécessaire que lorsqu'il y a des choix (comme pour le sexe) il y ait autant de colonnes dans la feuille ? Ne serait il pas plus simple de n'avoir qu'une seule colonne Sexe et que s'inscrive dedans M ou F suivant l'option cochée ? De même pour les types pour les parents etc

          2) Même chose pour la référence, elle est en 4 parties dans l'userform, OK plus facile pour entrer les données mais est il là encore nécessaire qu'elle soit dans 4 cellules différentes dans la feuille ? Ne peut on pas la mettre dans une seule cellule, ce sera plus évident pour faire retrouver une référence après par la macro

          Cdlmnt
          Via
          1. Bonjour via55

            Pour le sexe, il est exacte qu'une seule cellule serai plus simple, mais d'après ce que j'avait comprit il fallait autant de cellule que de case, S'il est possible d'afficher dans une seule cellule par souci.

            Pour la référence, ça risque d'être un peu plus compliqué. Je sais plus ci sur cette enregistrement, il a déjà les formule de génération de référence.
            Dans la 1er partie de la référence c'est une saisi "NS" automatique pour les naissance dés que la 3éme est inscrite (Formule : =SI(C3="";" ";"NS")

            la 2ème est l'année d'ouverture du dossier et la troisième la référence de la personne (unique) pour finir la dernière parti est un code personnelle qui est un code unique par famille.

            Elle est en faite en 4 parti, pour facilité les recherches.

            Si il a une autre solution, pour vous facilité la tache pas souci ;-)
        2. Je regarde pour simplifier, ca serai pas plus simple, d'avoir un seul UserForm pour entrée les données dans les différents tableau ?
          1. Bonjour Lucasine

            OK, donc :
            - Pour le sexe je ne garde qu'une seule cellule dans laquelle sera reporté soit M soit F soit I ?
            - Pour le lien je ne garde qu'une seule cellule dans laquelle sera reporté soit P soit M soit D ?
            - Pour l'état civil des père et mère je ne garde qu'une seule cellule dans laquelle sera reporté soit C soit D soit V soit M soit S soit I ?
            - Pour le type je ne garde qu'une seule colonne avec soit
            Lég soit Nat soit Adop soit Tvé soit Rec soit Adul soit Légmé ?
            - Pour les références je garde les 4 colonnes (on adaptera la macro de recherche en fonction), et dans l'userform Naissance je mets donc automatiquement dans le 1er textbox après Acte N° NS et l'utilisateur devra remplir les 3 autres

            Un seul userform serait plus simple si les infos à entrer étaient similaires mais ce ne sera pas le cas certaines le sont mais d'autres non donc en fait c'est plus simple de faire des userform différents avec des macros différentes qu'un seul qui s'adapterait ainsi que les macros en fonction du type de déclaration

            Je finalise les macros pour enregistrer et modifier la déclaration de naissance et je te fais un premier retour pour voir ce que ça donne. Après on pourra adapter aux autres types de déclaration

            Cdlmnt
            Via

            "L'imagination est plus importante que le savoir."    A. Einstein
            1. Re

              Un premier essai pour Naissance :
              http://www.cjoint.com/c/FCnrcqoQ4GT

              A l'activation de la feuille Accueil le 1er UF apparait

              J'ai resserré les éléments dans l'UF Naissance car l'UF ne tenait pas sur l'écran
              Ensuite le principe :
              1) Tous les textbox et Combobox sont nommés (dans Propriétés) pour être facilement identifiés dans les macros
              2) La 1ere cellule de référence acte n'est pas modifiable et comporte forcément NF
              3) A la saisie de la 4eme cellule de Ref (Supp) une macro verifie si cette ref existe déjà, auquel cas les infos existantes dans la feuilel Declaration de NS sont reportées dans l'UF (ceci pour pouvoir les modifier, donc pas besoin du bouton Modification que j'ai supprimé)
              4) Tous les choix comme le sexe etc doivent se faire par des boutons d'option et non des cases à cocher car en leur attribuant le même GroupName dans Propriétés, en valider un décoche les autres, on ne peut donc bien choisir qu'une option
              5) Lorsque pour le déclarant on a coché père ou mère une macro reporte les infos sur la page suivante pour éviter d'avoir ) les entrer à nouveau
              6) Le choix de l'officier se fait par liste déroulante associée à la liste dans la colonne C de la feuille Officier (cette liste nommée officiers ce qui permet de lier le comboxbox par sa propriété RowSource est dynamique elle s'allonge automatiquement lorsque tu rajoutes des noms dans la liste -voir formule DECALER dans Formules Gestionnaire de noms -
              Le changement dans ce combobox du nom de l'officier lance la macro qui par des RECHERCHEV remplit automatiquement le prénom et la fonction
              7) Au clic sur le bouton Enregistrement les données sont reportées dans Déclarations de NS à la 1ere ligne vide si c'est une nouvelle ref ou à la ligne de la réf si elle existait déjà - idem pour la feuille Population où un X est mis dans la colonne Naissance

              Ce qui ne fonctionne encore pas :
              1) Je ne sais pas ce qu'il y a lieu de reporter dans les colonnes BG(document) et BL (description)
              2) Tu as mis dans l'UF un emplacement d'image et un bouton Parcourir, j'en conclues que tu veux sélectionner une image et l'afficher mais elle ne sera pas retranscrite dans la feuille Naissance ou alors le nom du fichier, je ne comprends pas trop pour l'instant mais tu vas m'expliquer ?
              Pour pouvoir sélectionner une image à afficher dans l'UF il faut connaitre le chemin complet du dossier où trouver les images (C\Mes Documents\ ..) puis on peut faire afficher par macro dans une liste déroulante les noms de toutes les images du dossier, le choix d'un nom faisant afficher l'image correspondante

              Voilà je crois que je n'ai rien oublié, j'ai mis des lignes d'explications dans les macros; je te laisse tester tout ça et on verra ce qu'il y a lieu de modifier ou d'améliorer (Notamment pour les types j'ai pris l'option de retranscrire dans la feuille Naissance des abréviations : Lég, Nat, Adop ... mais c'est bien sûr modifiable dans la macro)

              Une fois que ce sera OK pour les autres UF il suffira de faire pareil en adaptant

              Cdlmnt
              Via

              Cdlmnt
              Via
              1. Bonjour Via55

                Je te remercie pour tous ton travail et le temps que tu as passer

                Vu que je comprend quasi rien au VBA je vais essayer de t'expliquer les petit souci que j'ai rencontré, c'est peut être pas grand chose, mais pour l'instant, je ne suis pas asse caler pour les résoudres.
                • il a une erreur lors du premier enregistrement, il effectue l'enregistrement sur la premier ligne et non sur la 2ème. Quand je regarde le code, il met en jaune


                premligne = .Columns (2) .Find (Me.REFA2, , , , x1Bycolumns, XPrevious).Row
                • La second est des que je pose une ref Suppl il met erreur et ferme le tout.


                Serait tu me dire quel est l'erreur de cette ligne stp

                Pour répondre a tes questions

                Alors dans la colonne BG "Document" c'est sont nom. Si c'est l'acte (document officielle), si c une transcription, une rectification, une reconnaissance, ce qui donne la partie de la référence du document. La colonne BL "Description" c la remarque si il a lieu

                Pour le l'image du document, on oublie avec la référence complète, il sera facile a retrouvé sur le disque ou est entreposé les documents

                Les références sont

                1er parti : Type : NS-MR-DC ... dans le cas présent chaque enregistrement commence par NS vu que c'est les déclarations naissances
                2ème parti : Année l'année de naissance souvent identique a celui du document a moins que la naissance a eu lui fin d’année et déclaré début d'année suivante lol
                3ème parti : référence personnelle (LFPG-ZBQ) ou encore (L6SX-W62) donc
                (4 caractères-3 Caractères)
                4ème parti : Le code Famille
                Ceci pour les références des dossiers

                Pour les référence des documents c'est le même principe
                1er parti : Type : donc si c l'acte officielle de naissance, NS, si c'est une reconnaissance RC, si c'est une transcription TR ....
                2ème parti: Année du document
                3ème parti la référence personnelle de la personne (ex LFPG-ZBQ)
                et la dernière le code famille de la personne
                tout ce qui change est la 1er parti du code, ce qui empêche les double document
              2. @LucasineBonsoir Lucasine

                Désolé, je n'avais pas vu le bug du à une variable mal orthographiée! Mes premiers essais marchaient bien puis j'ai rajouté cette ligne qui occasionnait le bug

                Rectification faite et j'ai donc intégré la remarque dans la colonne BL
                http://www.cjoint.com/c/FCptME62Q2P

                Par contre pour le nom du document à retourner en Bl il n'apparait nul part dans l'userform ? il faut que tu rajoutes un textbox

                Pour l'image du document je n'ai pas compris ce que tu veux faire ? on la supprime de l'userform ?

                Pour les références la macro affiche dans l'userform le NS qui est automatique pour le reste ce sera à l'utilisateur de rentrer les données
                faut il aussi mettre automatiquement le NS pour le n° du père et celui de la mère ?

                En attente des premiers essais que tu vas enfin pouvoir faire

                Cdlmnt
                Via
              3. Merci beaucoup Via55

                http://www.cjoint.com/c/FCpwJMSEORf

                Alors voici, tous fonctionne a part la 4éme parti de la référence. j'ai laisser une ligne d'enregistrement pour te monter.

                j'ai enlever l'image, du document et a la place j'ai mit les possibilité de documents dans la feuille document il a les codes et le type de documents qui s'y accorde.

                j'ai aussi enlever la parti NS des parents, et la parti du code aussi ;-) car en effet certain parents ne figure pas dans les dossiers naissances et ceci pourrai faire croire que le document est présent alors que non.

                Dans la feuilles "Officiers" qui est reprise par nom, serait-il pas plus facile si il ne donne que les noms de la commune ? vu que certain document date de plusieurs année les noms risque d'être répétitif dans la liste ? il faudrait que je la complété pour être certaine, c'est pour ça que j'ai mit "Commune" et "période"

                Je croit que c'est tout

                A la parti "Remarques" ne fonctionne pas non plus, je ne sais pas déposé mon curseur pour écrire ;-)

                Voila maintenant je croit que c'est tout lol

                Je te remercie encore pour tout ton aide
                Bonne soirée
              4. @LucasineRe

                http://www.cjoint.com/c/FCqbvRVEN1P

                Rectification faite pour dernière partie référence
                J'ai supprimé les colonnes pour NS dans les père et mère dans Déclarations NS

                J'ai remplacé cases à cocher pour le document par des boutons d'option (comme je te l'avais expliqué précédemment c'est nécessaire pour éviter de cocher 2 à la fois) et mis les lignes nécessaires dans les macros (si les abréviations ne te conviennent pas il faudra les changer dans les macros)

                Pour Remarques normal que tu ne pouvais pas écrire dedans c'était une Listbox et pas un Textbox; j'ai rectifié

                A voir pour Officiers, tu me diras

                Continue les essais

                A+
                Via
              5. Merci Via55

                Tout a l'air de bien fonctionné pour le formulaire NS. Je vais faire le Formulaire suivant et voir pour coder, je t'envoie le fichier des que c'est fait. si tu serais regarder après pour les éventuelle erreur ou correction ;-) Si j'ai la moindre petite question, je te fait signe.

                Encore un grand merci
            2. Bien voila, j'ai effectue le formulaire "déclaration MR" et j'ai repris le codage que tu as fait pour le Formulaire NS est bien j'ai réussi à effectue un premier enregistrement MR sans souci. Tes ligne de note dans le code ma fortement aidé. C'est pas très chinois a comprendre, même si le faire seul ça me serai impossible ;-) Je vais continuer, les Formulaires et les codages.

              Mille Merci Via55
              Je te tient au courant de l'évolution
              1. Voici le document :
                http://www.cjoint.com/c/FCrkZS5qnif

                Tout fonctionne mais un petit détail que je ne sais pas comment réglé est que la référence EPSE doit aussi figuré dans la feuille "Population" comme la référence EPX

                je pensé juste remettre le code une 2ème fois avec les REF1_EPSE - REF2_EPSE - REF3_EPSE - NOM ... Mais cela ne fonctionne pas
              2. @LucasineBonjour Lucasine

                Bravo, bon travail, tu as bien compris les macros

                Oui il faut répéter le code, peut être as tu oublié une instruction
                'POPULATION
                With Sheets("Population")
                derligne = .Columns(5).Find("*", , , , xlByColumns, xlPrevious).Row
                'Boucle sur les lignes et 3ème réf perso
                For n = 2 To derligne
                If .Range("B" & n) = Me.REF1_EPX And .Range("C" & n) = Me.REF2_EPX And .Range("D" & n) = Me.REF3_EPX Then LigneE = n
                Next n
                If LigneE > 0 Then Ligne = Ligne Else Ligne = derligne + 1
                .Range("B" & Ligne) = Me.REF1_EPX
                .Range("C" & Ligne) = Me.REF2_EPX
                .Range("D" & Ligne) = Me.REF3_EPX
                .Range("E" & Ligne) = Me.NOM_EPX
                .Range("F" & Ligne) = Me.PRENOM1_EPX
                .Range("G" & Ligne) = Me.PRENOM2_EPX
                .Range("H" & Ligne) = Me.PRENOM3_EPX
                .Range("J" & Ligne) = "X"
                End With
                
                With Sheets("Population")
                derligne = .Columns(5).Find("*", , , , xlByColumns, xlPrevious).Row
                'Boucle sur les lignes et 3ème réf perso
                For n = 2 To derligne
                If .Range("B" & n) = Me.REF1_EPSE And .Range("C" & n) = Me.REF2_EPSE And .Range("D" & n) = Me.REF3_EPSE Then LigneE = n
                Next n
                If LigneE > 0 Then Ligne = Ligne Else Ligne = derligne + 1
                .Range("B" & Ligne) = Me.REF1_EPSE
                .Range("C" & Ligne) = Me.REF2_EPSE
                .Range("D" & Ligne) = Me.REF3_EPSE
                .Range("E" & Ligne) = Me.NOM_EPSE
                .Range("F" & Ligne) = Me.PRENOM1_EPSE
                .Range("G" & Ligne) = Me.PRENOM2_EPSE
                .Range("H" & Ligne) = Me.PRENOM3_EPSE
                .Range("J" & Ligne) = "X"
                End With
                MsgBox "Mariage enregistrée"
                Me.Hide
                
                End Sub


                Ensuite il faut :
                - qu'à l'ouverture de l'userform tout soit remis à zero (voir pour naissance la macro Private Sub UserForm_Activate()
                - si le mariage a déjà été enregistré et que tu veux modifier il faut faire réafficher dans l'userform les précédentes données comme pour naissance (voir macro Private Sub REFA4_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) qui se déclenche lorsqu'on rentre la dernière référence de l'acte

                Cdlmnt
                Via
              3. Bonjour Via

                Avec le double code ça fonctionne, il me met bien les deux personne dans la feuille "population" mais un autre souci ce pose maintenant ;-)

                Dans population il m'affiche une fois pour l'entrée NS et une 2ème fois pour MR au lieu de juste faire le "X" dans l'autre colonne
              4. @LucasineBonjour Lucasine

                Je ne comprends pas le problème si tu as entré une déclaration de naissance puis une déclaration de mariage pour la même personne les croix se mettent bien dans population sur le même ligne

                Repostes moi ton fichier avec un exemple de dysfonctionnement (tu peux si tu préfères pas confidentialité me l'envoyer en message privé - clic droit sur mon pseudo)

                Cdlmt
                Via
              5. Non, excuse moi

                J'avait reprit l'ancien fichier ;-) logique que ça ne fonctionné pas lol désolé