Trouver des caractères spéciaux dans une cellule
Bonjour,
je récupère une valeur saisie dans une inputbox par un utilisateur en cellule "A2".
J'aimerai vérifier qu'il n'y a pas de caractères spéciaux dans la valeur et afficher un msgbox d'erreur si il y en a.
Je pensais utiliser le code ASCII en affichant un msgbox si il y a un caractère autre que alphanumérique (donc différent des codes 48 à 57, 65 à 90, 97 à 122) mais je bloque complètement...
Pouvez vous m'aider ???
merci
Je m'auto réponds car j'ai contourné le probleme en utilisant une textbox au lieu d'une inputbox et en rajoutant le bout de code suivant dans la textbox:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'autorise la saisi dans la textbox uniquement des valeur de code ASCII listées
Select Case KeyAscii
Case 97 To 122 ' Caracteres minuscule
Case 65 To 90 'Caracteres majuscule
Case 95 'caractères tiret bas
Case 48 To 57 'nombre de 0 à 9
Case Else
KeyAscii = 0
End Select
End SubPar contre pouvez vous me dire comment vérifier si il y a des caractères spéciaux dans une plage de cellule allant de A3 à A96 par exemple ??
Pour l'instant j'utilise "if selection.find(caractère recherché) then ..." mais c'est fastidieux....
Après moultes galères je détère le topic pour vous faire part de ma solution.
Je n'ai vu aucuns équivalents sur les forums, donc je me dis que ça peut servir à quelqu'un...
Sub Control_Format()
'controle le format des cellules dans la colonne B
Dim Cel As Range, j As Integer
Dim CodeAscii As Integer, LCel As Integer
Dim NonAscii As Boolean
With ActiveSheet
For Each Cel In Range("B2", Range("B65536").End(xlUp))
LCel = Len(Cel.Value)
For j = 1 To LCel
CodeAscii = AscW(Mid(Cel.Value, j))
Select Case CodeAscii
Case 97 To 122 ' Caracteres minuscule
Case 65 To 90 'Caracteres majuscule
Case 95 'caractères tiret bas
Case 32 ' espace
Case 45 To 46 'caractères - et .
Case 48 To 57 'nombre de 0 à 9
Case Else
NonAscii = True
End Select
If NonAscii = True Then MsgBox "Vous avez des caractères illégaux dans vos noms, veuillez corriger et recommencer" & vbNewLine & Cel.Value & " contient " & Chr(CodeAscii): Exit Sub
Next j
Next Cel
End With
End SubEDIT: LCel étant un nombre de caractères, c'est un Integer et pas un String...
Bonjour,
Ce code fonctionne à merveille, mais les caractères accentués sont refusés comme d'autre caractères, l'apostrophe par exemple
J'aimerai faire l'inverse, c'est à dire ne pas autoriser, mais interdire des caractères
Par exemple tous les caractères interdits pour un nom de fichier comme \ / : * ? " < > |
Est-il possible de modifier ce code ?
Merci pour votre aide
Philippe
Bonjour,
j'ai pas bien compris la différence entre "ne pas autoriser" et "interdire" dans ce code là les \ / : * ? " < > ne sont pas autorisés donc interdits et n'apparaissent pas, si à l'inverse il faut les autoriser il suffit de rajouter leur code dans la liste des case autorisés ( Case 124 pour | par exemple).
Pour info j'ai modifié ce code pour lui faire remplacer certains caractères accentués par l'équivalent sans accent:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'autorise la saisi dans la textbox uniquement des valeur de code ASCII listées.
Select Case KeyAscii
Case 97 To 122 ' Caracteres minuscule
Case 65 To 90 'Caracteres majuscule
Case 95 'caractères tiret bas
Case 48 To 57 'nombre de 0 à 9
'remplace dans la textbox la saisie de caractères accentués par un équivalent sans accent.
Case Is = 124 ' "|" 'si on a...
KeyAscii = 95 ' ...on remplace par "_"
Case Is = 232 ' è
KeyAscii = 101 'e
Case Is = 233 ' é
KeyAscii = 101
Case Is = 234 ' ê
KeyAscii = 101
Case Is = 235 ' ë
KeyAscii = 101
Case Is = 224 ' à
KeyAscii = 97 ' a
Case Is = 226 ' â
KeyAscii = 97
Case Is = 228 ' ä
KeyAscii = 97
Case Is = 181 ' µ
KeyAscii = 117 ' u
Case Else
KeyAscii = 0 ' aucune saisie possible
End Select
End Sub