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 :
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
c'est la suite que tout se complique.
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:
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
Mon problème je n'arrive pas à naviguer dans la chaîne de caractère en fonction de la position.

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