Userform - Unload me ne fonctionne pas

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

La braise

XLDnaute Occasionnel
Bonjour à tous,

J'ai un outil développé sur Excel 2003 ou je passe de userform en userform à l'aide de :

Unload me
UF_2. show

puis
Unload me
UF_3.show

et tout marche nickel.


Sur 2007 😡les userforms s'empilent les uns sur les autres.

J'ai essayer avec Me.hide meêm résultat.

Est-ce que quelqu'un a déjà rencontré ce Pbm et surtout quelle est la solution qu'il a trouvé 🙂

D'avance merci pour votre aide.

Cordialement.
 
Re : Userform - Unload me ne fonctionne pas

Le pbm vient de là je pense...

dès que je déplace un UF actif, voilà ce qui se passe... "Ames sensibles s'abstenir...." 🙂

http://www.casimages.com/img.php?i=130912060003768879.jpg

Un pbm de mémoire ou qq chose du genre?

😕


2007 c'est super mieux qu'ils disaient.... un simple UF, la mémoire ne le gère pas... 🙁
 
Dernière édition:
Re : Userform - Unload me ne fonctionne pas

Bonjour.
De toute façon même en Excel 20003, ce que vous décrivez ne me semble pas très correct, car toutes les exécutions des procédures exécutant des Show restent bloquées sur tous ces Show tant que les userform demeurent affichés. Vous accumulez sans le savoir plein d'appels récursifs. À moins qu'ils n'aient leurs propriétés ShowModal à False, alors là vous faites ce que vous voulez.
Mais vous pouvez à tout hasard essayer des M.Hide avant les Show et Unload Me seulement après, au moins comme ça la mémoire allouées aux Userform ne sera pas utilisée à autre chose tant qu'ils ont encore une procédure dont l'exécution ne s'est pas terminée…
 
Re : Userform - Unload me ne fonctionne pas

Bonjour, Merci pour vos réponses.
Ci-joint un exemple de la méthode que j'utilise.
Ici un fichier .xlsm crée sur 2007.

Le pbm ne se pose pas. l'enchainement est correct entre les UF.

Le pbm se pose sur les fichiers .xls crée sur 2003 lors de leur utilisation sur 2007.

Je vais essayer la solution préconisée par Dranreb et je vous tiens au courant.

🙂
 

Pièces jointes

Re : Userform - Unload me ne fonctionne pas

Bonjour.
Oui j'ai fait un essais: si vous mettez un point d'arrêt sur un des Unload puis que vous examinez la pile des appel vous pouvez constater que toutes les procédures CommandeButton1_Click y restent empilées, entrecoupées de <Code non visual Basic> (c'est le gestionnaire d'évènements) jusqu'à ce qu'enfin le dernier Userform soit déchargé via son bouton système.
Il vaudrait mieux une procédure dans un module ordinaire qui affiche alternativement les deux Userform dans une boucle jusqu'à une condition exprimée par une variable Public déclarée As Boolean.
(Si toutefois vous ne pouvez vraiment pas mettre leur propriété ShowModal à False ni faire un seul Userform avec un multipage par exemple.)
 
Dernière édition:
Re : Userform - Unload me ne fonctionne pas

Salut pierrejean.
Oui, parce que l'espace mémoire réservé à la pile est quand même assez grand.
Il n'y a pas que les adresses de retours des sous programmes qui y sont rangés mais aussi toutes les paramètres éventuels et toutes les variables locales. Et tous ça n'est libéré que lorsque tous les Show peuvent enfin tour à tour se terminer.
As tu fait l'essai que j'ai indiqué au #8 ? Chaque fois que tu clique sur un bouton ça ajoute deux lignes à la pile.
Ça peut marcher un moment, mais… en tout cas ce n'est pas correct. Et personnellement je ne suis pas étonné qu'à un moment ça plante, surtout que les unload avant les Show n'arrangent sûrement rien.

Par contre en faisant partout des UserFormX.Show 0 ou en mettant leurs propriétés ShowModal à False la pile des appels ne montre toujours qu'une seule ligne, celle du UserformX.CommandButton1_Click.
 
Dernière édition:
Re : Userform - Unload me ne fonctionne pas

Bonjour MJ13.
Ta solution encombre aussi la pile. Fais l'essai, met un point d'arrêt sur un Show et interroge la pile des appels.

La seule solution à part celle qui aurait ma préférence serait une procédure chef d'orchestre de ce genre :
VB:
Public ArrêterLesFrais As Boolean

Sub AficherAlternativement()
Do
   UserForm1.Show
   If ArrêterLesFrais Then Exit Sub
   UserForm2.Show
   Loop Until ArrêterLesFrais
End Sub
Et dans les userform une procédure:
VB:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ArrêterLesFrais = CloseMode <> vbFormCode
End Sub
… au minimum.
 
Dernière édition:
Re : Userform - Unload me ne fonctionne pas

Re

Ta solution encombre aussi la pile. Fais l'essai, met un point d'arrêt sur un Show et interroge la pile des appels.

Merci Bernard 🙂.

Mais comme je ne sais pas si cela fonctionne chez La braise, car chez moi, je n'ai pas de problème sur XL20007 avec son fichier. Sinon, il y a peut-être autre chose dans son fichier 😕.

Sinon, il faudrait peut-être vider la pile (c'est du combien de volts 😱).
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
534
Réponses
3
Affichages
1 K
V
Réponses
4
Affichages
1 K
V
L
Réponses
3
Affichages
898
Laurent97310
L
  • Question Question
XL 2016 userform
Réponses
0
Affichages
680
A
Réponses
17
Affichages
3 K
Ananas94
A
V
Réponses
2
Affichages
2 K
VOILLOT
V
M
Réponses
8
Affichages
5 K
L
Réponses
8
Affichages
3 K
L
P
Réponses
9
Affichages
1 K
plouff
P
Retour