Microsoft 365 [Résolu] VBA | Interdire la saisie de certains caractères dans un TextBox

ralph45

XLDnaute Impliqué
Bonjour ami.e.s exceldownoadien.ne.s,

J'ai un petit service à demander : pour le travail, j'ai créé un fichier avec formulaire qui permet de générer des dossiers et des sous-dossiers dans un répertoire et tout fonctionne.
Là où le bât blesse, c'est que certaines personnes saisissent des caractères qui foutent la m... pagaille dans mon code VBA.

1° En effet, comme vous pouvez le voir dans le fichier joint, le contenu de la TextBox1 (Titre) est une des composantes du nom de dossier/sous-dossier.
2° Aussi, j'ai listé les caractères "dangereux" dans une matrice (les espaces en trop sont un malus non-critique,mais bon...)
3° Lors de la saisie d'un caractère critique, une pop-up ou Userform m'indiquera une interdiction de saisir ledit caractère.
4° Je pense avoir mis toutes les spécificités dans le fichier et vous remercie d'avance de votre aide !

Bonne journée et week-end ensoleillés !
 

Pièces jointes

  • CARACTERES_INTERDITS.xlsm
    19 KB · Affichages: 2

cp4

XLDnaute Barbatruc
Bonjour,

Un code sans avertissement, il n'acceptera pas d'autres caractères que ceux qui mentionnés dans le code.
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   If InStr("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Bonne journée.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Juste pour que le moteur de recherche du forum se grippe pas ou ne s'ennuie pas...
Nous étions en 2014
et pas en 1968 où il était interdit d'interdire.
;)
 

Gégé-45550

XLDnaute Accro
Bonjour ami.e.s exceldownoadien.ne.s,

J'ai un petit service à demander : pour le travail, j'ai créé un fichier avec formulaire qui permet de générer des dossiers et des sous-dossiers dans un répertoire et tout fonctionne.
Là où le bât blesse, c'est que certaines personnes saisissent des caractères qui foutent la m... pagaille dans mon code VBA.

1° En effet, comme vous pouvez le voir dans le fichier joint, le contenu de la TextBox1 (Titre) est une des composantes du nom de dossier/sous-dossier.
2° Aussi, j'ai listé les caractères "dangereux" dans une matrice (les espaces en trop sont un malus non-critique,mais bon...)
3° Lors de la saisie d'un caractère critique, une pop-up ou Userform m'indiquera une interdiction de saisir ledit caractère.
4° Je pense avoir mis toutes les spécificités dans le fichier et vous remercie d'avance de votre aide !

Bonne journée et week-end ensoleillés !
Bonjour,
Suggestion : introduire une gestion des caractères saisis dans l'évènement KeyDown du TextBox (Textbox_KeyDown)
exemple :
VB:
Sub TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'on contrôle les touches tapées
        Select Case KeyCode
        Case 96 To 105  'on gère les lettres autorisées
            Saisie = Saisie + Chr(KeyCode)
        Case Else:
            KeyCode = 0
        End Select
End Sub
Cordialement
 

ralph45

XLDnaute Impliqué
Finalement, je reprends la philosophie @cp4 en me concentrant sur les caractères autorisés ! :p
J'y ai ajouté un petit complément qui personnellement me convient, voir plus bas.

Seulement, je n'arrive toujours pas à géré les espaces inutiles... avec un TRIM ?

VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   If InStr("0123456789AÀÁÂÄBCDEÉÊË€FGHIÌÍÎÏJKLMNOÒÓÔÖPQRSTUÛÜVWXYZaàâäbcdeéèêëfghiîïjklmnoöôpqrstuûüùvwxyz -_'", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

ralph45
 

Statistiques des forums

Discussions
314 705
Messages
2 112 067
Membres
111 410
dernier inscrit
yomeiome