OVH Cloud OVH Cloud

Pb de débutant

3 réponses
Avatar
hotguy
Bonjour =E0 tous,

Voil=E0 mon pb :
=E0 partir d'un bouton (Bton_saisdech), je souhaite faire=20
appara=EEtre une Form (SaisDech). La macro du bouton=20
Btno_saisdech est le suivant :

Private Sub Bton_SaisDech_Click()
Load UserForms("SaisDech")
UserForms("SaisDech").Show
End Sub

Lors de l'execution, le message d'erreur suivant appara=EEt=20
sur la commande Load:

Incompatibilit=E9 de type.

Quelle est la solution ? la bonne m=E9thode pour charger et=20
afficher une UserForm dans une macro ?

Merci d'avance.

3 réponses

Avatar
Ellimac
Bonjour,

Load SaisDech
SaisDech.Show

Camille

-----Message d'origine-----
Bonjour à tous,

Voilà mon pb :
à partir d'un bouton (Bton_saisdech), je souhaite faire
apparaître une Form (SaisDech). La macro du bouton
Btno_saisdech est le suivant :

Private Sub Bton_SaisDech_Click()
Load UserForms("SaisDech")
UserForms("SaisDech").Show
End Sub

Lors de l'execution, le message d'erreur suivant apparaît
sur la commande Load:

Incompatibilité de type.

Quelle est la solution ? la bonne méthode pour charger et
afficher une UserForm dans une macro ?

Merci d'avance.
.



Avatar
John Fuss
La méthode .Show fait un .Load si la UserForm n'est pas chargée, et pour
accéder à ta UserForm tu dois écrire directement SaisDech.Show

John


"hotguy" a écrit dans le message de
news:1189501c3f5f8$217dc150$
Bonjour à tous,

Voilà mon pb :
à partir d'un bouton (Bton_saisdech), je souhaite faire
apparaître une Form (SaisDech). La macro du bouton
Btno_saisdech est le suivant :

Private Sub Bton_SaisDech_Click()
Load UserForms("SaisDech")
UserForms("SaisDech").Show
End Sub

Lors de l'execution, le message d'erreur suivant apparaît
sur la commande Load:

Incompatibilité de type.

Quelle est la solution ? la bonne méthode pour charger et
afficher une UserForm dans une macro ?

Merci d'avance.
Avatar
Michel Gaboly
Bonjour,

La collection UserForms a une particularité qui n'est
pas forcément intuitive ;-((

Elle regroupe uniquement les UserForms chargés en
mémoire.

C'est pour cela qu'on ne peut utiliser :

Load UserForms("SaisDech")

Si "SaisDech" n'est pas encore chargé (avec Load ou
Show, qui charge le UserForm concerné s'il ne l'est
pas déjà)*, il n'appartient pas à la collection User-
Forms.


C'est pourquoi, comme l'indique John, il faut employer

SaisDech.Show


Pour avoir le nombre de UserForms chargés à un
moment donné, il faut utiliser Count.

Quand une appli comporte beaucoup de UserForms, dont
certains sont affichés à la suite :

Me.Hide
DPresences.Show

UserForms.Count, utilisé dans un module standard
permet de s'assurer que l'on a pas oublié de décharger
certain(s) des UserForms à la fin d'un traitement.


Une boucle permet d'avoir la liste des UserForms
chargés :

Private Sub CommandButton1_Click()
Dim i As Integer
For i = 0 To UserForms.Count - 1
MsgBox UserForms(i).Name
Next
End Sub

Bien évidemment, le MsgBox peut être remplacé par
un Debug.Print.

Curieusement, cette variante n'est pas acceptée :

Private Sub CommandButton1_Click()
Dim U As UserForm
For Each U In UserForms
MsgBox U.Name
Next U
End Sub

A l'exécution, on obtient une erreur 438 (propriété
ou méthode non gérée par cet objet), et un clic sur
"Déboguage" aboutit au surlignement de "U.Name".



* Un UserForm est également chargé (Load) mais invi-
sible, si un dans un module quelconque, on modifie ou
on lit l'une de ses propriétés.



Bonjour à tous,

Voilà mon pb :
à partir d'un bouton (Bton_saisdech), je souhaite faire
apparaître une Form (SaisDech). La macro du bouton
Btno_saisdech est le suivant :

Private Sub Bton_SaisDech_Click()
Load UserForms("SaisDech")
UserForms("SaisDech").Show
End Sub

Lors de l'execution, le message d'erreur suivant apparaît
sur la commande Load:

Incompatibilité de type.

Quelle est la solution ? la bonne méthode pour charger et
afficher une UserForm dans une macro ?

Merci d'avance.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com