Envoyer le nom d'un objet à une fonction ?

Résolu
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 - 6 avril 2009 à 20:12
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 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 ?


Avec

widget asobject

?


Merci d'avance.


beegees

8 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
6 avril 2009 à 23:41
(je continue avec mes copier/coller de fainéant) ...

Je repasse par là, lis et ....

et je te demande de réfléchi en outre à 2 choses !

La première concerne ton code :

             SelStart = 0
            'sélectionne tout le texte
            .SelLength = Len(.Text)
            'remet le texte d'origine
            .Text = .Tag

Tout ce que j'ai mis en rouge est totalement inutile ! (j'espère que tu vois pourquoi !)

Le deuxième concerne le mécanisme que tu veux mettre en oeuvre avec ta "fonction"...

Tu devrais tout simplement t'intresser aux groupes de contrôles indexés ! <!-- / message --><!-- edit note -->
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
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
0
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 1
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 :

With NomDeLObjet (car générique)

            'Se positionne à la position 0

            .SelStart = 0

            'sélectionne tout le texte

            .SelLength = Len(.Text)

            'remet le texte d'origine

            .Text = .Tag

'        End With

Merci encore pour ton aide.

beegees
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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
0
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 1
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.

Merci encore à vous deux.

beegees
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 avril 2009 à 10:17
plus simple que de jouer avec ces .Tag...

utilise la propriété Validate, qui sert précisément a ça.

Private Sub Text1_Validate(Cancel As Boolean)
Cancel = Not EstUneChaine(Text1.Text)
End Sub
0
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 1
7 avril 2009 à 10:23
Re,

Merci pour l'information.

Je testerai Validate.

Encore merci à toi.

beegees
0
Rejoignez-nous