Bonjour à tous,
je suis débutant en VBA et je bloque sur une condition dans mon Code.
J'écrit une fonction qui permet de transformer une chaîne de caractère en majuscule et si dans cette chaîne de caractère, des caractères spéciaux sont présent, ils sont automatiquement remplacés par "_" et jusque la tout va bien.
le code écrit jusque la :
c'est la suite que tout se complique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Public Function GetValueId(Chaine As String) As String Dim ChaineTmp As String Dim Cpt As Integer 'Dim Position As Integer ChaineTmp = UCase(Stg) For Cpt = 0 To 255 If (Cpt < 43) Or (Cpt = 44) Or (Cpt = 47) Or ((Cpt > 57) And (Cpt < 60)) Or ((Cpt > 62) And (Cpt < 65)) Or (Cpt > 90) Then ChaineTmp = Replace(ChaineTmp, Chr(Cpt), "_") End If Next Cpt GetValueId = ChaineTmp End Function
J'ai une exception concernant 2 caractères spéciaux: le "+" et le "-".
je souhaiterai que ces 2 caractères ne soit pas remplacé par "_" si ils sont utilisé devant un nombre. Par contre le remplacement doit être effectué si il s'agit d'un trait d'union entre 2 mots c'est à dire quand il n'y a pas de valeurs numériques derrière.
J'ai commencé par ceci pour le "-" mais s'il existe des occurrences dans la chaine, il ne prend en compte que la 1ère occurrence:
Mon problème je n'arrive pas à naviguer dans la chaîne de caractère en fonction de la position.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 For Cpt = 0 To 255 'on parcours la chaîne ASCII If (Cpt = 45) Then 'on reconnait le caractère '-' Position = InStr(1, ChaineTmp, "-", vbTextCompare) 'relève l'indice de position du "-" dans la chaine 'Je n'arrive pas à prendre en compte les occurences si elles existent. 'A DEFINIR ChaineTmp = Replace(ChaineTmp, Chr(Cpt), "_") 'doit remplacer "-" par "_" s'il ne concerne pas une valeur numérique End If Next Cpt
Quelques exemples :
+/- 0.27 % full scale => +_-_0.27___FULL_SCALE
clip-in => CLIP_IN
2-channel => 2_CHANNEL
Merci pour votre aide, je galère sur le parcours de chaine
Partager