Ouverture USF et méthode Show

Zdz16

XLDnaute Occasionnel
Bonjour le Forum;

Je suis en cours d'adaptation de la classe d'une barre de progression prévue pour Access en se basant sur l'excellent tutorial de 'Thierry GASPERMENT' sur Developpez.com. L'objective est de créer la même, mais pour Excel, et ça sera avec plaisir que je posterai cela sur le forum dès quelle est à point

Ceci dit, je me heurte à une erreur qui est la suivante :

J'ai créé l'USF 'FrmBar' et je la déclare dans la classe comme suit
Dim Frm as UserForm
.....
Set oFrm = New FrmBar
.....

Pour l'affichage, dans la classe, j'utilise

lors des tests, je reçois, une erreur me signalant que la méthode Show n'est pas gérée par l'objet, Erreur numéro 438. En regardant de plus près, effectivement dans la liste des méthodes et propriétés 'Show' est absentes.

Comment puis-je déclarer un UserForm comme étant un objet et l'utiliser avec ses méthodes et propriétés via VBA ?

Merci d'avance pour votre aide
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Ouverture USF et méthode Show

Bonjour Zdz16,

Pas sûr d'avoir compris le problème car a priori c'est élémentaire :

Code:
Dim uf As Object
Set uf = UserForm1
MsgBox uf.Caption
MsgBox uf.Width
MsgBox uf.Height
'etc...
uf.Show
A+
 

Zdz16

XLDnaute Occasionnel
Re : Ouverture USF et méthode Show

Bonjour Job75;

Merci pour la réponse.

J'ai modifié la déclaration 'Dim oFrm as Userform' par ta proposition 'Dim oFrm as Object'.
ça fonctionne, plus de message d'erreur.

Toutefois, j'aurai aimer savoir quelle est la différence entre les deux déclarations.
Bon, pour le moment, je m'en contente, et je relègue la question à plus tard.

Merci encore, cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Ouverture USF et méthode Show

Bonjour.

Object est un type générique susceptible de recevoir n'importe quel type d'objet. Il s'en suit une recherche dynamique, lors de l'exécution, des méthodes et propriétés invoquées (liaisons dites tardives) forcément moins rapides qu'avec l'utilisation d'un type d'objet explicite, permettant de les résoudre à la compilation (liaisons dites anticipées). Personnellement je déteste les liaisons tardives, et donc le type Object et la fonction CreateObject: je préfère me décarcasser un peu plus pour trouver la bibliothèque qui les définit. Mais il faut reconnaitre qu'elle peuvent à l'occasion être plus puissantes: il vous fait de toute façon aveuglément confiance à la compilation puisque vous n'avez pas eu d'assistance lors de la rédaction. Avec un Object, si vous avez déclaré un Public dans l'Userform, il vous le trouvera à l'exécution. En liaison anticipée avec un Userform il ne saurait résoudre des liens qu'avec des chose existant systématiquement dans n'importe quel Userform.

P.S. Après plus ample recherche: New FrmBar est une expression valide en VBA, si FrmBar est le nom d'un Userform, même si ce n'est vraiment pas du tout courant. Mais elle n'est pas de type Userform: elle est de type … FrmBar !

J'ai créé un Userform1 puis, dans un module :
VB:
Sub test()
Dim U1 As UserForm1, U2 As UserForm1
Set U1 = New UserForm1
Set U2 = New UserForm1
U1.Show 0
U2.Show 0
End Sub
Rigolo, ça marche, j'ai deux UserForm1 jumeaux affichés, chacun ignorant ce que fait l'autre ! Mais à quoi ça pourrait bien servir ??? …

En tout cas je me serai au moins clarifié un truc: le nom d'un Userform ne représente pas seulement, à lui seul, une seule instance possible de lui même, mais aussi un type de donnée objet.
 
Dernière édition:

Zdz16

XLDnaute Occasionnel
Re : [Resolu] Ouverture USF et méthode Show - Barre de progression

Bonjour le forum;

Tout d'abord mes remercîments à Danreb, pour ses explications très utiles.

Comme promis, je joints un classeur qui contient l'utilisation d'une barre de progression d'attente de traitement.
Les explications sont dans le classeur lui-même avec un exemple d'utilisation.
Bien sur vos remarques et suggestions sont les bienvenues

Cordialement
 

Pièces jointes

  • ClsProgressBarre.xlsm
    33.1 KB · Affichages: 89
  • ClsProgressBarre.xlsm
    33.1 KB · Affichages: 91
  • ClsProgressBarre.xlsm
    33.1 KB · Affichages: 94

Dranreb

XLDnaute Barbatruc
Re : Ouverture USF et méthode Show

Bonjour.

Personnellement je résous toujours mes besoins de barre de progression avec ce même système qui se démarre par 1 appel à Tâche "Désignation tâche", NbPrévus, "Opé" puis NbPrévus appels à OùÇaEnEst.
 

Pièces jointes

  • ExUfBarrAv.xls
    68.5 KB · Affichages: 70
  • ExUfBarrAv.xls
    68.5 KB · Affichages: 91
  • ExUfBarrAv.xls
    68.5 KB · Affichages: 97

Guy_M

XLDnaute Occasionnel
Re : Ouverture USF et méthode Show

Merci Dranreb ! Merci !

Rigolo, ça marche, j'ai deux UserForm1 jumeaux affichés, chacun ignorant ce que fait l'autre ! Mais à quoi ça pourrait bien servir ??? …

Moi je sais à quoi cela va me servir : j'ai un userform qui m'aide à parcourir des classeurs et des feuilles et de temps en temps je souhaite faire des parcours parallèles. C'est génial, j'ai mis en moment aujourd'hui à trouver comment faire ça, avec une description simple, claire et précise !

J'ai adapté : pour ouvrir autant de fois l'USF que nécessaire il suffit d’exécuter la procédure AfficherMonUSF autant de fois que nécessaire. SIMPLISSIME !

VB:
Sub AfficherMonUSF()
Dim NouvUSF As MonUSF
Set NouvUSF = New MonUSF
NouvUSF .Show vbModeless
End Sub

Ça marche parce que MonUSF est une classe d'objets (donc MonUSF.show instancie la classe dans la variable objet MonUSF). Dans l'absolu, on devrait toujours appeler un USF comme cela, comme on le fait pour les autres classes.

Ce qui m’étonne est que la variable NouvUSF est détruite à la fin de la procédure mais que l'objet existe toujours dans Excel.

A bientôt
Guy
PS mots clefs pour faciliter la recherche : multiple plusieurs instances d'un Userform USF, ouvrir un Userform USF plusieurs fois simultanément
PPS : si show instancie, alors show n'est pas le contraire de hide (unload est le contraire puisqu'il détruit l'instance de l'objet).
 

Dranreb

XLDnaute Barbatruc
Re : Ouverture USF et méthode Show

Bonjour.
Ce qui m’étonne est que la variable est détruite à la fin de la procédure mais que l'objet existe toujours.
C'est vrai que c'est un peu étonnant. Mais pas tant que ça: la méthode Show ajoute l'exemplaire à une collection UserForms. C'est Unload Me ou Me.Hide qui, en le supprimant de cette collection, va détruire cette dernière référence à l'objet.
 

Si...

XLDnaute Barbatruc
Re : Ouverture USF et méthode Show

salut
Set Objet = Nothing

c'est radical : élimination pure et simple même en mémoire !

De façon pratique :

.Load : charge le formulaire
.Show : charge et affiche

Unload Me : décharge mais pas ne détruit pas l'objet (ainsi, les contrôles qui s'y trouvent sont vidés).
Me.Hide : cache sans décharger (aussi, les contenus sont retrouvés après un nouvel affichage
 

Discussions similaires