Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Référence à l'objet et non à sa propriété par défaut

3 réponses
Avatar
Stéphane Santon
Bonjour,

Je veux mettre en place une réaction à un événement de type Change à
plusieurs TextBox.

La réaction est un Sub avec comme paramètre un objet TextBox,
par exemple ici pour sauter automatiquement le 3e caractère :

Sub TextBox_DateMask_Change( aoTextBox As TextBox)
With aoTextBox
If .SelStart = 3 Then .SelStart = 4
End With
End Sub

Dans UserForm1 , je place un TextBox1 et gère l'événement Change :

Private Sub Jour1TB_Change()
TextBox_DateMask_Change (Jour1TB)
End Sub

A l'exécution, il me dit "Erreur 424 : objet requis".

Je pense que c'est parce qu'il passe la propriété de TextBox par défaut
"Text" de type String,
alors que le Sub attend un objet.

Comment passer une référence sur l'objet, et non sa propriété ??

Merci

--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime

3 réponses

Avatar
Pascal Engelmajer
Salut,
Comment passer une référence sur l'objet, et non sa propriété ??
c'est pas le pb...


de toute façon la référence est sur l'objet
Sub TextBox_DateMask_Change( aoTextBox As TextBox) <=> Sub
TextBox_DateMask_Change(byRef aoTextBox As TextBox)

mais dans As TextBox il faut As Control ou rien
Sub TextBox_DateMask_Change( aoTextBox As Control)
Sub TextBox_DateMask_Change( aoTextBox)
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"Stéphane Santon" a écrit dans le message de
news:
Bonjour,

Je veux mettre en place une réaction à un événement de type Change à
plusieurs TextBox.

La réaction est un Sub avec comme paramètre un objet TextBox,
par exemple ici pour sauter automatiquement le 3e caractère :

Sub TextBox_DateMask_Change( aoTextBox As TextBox)
With aoTextBox
If .SelStart = 3 Then .SelStart = 4
End With
End Sub

Dans UserForm1 , je place un TextBox1 et gère l'événement Change :

Private Sub Jour1TB_Change()
TextBox_DateMask_Change (Jour1TB)
End Sub

A l'exécution, il me dit "Erreur 424 : objet requis".

Je pense que c'est parce qu'il passe la propriété de TextBox par défaut
"Text" de type String,
alors que le Sub attend un objet.

Comment passer une référence sur l'objet, et non sa propriété ??

Merci

--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime


Avatar
Stéphane Santon
Bonjour,

Merci. En fait j'ai trouvé la syntaxe qui va bien :

Sub TextBox_DateMask_Change( aoTextBox As MSForms.TextBox)
^^^^^^^^
De plus, pour gérer un même comportement sur tous les TextBox de date
avec un unique code, c'est très bien d'utiliser un module de classe
(voir message "[VBA] TextBox de date préformaté" ce jour à 12:14).


Comment passer une référence sur l'objet, et non sa propriété ??


mais dans As TextBox il faut As Control ou rien
Sub TextBox_DateMask_Change( aoTextBox As Control)
Sub TextBox_DateMask_Change( aoTextBox)

"Stéphane Santon" a écrit dans le message de
Sub TextBox_DateMask_Change( aoTextBox As TextBox)
With aoTextBox
If .SelStart = 3 Then .SelStart = 4
End With
End Sub

Dans UserForm1 , je place un TextBox1 et gère l'événement Change :

Private Sub Jour1TB_Change()
TextBox_DateMask_Change (Jour1TB)
End Sub

A l'exécution, il me dit "Erreur 424 : objet requis".



--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime


Avatar
Pascal Engelmajer
Salut Stéphane,
Tout à fait d'accord pour les modules de classe
J'ai mis en ligne il y a un certain temps (c'est une demande rémanente),
un exemple de contrôle de saisie de date :
http://www.ilyapa.net/baseExcel/dateTextBox.xls
D'autres exemples utilisant des modules de classe :
http://www.ilyapa.net/baseExcel/chkboxTexte.xls
http://www.ilyapa.net/baseExcel/txtBoxSomme.xls
Si j'ai le temps je combinerai les deux...
Sub TextBox_DateMask_Change( aoTextBox As MSForms.TextBox)
^^^^^^^^
Effectivement on peut utiliser MSForms.TextBox qui est le bon type de

Control. il faut avoir référencé la bonne librairie et ça favorise
l'autocomplétion de l'éditeur VBA
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"Stéphane Santon" a écrit dans le message de
news:
Bonjour,

Merci. En fait j'ai trouvé la syntaxe qui va bien :

Sub TextBox_DateMask_Change( aoTextBox As MSForms.TextBox)
^^^^^^^^
De plus, pour gérer un même comportement sur tous les TextBox de date
avec un unique code, c'est très bien d'utiliser un module de classe
(voir message "[VBA] TextBox de date préformaté" ce jour à 12:14).


Comment passer une référence sur l'objet, et non sa propriété ??


mais dans As TextBox il faut As Control ou rien
Sub TextBox_DateMask_Change( aoTextBox As Control)
Sub TextBox_DateMask_Change( aoTextBox)

"Stéphane Santon" a écrit dans le message de
Sub TextBox_DateMask_Change( aoTextBox As TextBox)
With aoTextBox
If .SelStart = 3 Then .SelStart = 4
End With
End Sub

Dans UserForm1 , je place un TextBox1 et gère l'événement Change :

Private Sub Jour1TB_Change()
TextBox_DateMask_Change (Jour1TB)
End Sub

A l'exécution, il me dit "Erreur 424 : objet requis".



--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime