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

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

11 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

10 réponses

1 2
Avatar
Antoine Dinimant
...
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".



et si tu essaies comme ça :

TextBox_DateMask_Change Me.Jour1TB

Btw, les parenthèses sont à proscrire quand tu appelles une Sub, et de
même quand tu appelles une Function comme une Sub :

MsgBox "Oui ou non ?", vbYesNo, "Question importante"

si par contre tu utilises ta fonction pour en récupérer le résultat,
c'est bien

Reponse = MsgBox("Oui ou non ?", vbYesNo, "Question importante")

Antoun
Avatar
Stéphane Santon
Bonjour,

Antoine Dinimant a écrit :
> TextBox_DateMask_Change (Jour1TB)

et si tu essaies comme ça :
TextBox_DateMask_Change Me.Jour1TB



RRraaarghh... Je n'arrive pas à m'y faire...
'Pense jamais à retirer ces parenthèses pour l'appel d'un sub...
Trop habitué à Delphi et depuis à Php...
Ca fait 2 week-ends que je reviens à VB. Merci du chemin.

Mais le problème est déplacé :

Erreur 13 : Incompatbilité de type.

--
** 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
Jean Yves SÉVENO
Bonjour.

Ça marche en déclarant aoTextBox comme variant.

Par contre, si l'utilisateur n'a tapé que 3 caractères dans la textBox, ce
sera difficile de mettre SelStart à 4 ...

Cordialement.

Jean Yves


"Stéphane Santon" a écrit dans le message de
news:
Bonjour,

Antoine Dinimant a écrit :
> > TextBox_DateMask_Change (Jour1TB)
>
> et si tu essaies comme ça :
> TextBox_DateMask_Change Me.Jour1TB

RRraaarghh... Je n'arrive pas à m'y faire...
'Pense jamais à retirer ces parenthèses pour l'appel d'un sub...
Trop habitué à Delphi et depuis à Php...
Ca fait 2 week-ends que je reviens à VB. Merci du chemin.

Mais le problème est déplacé :

Erreur 13 : Incompatbilité de type.

--
** 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
Antoine Dinimant
...
Mais le problème est déplacé :

Erreur 13 : Incompatbilité de type.



sur mon VB6 (patché 5), quand je tape As, il me propose deux types
TextBox parfaitement homonymes... peut-être avec l'autre ?
Avatar
Antoine Dinimant
> Mais le problème est déplacé :

Erreur 13 : Incompatbilité de type.




sinon, déclare-le sans type dans ta Sub et fais un
debug.print vartype(aoTextBox)

histoire de voir ce qui passe exactement...
Avatar
Stéphane Santon
Bonjour,

Antoine Dinimant a écrit :
> Mais le problème est déplacé : Erreur 13 : Incompatbilité de type.

sinon, déclare-le sans type dans ta Sub et fais un
debug.print vartype(aoTextBox)
histoire de voir ce qui passe exactement...



Bon tuyau. Je récupère un type 8 : String.
Correspond à ce que je pensais.

--
** 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
Antoine Dinimant
Moi perso, j'ai plusieurs fonctions de validation où je passe une
TextBox, et tout se passe sans pb.


Bon tuyau. Je récupère un type 8 : String.
Correspond à ce que je pensais.



si tu fais un debug.print aoTextBox, tu obtiens bien le texte de ta TB ?

as-tu essayé mon histoire des deux types TextBox ? Apparemment, l'un des
deux est celui d'Access, l'autre celui de VB. ça peut être assez lié à
la config de ma bécane, mais tu peux tj écrire ainsi, ça ne peut pas
faire de mal :

Sub TextBox_DateMask_Change( aoTextBox As VB.TextBox)


sinon, tj dans la série "un peu au pif", tente

Sub TextBox_DateMask_Change(BYREF aoTextBox As VB.TextBox)
Sub TextBox_DateMask_Change(aoTextBox As CONTROL)
Sub TextBox_DateMask_Change(BYREF aoTextBox As VB.CONTROL)

En désespoir de cause, tu peux tj rédiger ta sub ainsi :

Sub TextBox_DateMask_Change(Feuille as Form, NomTB as String)
With Feuille.Controls(NomTB)
...

et pour l'appel :

Private Sub Jour1TB_Change()
TextBox_DateMask_Change Me, Me.Jour1TB.Name
End Sub
Avatar
Antoine Dinimant
Moi perso, j'ai plusieurs fonctions de validation où je passe une
TextBox, et tout se passe sans pb.


Bon tuyau. Je récupère un type 8 : String.
Correspond à ce que je pensais.



si tu fais un debug.print aoTextBox, tu obtiens bien le texte de ta TB ?

as-tu essayé mon histoire des deux types TextBox ? Apparemment, l'un des
deux est celui d'Access, l'autre celui de VB. ça peut être assez lié à
la config de ma bécane, mais tu peux tj écrire ainsi, ça ne peut pas
faire de mal :

Sub TextBox_DateMask_Change( aoTextBox As VB.TextBox)


sinon, tj dans la série "un peu au pif", tente

Sub TextBox_DateMask_Change(BYREF aoTextBox As VB.TextBox)
Sub TextBox_DateMask_Change(aoTextBox As VB.CONTROL)
Sub TextBox_DateMask_Change(BYREF aoTextBox As VB.CONTROL)

En désespoir de cause, tu peux tj rédiger ta sub ainsi :

Sub TextBox_DateMask_Change(Feuille as Form, NomTB as String)
With Feuille.Controls(NomTB)
...

et pour l'appel :

Private Sub Jour1TB_Change()
TextBox_DateMask_Change Me, Me.Jour1TB.Name
End Sub
Avatar
Stéphane Santon
Bonjour,

Merci de passer une nuit blanche pour moi ;-)

Antoine Dinimant a écrit :
Moi perso, j'ai plusieurs fonctions de validation où je passe une
TextBox, et tout se passe sans pb.



Ca me rassure... dans un sens.

> Bon tuyau. Je récupère un type 8 : String.
> Correspond à ce que je pensais.
si tu fais un debug.print aoTextBox, tu obtiens bien le texte de ta TB ?



Oui. Et varType( aoTextBox) donne bien 8.

as-tu essayé mon histoire des deux types TextBox ?



Je n'en ai qu'un. Pas Access.
Ne serait-ce pas plutôt l'un de VB et l'autre de VBA ?

Sub TextBox_DateMask_Change( aoTextBox As VB.TextBox)



VB.TextBox : Type défini par l'utilisateur non défini

Sub TextBox_DateMask_Change(aoTextBox As CONTROL)



Marche aussi bien que As Variant

Merci. Je vais rester sur ma faim avec Variant ou Control
sans savoir pourquoi il envoie la chaîne au lieu de l'objet.

--
** 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,

En fait le type à définir est :

Sub TextBox_DateMask_Change(aoTextBox As MSForms.TextBox)

Eh oui, cause contrôle VBA et non VB.

Merci à vous.

Stéphane Santon a écrit :
> Sub TextBox_DateMask_Change( aoTextBox As VB.TextBox)
VB.TextBox : Type défini par l'utilisateur non défini

> Sub TextBox_DateMask_Change(aoTextBox As CONTROL)
Marche aussi bien que As Variant



--
** 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
1 2