Select Case + Not

GeoTrouvePas

XLDnaute Impliqué
Bonsoir le forum,

J'ai un petit problème tout bête pour lequel je ne trouve pas de solution. Je ne veux autoriser que la saisie de certains caractères dans un textbox.
Pour cela j'ai collecté les codes Ascii qui seront validés et j'ai fait cette petite routine :

Code:
Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 97 To 122, 65 To 90, 32, 45, 39, 46
    Else Case
        KeyAscii = 0
        With TextBox1
            .BackColor = &HFF&
            .SetFocus
            .SelStart = 0
            .SelLength = Len(Textbox1)
        End With
    End Select
End Sub

Vous aurez remaraqué le Case suivi immédiatement d'un Case Else. C'est pas beau hein ? :p C'est parce que je ne sais pas pas comment fiare pour faire un équivalent de "Case Not".

J'avais trouvé une solution hier ici même mais impossible de remettre la main dessus.

auriez vous une idée ?

Je vous remercie grandement.

Bonne fin de journée à tout le monde.
 

GeoTrouvePas

XLDnaute Impliqué
Re : Select Case + Not

Bonjour Papou-net,

Oui en effet, j'ai fait une inversion. Mais ce n'est pas le problème en fait ^^

Je voudrais transformer ces deux lignes :

Code:
...
Case 97 To 122, 65 To 90, 32, 45, 39, 46
Case Else
...

Par l'équivalent d'un :

Code:
...
Case not(97 To 122, 65 To 90, 32, 45, 39, 46)
...
 

ROGER2327

XLDnaute Barbatruc
Re : Select Case + Not

Bonjour à tous
Peut-être ceci ?
VB:
Case Is < 32, 33 To 38, 40 To 44, 47 To 64, 91 To 96, Is > 122
ROGER2327
#5061


Mardi 17 Pédale 138 (Saint Dricarpe, prosélyte, SQ)
21 Ventôse An CCXIX
2011-W10-5T00:40:10Z
 

Papou-net

XLDnaute Barbatruc
Re : Select Case + Not

Bonjour Papou-net,

Oui en effet, j'ai fait une inversion. Mais ce n'est pas le problème en fait ^^

Je voudrais transformer ces deux lignes :

Code:
...
Case 97 To 122, 65 To 90, 32, 45, 39, 46
Case Else
...

Par l'équivalent d'un :

Code:
...
Case not(97 To 122, 65 To 90, 32, 45, 39, 46)
...

Bonjour GeoTrouvePas,

Et pourtant, ça fonctionne !

J'ai bien compris ta demande, mais je pense que ce n'est pas possible autrement.

Si tu essaies le code suivant, tu verras que, s'il ne provoque pas d'erreur, il n'atteint pas le but recherché :

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
  Case Not 97 To 122, Not 65 To 90, Not 32, Not 45, Not 39, Not 46
    MsgBox KeyAscii
End Select
End Sub

En effet, il teste la valeur de KeyAscii, mais comme elle est forcément différente de toutes les autres valeurs que la sienne, l'affichage du message se fait à tous les coups.

Cette solution me paraît donc la seule possible dans ce cas. Autrement, il faut passer par des If...Then, ou bien par une lecture dans un tableau de variables, ce qui de toutes les façons conduirait à une écriture de code plus fastidieuse.

Cordialement.

PS : Bonjour Roger.
 

ROGER2327

XLDnaute Barbatruc
Re : Select Case + Not

Suite…
Sera-ce plus clair avec un classeur ?​
ROGER2327
#5063


Mardi 17 Pédale 138 (Saint Dricarpe, prosélyte, SQ)
21 Ventôse An CCXIX
2011-W10-5T11:38:58Z
 

Pièces jointes

  • Sélection_de_caractères.zip
    17.1 KB · Affichages: 34

GeoTrouvePas

XLDnaute Impliqué
Re : Select Case + Not

Désolé pour le retard.

Effectivement, ça ne semble pas possible de fiare ça "directement" dans le premier Case au lieu de le faire dans le Case Else. C'est pas dramatique mais j'aurai aimé faire ça plus "proprement".

Merci de votre aide.
 

Fo_rum

XLDnaute Accro
Re : Select Case + Not

Bonjour,

et ainsi ?
Code:
Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 97 To 122, 65 To 90, 32, 45, 39, 46: Exit Sub
    End Select
    KeyAscii = 0
    With TextBox1
        .BackColor = &HFF&
        .SetFocus
        .SelStart = 0
        .SelLength = Len(TextBox1)
    End With
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87