[Catégorie modifiée VB6 -> VBA] beug d'affichage d'un userform non modal excel v

Signaler
Messages postés
6
Date d'inscription
vendredi 6 janvier 2012
Statut
Membre
Dernière intervention
23 janvier 2012
-
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019
-
Bonjour , bonne année et meilleur voeux à tous pour cette année 2012!!!
Pour bien commencé l'année, Voici un petit problème liés a l'affiche d'un userform...

Situation initial:
Un userform se lance une foie l'onglet X activer.Il s'agit d'un formulaire pour rajouter un équipement a une liste situé sur une feuille W. Jusqu'ici pas de problème, l'userform fonctionne parfaitement ( il est modal ==> Ca peut avoir son importance pour la suite...^^). Lorsque je click sur le bouton "ENREGISTRER" de mon formulaire, l'userform est déchargé de ses infos sur la feuille W, se ferme, selectionne la feuille Z et charge un nouvel userform (non modal celui la).Voici un bout du code pour mieu me faire comprendre:

Problème rencontrer : L'userform non modal, s'affiche mais disparait aussi tot ( pas le temps de le voir tellement sa va vite...^^).J'ai regarder sur la toile si quelqu'un avait eu un problème similaire, et j'ai testé différentes manips ( activer ou non le mode modal dans les propriété de l'userform3; Forcé l'userform a se réaficher => .Repaint etc...) qui se sont avéré inutile ou génératrice d'erreur.

dans ma macro, il faut Activer la case a cocher "Accès approuver au modèle d'objet du projet vba" dans las paramètres de sécurité des macro, car avant de lancer le fameux userform qui beug, ma macro copie des lignes de codes dans un module.
Sur un autre forum, une personne qui n'avait pas cocher cet case avait un beug sur l'affectation des lignes de codes mais pas sur L'userform (il le voyais).
Je me demande alors est ce que le fait d'activer cette case peut perturber le fonctionnement nonmodal d'un userform???


Si quelqu'un à une solution a se problème d'affichage ,je suis preneur... Je pense avoir essayer pas mal de chose mais le problème persiste... PLEASE HELP...^^

Merci par avance pour vos réponse.
Cdt

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Les appels modeless n'attendent pas que la forme soit déchargée pour continuer. Donc, si derrière le .Show tu fais un UnLoad ou que tu sors de ta procédure alors que la UF est dimensionnée à l'intérieur, elle disparaitra, normal.
Quel code utilises-tu pour lancer l'affichage des UF modal et modeless ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
6
Date d'inscription
vendredi 6 janvier 2012
Statut
Membre
Dernière intervention
23 janvier 2012

salut et merci pour cette réactivité...

Alors voici un petit extrait de ma macro :

Code lié a L'UF32:Il s'ouvre lorsque l'onglet feuil2 est selectionner par ex

SUB....
(...)
Unload UserForm32 => Celui qui sert a rajouter un équipement

Sheets("Plan maitre").Select
Range("I21").Select
UserForm3.Show vbModeless

(...)

End Sub

Code lié a l'UF3:

Private Sub CommandButton1_Click()
Unload UserForm3

UserForm4.Show vbModeless

End Sub

=> Donc en théorie l'UF3 ne devrait pas se fermé tant que l'utilisateur n'a pas appuyer sur le boutton...

En tout cas, Merci pour cet éclaircicement concernant la procédure modelesse... L'erreur doit surement venir du End Sub après le Userform3.show vbModelesse...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Si tu charges une UF en mode Modeless, le code qui suit la commande .Show continue, en l'occurrence ce que tu as mis dans (...).
S'il n'y a là rien qui arrête/attende la fermeture de ta UF, le End Sub, il y a de fortes chances que ton UF disparaisse, oui.
Tout dépend de ce que tu n'as pas fourni comme code :
Comment est déclarée la forme ?
Qu'y a t-il dans (...) ?

Le seul avantage de charger une UF en mode Mosdeless, c'est que d'autres codes peuvent être exécutés pendant que l'UF est affichée.
Est-ce, pour toi, un besoin impérieux ?

Méthode à utiliser pour le mode Modeless :
Sub maSub()
    Dim maForme As UserForm1
    Set maForme = New UserForm1
    Load maForme
    With maForme
        ' Ici, ma forme est chargée mais pas affichée.
        ' Le Form_Initialize a été exécuté
        ' Je peux en profiter pour écrire des valeurs dans les
        '   objets présents sur ma forme (Label, TextBox, ListBox ...)
        '   ou variables Public
        .Label1.Caption = Range("A1").Value
        ' Affichage
        .Show vbModeless
        ' Le code continue dès qu'il a affiché la forme
        ' Il faut piéger le code pour qu'il ne sorte pas
        Do While .Visible
            DoEvents
        Loop
        ' Ça y est, la forme a été .Hide (pas Unload - important)
        '                                              ---------
        ' La forme et ses composants est toujours en mémoire,
        '   mais n'est plus visible. On peut en profiter pour
        '   récupérer le contenu des objets (Label, TextBox, ListBox ...)
        '   ou variables Public
        Range("B1").Value = .Label1.Caption
    End With
    ' Décharge la forme
    Unload maForme
    Set maForme = Nothing
End Sub
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Bonsoir Jack,
Ça fait un bail que tu as écrit ça (on était petits à l'époque), mais ça m'a diablement servi ce soir (eh oui, en novembre 2013 !).
Alors mieux vaut tard que jamais : merci beaucoup !
Apolinaire
Messages postés
6
Date d'inscription
vendredi 6 janvier 2012
Statut
Membre
Dernière intervention
23 janvier 2012

Merci a toi pour ces éclaircicement concernant la procedure vbmodeless... Après modification et adaptation sur mon code la procédure tourne impécablement...
Merci beaucoup pour ton aide...
Cdt