Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Attribution d'un ID unique sur deux feuilles de calcul

FAzor

XLDnaute Nouveau
Bonjour à tous !

Voici mon problème : j'ai une base de données (20 000 lignes) qui doit être alimenté régulièrement avec nom prénom etc. Elle est composée de deux feuilles.
Ce que je voudrais faire c'est attribuer un ID unique pour chaque individu, sachant qu'un individu peut se trouver dans les deux feuilles. Un ID doit être attribué à chaque nouvelle entrée et doit être le même pour les deux feuilles, dans les cas ou l'individu est concerné par les deux cas de figures.

Cependant je n'arrive pas à :
- Attribuer un ID en prenant en compte le nom et le prénom
- Attribuer le même ID a un individu dans les deux feuilles

Je vous remercie d'avance grandement pour m'aider à résoudre ce problème.
 

Phil69970

XLDnaute Barbatruc
Bonjour @FAzor

Je vois quelques problème à ton énoncé :
1)Tu as des espaces derrière certains noms et prénoms ==> pour excel "Jack " et "Jack" c'est pas pareil !
Donc il faut commencer par supprimer ces espaces...

2)Comment comptes tu gérer les noms composés.
Exemple : Jean Jacques, Jean-Jacques, Jean - Jacques etc..... car si mal saisie = nom différend
==> n'oublie pas le point 1)pour excel "Jack " et "Jack" c'est pas pareil

3)Comment comptes tu gérer 2 personnes différentes qui s'appelle Jean Martin en clair sur 20 000 lignes tu as des (mal)chances non négligeable d'avoir un ou plusieurs homonyme nom prénom

Je pense que le nom et prénom est insuffisant pour avoir que des personnes uniques.
Il manque au moins une donnée supplémentaire comme la date de naissance et/ou l'adresse complète.


*Et j'en oubli surement d'autre....

Après avoir réglé tous ces cas Il suffit de choisir une série par exemple ID00001, ID00002.... ou plus simplement 1, 2 ,3 .... 20 000 suivant tes gouts.

Et pour avoir une bonne visibilité et un maximum de réponse tu devrais mettre ta demande dans le forum excel
*J'ai demandé au modérateur du forum si il était possible de déplacer ta demande.



@Phil69970
 
Dernière édition:

FAzor

XLDnaute Nouveau
Salut @Phil69970,

Merci pour l'info du forum, je vais poster ma demande la-bas.

Pour ce qui est des espaces c'est pas le cas dans ma BDD. Elle bien harmonisée. Le fichier excel sur cette conversation un exemple que j'ai fait vite fait, ne pouvant pas poster l’originale (RGPD oblige). Mais je l'ai corrigée.

Pour ce qui est des nom composée, tout est harmonisé avec un "-".

Pour les homonymes, j'ai la ville de dispo.

FAzor
 

Phil69970

XLDnaute Barbatruc
Bonjour @FAzor

Même avec la ville j'ai bien peur que cela soit insuffisant des Jean Martin dans une ville il doit y en avoir beaucoup y compris dans les petites villes.
Pour les homonymes, j'ai la ville de dispo.
De plus il faut mettre le/les champs supplémentaire ville, adresse et date de naissance par exemple.
C'est à dire que l'on peut considérer une personne unique si son nom, prénom, date de naissance, ville, adresse est unique ou tout autre renseignement identifiant d'une manière certaine la personne.

*Attention constituer un fichier sans déclaration est ce légale dans ton pays ?
*Et quelle info as tu le droit de mettre dedans ?
*Peux tu le faire sans l'accord de la personne ?.......
*Un numéro de sécurité sociale ou similaire ne ferait il pas l'affaire et ton identifiant serait celui ci ?
La roue existe peut être déjà et il n'est peut être pas la peine de vouloir la refaire

Code:
Merci pour l'info du forum, je vais poster ma demande la-bas
La discussion a été transférer au bon endroit par l'admin du site

@Phil69970
 
Dernière édition:

FAzor

XLDnaute Nouveau
Bonjour @Phil69970,

Toutes les informations de la BDD sont légales, ne t’inquiète pas. Les noms et prénoms présent dans le fichier exemple sont inventés.

La ville est un élément suffisamment précis pour être unique puisque le même individu peut être présent des centaines de fois dans la base. Dans tous les cas je ne peux pas avoir de données plus précises que le nom le prénom et la ville, le reste des données sont issus d'une forme de QCM.

Ce qu'il me faudrait un bout de code VBA ou autre qui pourrait fonctionner sur l'exemple plus haut. Ca me serait d'une aide incroyable...
 

Pièces jointes

  • Exemple pour attribution ID.xlsx
    8.8 KB · Affichages: 14

laurent950

XLDnaute Barbatruc
Bonjour,

Une solution via VBA :

VB:
Sub test()
Dim F1, F2 As Worksheet
Dim TF1, TF2 As Variant
    Set F1 = Worksheets("Feuil1")
        TF1 = F1.Range(F1.Cells(2, 1), F1.Cells(F1.Cells(65536, 4).End(xlUp).Row, 4))
    Set F2 = Worksheets("Feuil2")
        TF2 = F2.Range(F2.Cells(2, 1), F2.Cells(F2.Cells(65536, 4).End(xlUp).Row, 4))
'''''''''''
Dim Tid() As Variant
Dim cpt As Double
    ReDim Preserve Tid(LBound(TF1, 1) To UBound(TF1, 1) + UBound(TF2, 1), LBound(TF1, 2) To UBound(TF1, 2))
    For i = LBound(Tid, 1) To UBound(Tid, 1)
        For j = LBound(Tid, 2) To UBound(Tid, 2)
            If i <= UBound(TF1, 1) Then
                Tid(i, j) = TF1(i, j)
                cpt = i
            Else
                Tid(i, j) = TF2(i - cpt, j)
            End If
        Next j
    Next i
    cpt = 1
'''''''''''
    For i = LBound(Tid, 1) To UBound(Tid, 1)
        For j = i + 1 To UBound(Tid, 1)
            If Tid(i, 2) & Tid(i, 3) & Tid(i, 4) = Tid(j, 2) & Tid(j, 3) & Tid(j, 4) Then
                Tid(j, 1) = "D"
            End If
        Next j
    Next i
'''''''''''
    For i = LBound(Tid, 1) To UBound(Tid, 1)
        If Tid(i, 1) = "" Then
            Tid(i, 1) = "ID" & cpt
            cpt = cpt + 1
        End If
    Next i
    cpt = Empty
'''''''''''
    For i = LBound(Tid, 1) To UBound(Tid, 1)
        If Tid(i, 1) <> "D" Then
            If i <= UBound(TF1, 1) Then
                TF1(i, 1) = Tid(i, 1)
                cpt = i
            Else
                TF2(i - cpt, 1) = Tid(i, 1)
            End If
        Else
            If i <= UBound(TF1, 1) Then
                For j = LBound(Tid, 1) To UBound(Tid, 1)
                    If Tid(j, 1) <> "D" Then
                        If Tid(j, 2) & Tid(j, 3) & Tid(j, 4) = TF1(i, 2) & TF1(i, 3) & TF1(i, 4) Then
                            TF1(i, 1) = Tid(j, 1)
                        End If
                    End If
                Next j
                cpt = i
            Else
                For j = LBound(Tid, 1) To UBound(Tid, 1)
                    If Tid(j, 1) <> "D" Then
                        If Tid(j, 2) & Tid(j, 3) & Tid(j, 4) = TF2(i - cpt, 2) & TF2(i - cpt, 3) & TF2(i - cpt, 4) Then
                            TF2(i - cpt, 1) = Tid(j, 1)
                        End If
                    End If
                Next j
            End If
        End If
    Next i
    cpt = Empty
'''''''''''
F1.Range("A2").Resize(UBound(TF1, 1), 1).Value = Application.Index(TF1, , 1)
F2.Range("A2").Resize(UBound(TF2, 1), 1).Value = Application.Index(TF2, , 1)
'''''''''''
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…