Incrémenter et reconnaitre un doublon

Résolu/Fermé
tipau35 Messages postés 291 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 2 octobre 2024 - 23 juil. 2018 à 17:28
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 - 24 juil. 2018 à 11:48
Bonjour,
Dans la colonne D j'ai une valeur NomPrénom (calcul par concatener).
Il y a des doublons NomPrénom (mais il n'y a pas d'homonyme)
Dans la colonne E, j'ai l'identifiant ID.

J'ai plusieurs soucis.

1/
je souhaite donner un identifiant unique à chaque couple NomPrénom.
si je n'avais pas de doublon, je n'aurai qu'à tirer sur la cellule pour avoir une valeur de type ID1, ID2, ID3...

mais
2/
j'ai besoin que la colonne E se réfère au doublon pour donner le même identifiant lorsque la valeur se répète. Or ma valeur en D est une formule avec des cellules différentes mêmes si la valeur trouvée est déjà apparue.

3/
Comment ajouter une incrémentation +1 pour ID1 devienne ID2 en prenant en compte ce que j'ai indiqué ci-dessus ?

j'avais trouvé cette formule pour ne pas afficher le doublon, mais je ne sais pas comment incrémenter ID...
=SI(NB.SI($B$1:B$;"="&B2)>1;"doublon";"ID")

et à la place de "doublon" j'aimerai que l'ID correspondant apparaisse...


un lien vers l'exemple qui illustre tout ça
https://mon-partage.fr/f/a4kzpHpJ/

merci d'avance :)
A voir également:

2 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 411
23 juil. 2018 à 17:51
Bonjour
voyez ici un système qui se passe de la colonne de concaténation

https://mon-partage.fr/f/uA9m2Oii/

crdlmnt
0
tipau35 Messages postés 291 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 2 octobre 2024 15
24 juil. 2018 à 11:23
Bonjour merci pour cette réponse.
Serait-il possible de décomposer la formule pour que je la comprenne ?
Dans le cas ou je souhaite m'en reservir ailleurs.

Sinon, est-il possible de donner comme nom "ID" dans D1 à la place de "0_ " qui sert de référent de l'incrémentation ? Et pour changer cette appellation faut-il simplement remplacer son nom dans la formule par un autre que l'on souhaite ?
Lorsque j'essaye, la formule donne parfois #valeur !

merci
0
tipau35 Messages postés 291 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 2 octobre 2024 15
Modifié le 24 juil. 2018 à 11:47
Concernant le changement de nom, c'est bon. Sous Mac il faut faire Shift + Command + enter à la place de Shift + Ctrl + enter pour valider la cellule.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 411
Modifié le 24 juil. 2018 à 12:29
Bonjour

la formule:

=SIERREUR(INDEX($D$1:D1;EQUIV(B2&C2;$B$1:B1&$C$1:C1;0));"ID_"&MAX((STXT($D$1:D1;TROUVE("_";$D$1:D1)+1;4)*1)+1))
se décompose en deux éléments

1°) la partie qui cherche au dessus de la ligne où elle se trouve si les colonnes B et C contiennent déjà les références B et C de la ligne

= SIERREUR(INDEX($D$1:D2;EQUIV(B3&C3;$B$1:B2&$C$1:C2;0))
EQUIV(B3&C3;$B$1:B2&$C$1:C2;0)

cette formule va chercher avec EQUIV si la concaténation de B et C sur la ligne, existe déjà dans la plage au dessus et si elle trouve un assemblage, ressort la valeur de D correspondante
2°) si elle ne trouve pas, c'est la seconde partie qui s'effectue, soit:
inscription des caractères ID_ lié avec le maximum trouvé dans les numérotations précédentes, pour la valeur numérique qui suit ID_
"ID_"&MAX((STXT($D$1:D1;TROUVE("_";$D$1:D1)+1;4)*1)+1))

pour ne pas tartiner des explications inutiles, essayez ceci sur les quelques lignes pour comprendre:
la formule seule:
=EQUIV(B3&C3;$B$1:B2&$C$1:C2;0) (matricielle)
la formule complète:
=INDEX($D$1:D2;EQUIV(B3&C3;$B$1:B2&$C$1:C2;0)) (matricielle
avec le code erreur
=SIERREUR(INDEX($D$1:D2;EQUIV(B3&C3;$B$1:B2&$C$1:C2;0));"") matricielle
ensuite sur ligne 2
=STXT(D2;TROUVE("_";D2)+1;4)*1)+1)) (normale)
et ça devrait être plus clair

en ce qui concerne le _01 en D1, vous ne pouvez pas l'enlever en l'état car il est utilisé pour définir le code en D2
par contre, vous pouvez:
  • supprimer la formule en D2 et entrer un code du même style au clavier
  • par exemple: ID_01 au clavier
  • les autres s'ajusteront en conséquences


espérant que tout ça est assez clair

principes:
INDEX(N° ligne; N°colonne) ressort la valeur de cellule dans les coordonnées indiquéees (dans la plage)
EQUIV(valeur;champ;0) ressort le range dans le champ où se trouve la valeur cherchée
SIERREUR(formule);"") évite un affichage d'erreur si les valeurs ne sont pas trouvées
MAX(champ) renvoie la valeur maximum d'un champ
STXT(texte;départ;nombre) renvoie la partie du texte qui commence au caractère "départ" avec le nombre de caractères souhaités
TROUVE(texte cherché;texte) donne le rang du caractère cherché dans le texte

et le *1 sert à numériser le résultat pour autoriserkl'incrémentation à +1
c'est à peu près tout ce que je peux dire
crdlmnt




0