Fonction pour convertir une chaine en un numerique unique.

  • Initiateur de la discussion Initiateur de la discussion yml
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

yml

XLDnaute Nouveau
Bonjour,

Auriez-vous une méthode pour convertir du texte en un nombre unique ?

Mon problème est le suivant : J’ai un listing de références produits qui ont des noms sous forme de texte (exemple : Nike Air, Robe Verte, etc…). J’aimerais pouvoir calculer/créer une référence numérique pour chaque produit (Exemple 01, 02, 324654) .

Il y a-t-il une fonction qui convertir par exemple « Robe verte » en un nombre par exemple « 41684165 » ?

Merci d’avance pour votre aide.

Yann
 
Re : Fonction pour convertir une chaine en un numerique unique.

Bonjour.
Je propose cette fonction perso :
VB:
Function CodeDsg(ByVal Dsg As String) As String
Dim X As Double, P As Long
For P = 1 To Len(Dsg): X = X * 1.35198775424545 + Asc(Mid$(Dsg, P, 1)) / 256: X = X - Int(X): Next P
X = (X + 1.35198775424545) ^ 7: X = X - Int(X)
CodeDsg = Format(Int(100000000 * X), "00000000")
End Function
 
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.
 

Pièces jointes

Dernière édition:
Re : Fonction pour convertir une chaine en un numerique unique.

Bonjour.

Pour info, ma fonction :
Code:
=CodeDsg($A1)
garde une trace du 1èr caractère même en changeant celui de la fameuse phrase "Portez ce blond whisky au vieux juge qui fume" et il est très improbable que deux désignations différentes aboutisse au même code String à 8 chiffres
 
Re : Fonction pour convertir une chaine en un numerique unique.

Merci beaucoup pour votre aide,

J'ai moins de 10 000 refs, entre 3 et 20 caractères de long, des espace, tiret, des chiffres....

Je vais tenter la fonction de Dranrev, en espérant que cela fonctionne dans mon environnement (une tache programmée ouvre mon fichier Excel, importe ma base de donnée et enregistre le tout en .csv) Bref avec des macros en plus c'est pas gagné!

Je vous tiens au courant.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour