Re : Fonction pour convertir une chaine en un numerique unique.
Bonjour
Une autre possibilité en pièce jointe, combinant certaines propositions ci-dessus :
SOMME((CODE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))-55)*10^(2*(NBCAR(A2)-LIGNE(INDIRECT("1:"&NBCAR(A2))))))
en matriciel
LIGNE(INDIRECT("1:"&NBCAR(A2))) permet de tester chacun des caractères de l'expression en A2
CODE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1)) renvoie le nombre correspondant à chaque caractère de l'expression en A2
(CODE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))-55) le -55 final ramène ce nombre, quelque soit la lettre de l'alphabet considérée, à une valeur comprise entre 10 et 67 (ainsi, tous ces nombres sont composés de 2 chiffres).
La partie 10^(2*(NBCAR(A2)-LIGNE(INDIRECT("1:"&NBCAR(A2))))) permet de multiplier par 0 le nombre correspondant au caractère le plus à droite, par 100, le nombre correspondant au second caractère le plus à droite, par 10000 le nombre correspondant au troisième caractère le plus à droite, et ainsi de suite.
On pourrait faire avec 10^(2*LIGNE(INDIRECT("1:"&NBCAR(A2)))), mais on obtiendrait la référence dans le sens inverse.
Avec cette méthode A donne 10, Al donne 1053, Alb donne 105343 et ainsi de suite.
Malheureusement, lorsque l'expression comporte plus de 8 caractères, cela pose problème car le nombre (plus de 16 chiffres donc) affiché par la formule perd des informations.
Donc, j'ai modifié la formule ci-dessus en mettant une première partie ne prenant en compte que les 8 premiers caractères de l'expression, et une seconde prenant les suivants. Elle est de la forme SOMME (.....)&SIERREUR(SOMME(.....);""), donc la référence obtenue est au format texte, et ne fonctionne que si l'expression en colonne A comporte moins de 17 caractères.
On peut bien sûr faire avec SOMMEPROD (cf. la pièce jointe ym3) à la place de SOMME en matriciel (cf. la pièce jointe ym2)
@ plus
P.S : Si il y a des caractères du style tiret, virgule..., il faudra revoir cette formule.