Probleme de code

Signaler
Messages postés
66
Date d'inscription
mardi 14 novembre 2000
Statut
Membre
Dernière intervention
18 janvier 2010
-
Messages postés
201
Date d'inscription
mercredi 25 septembre 2002
Statut
Membre
Dernière intervention
10 novembre 2007
-
Bonjour à tous,

J'ai sur une form un textbox et un bouton et j'ai mis ce code dessus:

Dim variable1 As String
Private Sub Command1_Click()
If Text1.Text = variable1 & "=" Then
MsgBox ("Super!")
End If
End Sub

En fait j'aurais aimé que dès que l'on entre une chaine de caracter plus le signe egale,dans un textbox, alors un message box s'affiche. Comment faire?

Merci d'avance!
A+

3 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Il te faut alors utiliser l'évènement keypress et déclencher ta msgbox en évaluant l'argument Keyascii (si ou non = la valeur ascii du caractère =).
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Non, il ne va pas surveiller caractère par caractère (oublie le KeyAscii).
Oui pour KeyPress qui va se déclencher à chaque fois qu'une lettre est tapée.
Le vrai détail, c'est, quand tu dis "dès que l'on entre une chaine", pour toi, c'est "dès qu'on écrit le dernier caractère" ou bien "quand on clique sur le bouton" ?
Si c'est dès que l'on rentre le dernier caractère, Oui, le KeyPress est l'endroit correct pour insérer le test que tu as prévu.

Pour la comparaison de chaine, attention à la casse (min maj), "A" n'est pas égal à "a"
Si tu dois tester la chaine en tenant compte les min/maj, Ok, garde ton test.
Si les min/maj n'ont pas d'importance, il faut modifier et ramener tout les textes dans la même casse :

Private Sub Text1_KeyPress( ... )
   If LCase(Text1.Text) = (LCase(variable1) & "=") Then
      MsgBox ("Super!")
   End If
End Sub

Ton code sous-entend que le contenu de "variable1" ne contient pas le signe "=" final.
J'ai aussi ajouté un niveau de parenthèses après le premier "=" afin d'être plus clair, mais cela ne changera rien au test. 

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
201
Date d'inscription
mercredi 25 septembre 2002
Statut
Membre
Dernière intervention
10 novembre 2007

panicq

Ton message n'est pas clair mais c'est OK car tu fais mieux que moi quand j'avais 12 ans!

1-Ton code dit:
Je veux afficher un msgBox quand le contenu du txtBox est égal au contenu de variable1 ajouté d'un "= ".
Cela suppose que tu entres des caractères dans ton txtBox et que tu compares le contenu (quand? continuellement ou à la fin?)  avec celui de variable1 (déjà remplis).
C'est sur cet aspect que jack a répondu!

2- Ta question dit:
En fait j'aurais aimé que dès que l'on entre une chaîne de caractères plus le signe "=",dans un textbox, alors un message box s'affiche.
Ici tu ne parles plus de ta variable1... ! ! !

Si tu t'es bien exprimé et que tu ne veux effectivement pas prendre en compte cette variable alors le problème est totalement différent.

Tu dois alors afficher ton msgBox lorsqu'un "string quelconque" terminé par le caractère "=" est détecté dans ton txtBox.
Mais un string quelconque peut être absolument n'importe quoi et comporter n'importe quel nombre de caractères.
ex: " =" contient un string de 1 caractère vide
ex: "12345=" contient un string de 5 caractères

Pour détecter ce string "inconnu" sans savoir de quoi il a l'air, tu n'as qu'à trouver la position du caractère "=" à l'intérieur du string total. C'est exactement ce que fait la fonction instr( )!

InStr (Text1.Text, " =")

Si instr( ) retourne 1, cela veut dire que "= " est le premier caractère du string total. Donc c'est pas ce que tu cherches!

Si par contre instr( ) retourne un nombre > 1 alors c'est presque gagné. Il te reste à vérifier que "=" est bien le dernier caractère.

Len (Text1.Text) va te dire combien de caractères il y a dans ton string total.

Tu pourras afficher ton msgBox lorsque:
InStr(Text1.Text, " =") = Len (Text1.Text) 

Voici le code final:
Private Sub Text1_KeyPress( ... )
   If InStr(Text1.Text, " =") <= 1 then exit sub
   If InStr (Text1.Text, " =") = Len(Text1.Text) Then
        MsgBox ("Super!")
   End If
End Sub