Bonjour,
Je viens d'écrire une fonction relativement simple : à partir d'un nom de société, je cherche à créer un identifiant unique sur 6 caractères. Je normalise la chaine en entrée en remplaçant tous les caractères accentués, puis je crée l'identifiant :
J'ai deux problèmes :
Je dois passer à côté d'un truc évident, mais je ne vois pas quoi ! Toute aide sera donc la bienvenue !
Merci d'avance !
Je viens d'écrire une fonction relativement simple : à partir d'un nom de société, je cherche à créer un identifiant unique sur 6 caractères. Je normalise la chaine en entrée en remplaçant tous les caractères accentués, puis je crée l'identifiant :
- Si la chaine est plus courte que le code voulu, je la conserve telle quelle.
- Sinon je cherche les espaces éventuels et je garde une portion de chaque sous-chaine pour assembler le code.
VB:
Public Function CreateCode(InString) As String
NormString = LCase(ConvertCharInString(InString))
StringLength = Len(NormString)
MaxCodeSize = Worksheets("Data").Cells(1, 2)
' Fonction Excel : =SI(NBCAR(C2)<Data!$B$1;C2;SI(NON(ESTERR(TROUVE(" ";C2)));GAUCHE(C2;Data!$B$1/2) & GAUCHE(STXT(C2;TROUVE(" ";C2)+1;NBCAR(C2)-TROUVE(" ";C2));Data!$B$1/2);STXT(C2;1;Data!$B$1)))
If Len(NormString) <= MaxCodeSize Then ' Si la chaine d'entrée est plus courte que le code désiré, on garde la chaine complète
CreateCode = NormString
Else
HasSpace = InStr(1, NormString, " ") ' La chaine contient-elle un espace ?
If (HasSpace = 0) Then
CreateCode = Left(NormString, MaxCodeSize) ' NON : on tronque juste la chaine d'entrée à la longueur maximale choisie
Else
Dim SubStrings() As String
SubStrings = Split(NormString, " ") ' OUI : on sépare les membres gauche et droite de la chaine
If (UBound(SubStrings) >= 2) Then
SubStrings(2) = SubStrings(2) & SubStrings(3)
End If
CreateCode = Left(SubStrings(1), MaxCodeSize / 2) & Left(SubStrings(2), MaxCodeSize / 2)
End If
End If
CreateCode = LCase(CreateCode)
End Function
J'ai deux problèmes :
- Si je saisis dans une cellule =CreateCode(A1), la fonction est bien appelée puisque j'atteins le point d'arrêt que j'y ai mis. Mais une fois le code déroulé, bien que je n'ai aucune erreur, la cellule affiche #VALEUR! alors que la "variable" CreateCode est bien calculée.
- Si la chaine d'entrée fait moins de 6 caractères (la valeur par défaut de MaxCodeSize), tout se passe bien et la chaine est bien affichée dans la cellule...
Je dois passer à côté d'un truc évident, mais je ne vois pas quoi ! Toute aide sera donc la bienvenue !
Merci d'avance !