beegeezzz
Messages postés152Date d'inscriptionmardi 4 novembre 2008StatutMembreDernière intervention10 avril 2017
-
6 avril 2009 à 20:12
beegeezzz
Messages postés152Date d'inscriptionmardi 4 novembre 2008StatutMembreDernière intervention10 avril 2017
-
7 avril 2009 à 10:23
Bonjour tout le monde,
J'aimerais envoyer le nom d'un objet sur lequel je suis à une fonction.
Je suis sur un objet (zone de texte) nommée txtNomClient.
J'aimerais envoyer le nom de mon objet à une fonction afin qu'il puisse y faire certaines opérations.
Sauriez-vous me dire comment je passe le nom de mon objet ?
Sauriez-vous aussi me dire comment je réceptionne mon objet ?
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 6 avril 2009 à 20:29
J'espère que tu comprendras cet exemple parlant :
Private Sub Command1_Click()
Text1.Text = "titi"
MsgBox toto(Text1)
End Sub
Private Function toto(lobjet As Object) As String If lobjet.Text "titi" Then toto "voilà"
End Function
Un "détail" qui n'est pas anodin ...
J'ai mis ici As Object.
Ce serait mieux de mettre As Control lorsque tu sais qu'il s'agit d'un contrôle
et encore mieux de mettre As TextBox lorsque tu sais que le contrôle est une TextBox
En fonction de la précision que tu as en ce qui concerne ton objet
beegeezzz
Messages postés152Date d'inscriptionmardi 4 novembre 2008StatutMembreDernière intervention10 avril 20171 6 avril 2009 à 20:39
Bonsoir,
Merci pour ta réponse.
Je pense que je n'ai pas posé la bonne question.
En fait, j'ai ce code :
Private Sub txtNomClient_LostFocus()
If Not (EstUneChaine(txtNomClient.Text)) Then
With txtNomClient
'Se positionne à la position 0
.SelStart = 0
'sélectionne tout le texte
.SelLength = Len(.Text)
'remet le texte d'origine
.Text = .Tag
' End With
End If
End Sub
Vue que je vais devoir le réécrire plusieurs fois, je me demandais si il était possible de faire une fonction générique qui ferait ceci :
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 6 avril 2009 à 20:50
Continuons donc mes copier/coller de mes propres réponses (c'est vraiment ma journée !) :
Mais...
Je t'ai répondu, ami...
Ceci étant dit, tu n'as en outre, pour finalement ne faire que ceci, nul besoin d'une fonction (dont la vocation est de retourner une valeur), mais d'une procédure ... le principe restant à peu près le même que pour une fonction !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 avril 2009 à 09:09
Je vais condenser toutes ces bonne réponses de jmf0
Private Sub txtNomClient_LostFocus()
monTraitement txtNomClient
End Sub
Private sub monTraitement(ByRef voTxt As TextBox)
If Not Nothing Is voTxt Then
With voTxt
If Not (EstUneChaine(.Text)) Then
.Text = .Tag
End If
End With
End If
End Sub
beegeezzz
Messages postés152Date d'inscriptionmardi 4 novembre 2008StatutMembreDernière intervention10 avril 20171 7 avril 2009 à 10:07
Bonjour Jmf0, Bonjour Rendfield,
Un tout grand merci pour vos réponses.
J'ai finalement suivi les conseils de Jmf0, j'ai mis dans un groupe de contrôle mes contrôles, c'est nettement plus efficace.
Je ne fais que passer mon contrôle et son index, cela me permet de n'écrire le code qu'une seule fois.
Voici mon nouveau code :
Private Sub txtNouveauClient_GotFocus(Index As Integer)
'backup de la valeur existante au cas où l'utilisateur encoderait une valeur non acceptée
With txtNouveauClient(Index)
.Tag = .Text
'MsgBox txtNouveauClient(Index).Tag
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
Vous vouez apercevrez que j'ai gardé selstart et sellength, c'est juste pour que l'utilisateur retape une nouvelle donnée sans devoir sélectionner l'ancienne valeur.