Vérification absence caractère spéciaux VBA

Jacques25

XLDnaute Occasionnel
Bonjour à tous,

Depuis ce matin je cherche un code afin de vérifier lors d'une saisie la présence de caractère spéciaux rejeté par windows dans le nom d'un fichier.
Pour être plus explicite, le nom de mon fichier est composé de l'assemblage de 4 cellules. Tout se passe bien sauf quand dans une cellule un utilisateur tape / par exemple.
Il me semble que les caractères à prscrire sont ==> / \ : * ? " < > | je ne sais pas s'il y en a d'autres???

Le but du code serait lors de la lecture de la cellule si un de ces caractères est detecté il propose une autre orthographe ce qui donnerai (j'ai identifié les bouts de code que je ne trouve pas par *?????*) :

Sub essai()

Dim Message, Question, Proposition

Message = "Votre saisie contient des caractères spéciaux"
Question = "Voulez vous continuer avec la saisie ci dessous?"
Proposition = *?????* 'Comment proposer la saisie en replaçant tous les carctères spéciaux par -


If Range("BM1").Value *?????* Then 'comment demander si la cellule contient les caractères cités
Select Case MsgBox(Message & Chr(10) & Question & Chr(10) & Proposition, vbYesNo + vbexcclamation, "Erreur de saisie")
Case vbYes
Range("BM1").Value = Proposition goto 'la suite du code
Case vbNo
Exit Sub
End Select
End If

End Sub

Merci d'avance pour votre aide.
Bonne fin de journée.

Jacques
 

gilbert_RGI

XLDnaute Barbatruc
Re : Vérification absence caractère spéciaux VBA

bonjour,

voilà une fonction qui élimine les caractères non voulus

VB:
Function Elimine$(txt$)
    txt = Left(Trim(txt), 28)
    txt = Replace(Replace(txt, "/", ""), "\", "")
    txt = Replace(Replace(txt, "*", ""), "!", "")
    txt = Replace(Replace(txt, ".", ""), "?", "")
    txt = Replace(Replace(txt, ";", ""), ":", "")
    txt = Replace(Replace(txt, "#", ""), ",", "")
    Elimine = Replace(Replace(txt, "[", ""), "]", "")
End Function
 

Iznogood1

XLDnaute Impliqué
Re : Vérification absence caractère spéciaux VBA

Bonjour,

ou alors en utilisant les expressions régulières.
Attention, il faut référencer Microsoft VBScript Regular Expressions 5.5 (Outils / Références / ... dans l'éditeur VBA)

Code:
Function CleanName(s As String) as String
  Dim rg As New RegExp
  With rg
    .Pattern = "/|\\|:|\*|\?|""|>|<|\|"
    CleanName = .Replace(s, "_")
  End With
End Function
 

Si...

XLDnaute Barbatruc
Re : Vérification absence caractère spéciaux VBA

salut

un autre exemple : à la saisie d'un nom, effacement de la fin quand un carctère interdit y figure.
Dans la page de code de la feuille concernée :
VB:
Private Sub Worksheet_Change(ByVal R As Range)
  Dim n As Byte, C
  C = Array("<", ">", "?", "[", "]", ":", "*", "\", "/", "|", ".", Chr(34))
  For n = 0 To UBound(C)
    If InStr(R, C(n)) > 0 Then
       MsgBox C(n) & " est un caractère interdit", vbCritical, "Attention..."
       Application.EnableEvents = 0
       R = Left(R, Len(R) - 1)
       Application.EnableEvents = 10
       Exit Sub
    End If
  Next
End Sub

Nota : la longueur du texte n'est pas traitée
 

Jacques25

XLDnaute Occasionnel
Re : Vérification absence caractère spéciaux VBA

Bonsoir à tous,

Merci pour vos différentes solutions, je regarde ça dès demain matin avec mon code. Je pense que j'aurais besoin de vous pour l'intégration lais je vais me faire la main dessus avant d'appeler au secours.

Bonne soirée et encore merci.

Jacques
 

Jacques25

XLDnaute Occasionnel
Re : Vérification absence caractère spéciaux VBA

Bonjour à tous,

Je reviens sur mon problème d'hier, j'ai donc opté pour le code que je comprend le mieux et encore merci pour toutes vos propositions. J'ai encore un petit soucis pour lequel je demande encore votre aide. Je souhaiterai que les caractères spéciaux ne soient invalide que sur la cellule BM1. J'ai donc rajouté une condition mais je me fais sortir quelque soit ce que je mette entre parenthèse au niveau du nom de la macro (je ne suis pas sûr du ByVal target As Range)
Voici mon code :

Private Sub Worksheet_Change(ByVal R As Range, ByVal target As Range)
'If target.Address = "$BM$1" Then
Dim n As Byte, C
C = Array("<", ">", "?", "[", "]", ":", "*", "\", "/", "|", ".", Chr(34))
For n = 0 To UBound(C)
If InStr(R, C(n)) > 0 Then
MsgBox C(n) & " est un caractère interdit", vbCritical, "Attention..."
Exit Sub
End If
Next
'End If
End Sub

Merci encore pour votre aide
Bonne journée au forum.

Jacques
 

Jacques25

XLDnaute Occasionnel
Re : Vérification absence caractère spéciaux VBA

Bonjour Gilbert,

Oui la fonction n'a pas l'air compliqué ceci étant il faut que je puisse prévenir la personne que la saisie n'est pas bonne et quoiqu'il en soit la valeur modifiée doit prendre la place de la valeur initiale.
D'autre part, comment dans ton code affectes tu ta fonction à la case en question?

Merci

Jacques
 

Jacques25

XLDnaute Occasionnel
Re : Vérification absence caractère spéciaux VBA

Oui j'ai bien vu ton fichier que j'ai testé et ça ne marche que (de mon côté) que lorsque je saisie une valeur en BM2 et la correction se fait en BM1. Du coup je ne comprend pas comment tu affectes la fonction à la cellule.
Par habitude je préfère prévenir les personnes d'un changement de saisie afin qu'ils ne soient pas surpris du résultat, si pas possible je peux tout a fait m'en affranchir.
 

gilbert_RGI

XLDnaute Barbatruc
Re : Vérification absence caractère spéciaux VBA

Là c'est top, j'imagine que le passage par une textbox est obligatoire dans ce cas là.

En tout cas merci pour ta patience.
Bonne journée.
le passage par une textbox dans ce cas est obligatoire car elle possède la procédure KeyPress que n'a pas une cellule

la textbox est liée aussi à la cellule BM1 par la propriété "linkedcell" donc cette cellule prend la valeur de la textbox s'il y a changement
 

Discussions similaires

Statistiques des forums

Discussions
312 088
Messages
2 085 203
Membres
102 818
dernier inscrit
NeoMaint