Passer un textbox en argument

Signaler
Messages postés
9
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
18 novembre 2006
-
Messages postés
9
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
18 novembre 2006
-
Bonjour,

J'ai écrit cette sub routine

Private Sub TValidate(ByRef T As TextBox, ByVal LgMAxVal As Long)
Dim Str_Chaine As String
Dim LgNombre As Long
Str_Chaine = ""
LgNombre = CLng(T.texte)
If LgNombre >= 0 And LgNombre <= LgMAxVal Then
   Cmd_Validate.Enabled = True
Else
   Str_Chaine = "Invalid Value, must be between 0 and " + CStr(LgMAxVal)
   Call MsgBox(Str_Chaine, vbExclamation, "Editing Database Value")
   Cmd_Validate.Enabled = False
   T.SetFocus
End If
End Sub

celà me semble basique

Mais quand je l'appelle par exemple avec un textbox qui s'appele Txt_Textbob

Call Tvalidate(Txt_Textbox, 9999)

j'ai une erreur de type et le debugger VB6 montre que je ne passe pas la texbox mais la valeur de la propriété text de cette textbox à ma procédure

une idée ?
Der Wanderer

8 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir,
Essaies
Private Sub TValidate(T As TextBox, LgMAxVal As Long)
sans ByRef ni ByVal

Ensuite je ne vois pas pourquoi tu passes TextBox en argument puisque tu testes sur TextBox.Text.Passes plutôt une chaine.
Si tout cela pour donner le focus à ton TextBox, transformes ta procédure en fonction
booléenne.et selon qu' elle est False ou True, tu redonnes le focus à ton TextBox
ou tu quittes .
t' es d' accord avec moi ?
 
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
passer la variable lgMaxVal par valeur ou par référence ne changera rien (il est d'ailleurs recommandé de passer la variable par valeur et non référence, et l'inverse pour le TextBox, c'est bien plus sûr !).
Par contre, à quelle ligne apparait l'erreur ?

essaye avec :
Private Sub TValidate(ByRef T As Control, ByVal LgMAxVal As Long)

J'ai jamais eu ce genre de problème, et pourtant j'utilise ce genre de fonction depuis belle lurette !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
La déclaration est bonne
Erreur de syntaxe :
LgNombre = CLng(T.texte)   <--- Pas de E à la fin de Text

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
Messages postés
9
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
18 novembre 2006

Déjà merci de vos réponses
Merci aussi pour pour Text au lieu de Texte, ces fautes d'inatentions sont une plaie

Bon pour vous donner plus d'infos et pour mieux comprendre ma problematique j'apporte les éléments suivants

J'ai 11 textbox qui doivent recevoir des valeurs Long, elles vont selon les cas de 0 à 9999, 99999, 999999
Par les 2 sub suivantes je valide déjà que que seuls des chiffres sont saisis

Private Sub Txt_AntiAirValue_KeyPress(ByRef KeyAscii As Integer)
Call TesteTouche(KeyAscii)
End Sub

Private Sub TesteTouche(ByRef KeyAscii As Integer)
Dim Str_Chaine As String
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
   Str_Chaine = "Numbers only please"
   Call MsgBox(Str_Chaine, vbExclamation, "Editing Database Value")
   KeyAscii = 0
End If
End Sub

Bien, mais pour valider les valeurs saisies je le fais à la fin via un bouton de validation qui lance pour chaque textbox la validation

Private Sub TValidate(ByRef T As TextBox, ByVal LgMAxVal As Long)
Dim Str_Chaine As String
Dim LgNombre As Long
Str_Chaine = ""
LgNombre = CLng(T.text)
If LgNombre >= 0 And LgNombre <= LgMAxVal Then
   Cmd_Validate.Enabled = True '
Else
   Str_Chaine = "Invalid Value, must be between 0 and " + CStr(LgMAxVal)
   Call MsgBox(Str_Chaine, vbExclamation, "Editing Database Value")
   Cmd_Validate.Enabled = False
   T.SetFocus
End If
End Sub

Et comme je l'ai écrit dans mon premier message quand je passe -> call TValidate(Txt_AntiAirValue,99999) et ben Txt_AntiAirValue est vu comme Txt_AntiAirValue.Text soit "12345" et non comme l'objet textbox lui même
et j'ai un message d'erreur "type imcompatible"

J'ai aussi essayé de mettre (T as Control) mais j'ai le même résultat, je pense qu'il y qqchose qui force le paramètre a être vu comme la propriété Text du textbox!! MAIS QUOI ? mystère et boule de gomme

Der Wanderer
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
Est-ce que au moment ou tu tapes CLng(T.   la liste des méthodes
d' un TextBox apparait ?
Si oui le T est reconnu comme objet Text, sinon il ne l' est pas.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
je veux dire objet TextBox
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Juste au cas où : ta sub, elle est bien dans la feuille d'où tu fait l'appel ? Pas dans un module ?
Messages postés
9
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
18 novembre 2006

Bon je suis plus que perplexe.

J'ai juste modifié texte en text, puis declaré comme proposé ci-dessus, T as Control, et PAF ( non, pas chocapic) c'est tombé en marche, plus fort, à tout zazard j'ai remis T as Textbox et la celà continue à fonctionner !!!!!, je précise aussi à tout hasard que j'ai rebooté ma machine entre temps !!!

L'informatique à ses raisons que la raison ne connait pas!!!

Pour répondre aux questions oui la sub est dans la feuille et oui "T." vois s'afficher les propriétés

voila voila voila !!!

Merci à tous de votre aide.

Der WanderVousAvezDitBizarre