• Initiateur de la discussion Initiateur de la discussion dn35
  • Date de début Date de début

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 !

dn35

XLDnaute Occasionnel
Re-bonjour le forum

Voilà j'ai un UF modal qui me permet de naviguer entre les différentes feuilles d'un classeur. Par contre il est également visible lorsque je navigue sur un autre classeur ...
Est-il possible de le rendre "invisible" lorsque l'on se trouve ailleurs que sur le classeur qui lui est associé et si oui quelle est la procédure ?

En vous remerciant
Laure
 
Re : UF modal

Bonjour Dn35, bonjour le forum,

Au prealable, en debut de l'un de tes modules :
Code:
Public MonUSFActif as Object 
Set MonUSFActif = Nothing

Dans le code de ton USF:
Code:
Private Sub UserForm_Activate()
Set MonUSFActif = Me
End Sub

Code:
Private Sub UserForm_Deactivate()
Set MonUSFActif = Nothing
End Sub

Si le fichier associe a ton USF a toujours le meme nom, on doit pouvoir essayer de faire qqch avec la macro evenementielle suivante:

Dans "Workbooks" sur le fichier associe a ton USF:
Code:
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    If ActiveWorkbook.Name <> "MonFichierAssocie.xls" And Not MonUSFActif Is Nothing Then
        MonUSFActif.Hide
    End If
End Sub

Des que la feuille de ton classeur est desactivee (=que tu bascules vers un autre fichier dont le nom n'est pas "MonFichierAssocie.xls"), l;USF sera automatiquement cache...

Pour reactiver ton USF lorsque tu reviens sur le fichier:

Code:
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    If ActiveWorkbook.Name = "Book1.xls" And Not MonUSFActif Is Nothing Then
        MonUSFActif.Show
    End If
End Sub

Non teste, pas de fichier... Il peut y avoir des erreurs 😉

Bonne journee, 🙂
 
Re : UF modal

re-

Voilà, si j'essaie d'appliquer à la lettre (enfin quand je dis à la lettre, je mets evidemment le nom des userforms concernés !🙄) la procédure que du m'a donné, j'ai un bug lorsque j'arrive à cette étape :
Si le fichier associe a ton USF a toujours le meme nom, on doit pouvoir essayer de faire qqch avec la macro evenementielle suivante:

Dans "Workbooks" sur le fichier associe a ton USF:

Code:
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
If ActiveWorkbook.Name <> "MonFichierAssocie.xls" And Not MonUSFActif Is Nothing Then
MonUSFActif.Hide
End If
End Sub
Excel me renvoie un message d'erreur au moment même où j'essaie d'utiliser userform_deactivate
erreur de compilation.instruction incorrecte à l'intérieur d'une procédure
il me renvoie vers le module où j'ai inséré la première partie et met en surbrillance le Set ...

As-tu une idée ?
 
Re : UF modal

Re,

Hum... Je crois qu'il y eu un petit malentendu, j'ai du mal m'expliquer. Je m'en excuse 🙄.

Les deux macros :
Code:
Private Sub UserForm_Activate()
Private Sub UserForm_Deactivate()
n'ont RIEN a voir avec les noms des Userforms.

Ces macros sont a l'interieur du code de ton USF et s'executent respectivement a l'activation et a la desactivation de l'USF concerne, peut importe son nom. (Clic droit sur l'USF et ensuite "Voir Code")

Donc tu peux donc reutiliser tes propres noms d'USF, cela n'a rien a voir avec le probleme...

Prends bien soin de copier ces macros telles quelles dans le code de ton USF et re-essaye...

PS: c'est ici que l'on comprends la necessite de joindre le fichier Excel aux posts, cela evite les malentendus de ce genre 😉

Bonne journee, 🙂
 
Re : UF modal

Bonjour !

Et meilleurs voeux pour cette nouvelle année ...

Voilà, je ne me suis pas repenchée immédiatement dessus parceque bon les fêtes et tout et tout ...
Mais je me repenche dessus et je suis confrontée toujours au même problème. Alors oui ta remarque est très bonne, je te joint le fichier ... 😛 ça sera certainement plus clair. L'ouverture de ce fichier est déclanché par l'ouverture d'un autre fichier dit "d'accueil" qui permet la navigationvia une barre d'outils. mot de passe pour accéder aux feuilles est "encad" et au volet vba est la5500079. Cela remet également toutes tes barres d'outils.


Bonne soirée
Laure
 
Re : UF modal

Bonne Année,

Re,

Je suis surpris car cela fonctionne très bien chez moi avec ton fichier... Quand je "navigue" vers un autre fichier, l'USF1 disparaît et lorsque je reviens sur ton fichier, l'USF1 réapparaît... A adapter pour tes autres USF bien sur.

Voir Ci-Joint. (A voir le code dans "This Workbook", "Userform1", "Module1" suivant le code de mon post précédent)

Reviens sur le fil si tu as des questions...

++

Bonne journee, 🙂
 
Re : UF modal

Salut !

Décidemment je ne comprends rien c'est à devenir dingue !
Si j'essaie d'ouvrir ton fichier joint le système plante complètement et en plus se met "en boucle" (ouverture, enregistrement pour la récupération des fichiers ouverts, erreur/rapport d'erreur, fermeture d'excel, ouverture et récupération des fichiers, enregistrement pour la récupération des fichier s ouverts, erreur/rapport d'erreur, fermeture d'excel, ouverture et ...)

Et si je retente une nouvelle fois la procédure à priori aucun problème sauf au moment de fermer le fichier il me met "erreur de compilation. instruction incorrecte à l'extérieur d'une procédure" en me mettant le set en surbrillance dans le module ou se trouve :

Code:
Set MonUSFActif = Nothing

Si je force, que je ferme qand même et que je réouvre mon fichier : "erreur de compilation dans le module caché : module 1"

Si je vais voir dans l'aide vba, il me renvoie à ce qui suit :

Code:
L'instruction doit figurer dans une procédure Sub ou Function, ou bien dans une procédure de propriété (Property Get, Property Let, Property Set). Cause et solution de cette erreur : 

Une instruction exécutable, Static ou ReDim, apparaît au niveau module. 
Static est inutile au niveau module, puisque toutes les variables de niveau module sont statiques. Utilisez Dim plutôt que ReDim au niveau module. Pour créer un tableau dynamique au niveau module, déclarez-le à l'aide de Dim en utilisant des parenthèses vides. 

Note   Au niveau module, vous ne pouvez utiliser que des commentaires et des instructions de déclaration, telles que Const, Declare, Deftype, Dim, Option Base, Option Compare, Option Explicit, Option Private, Private, Public et Type. Les instructions Sub, Function et Property figurent à l'extérieur du corps de leurs procédures, mais à l'intérieur de la déclaration de procédure. 

Pour plus d'informations, sélectionnez l'élément en question et appuyez sur F1 (sous Windows) ou sur AIDE (sur Macintosh).

Cela veut-il dire que SET ne peut être utilisé à l'extérieur d'une procédure "private sub" ? Oui mais alors si ça marche chez toi ...
Ouch ... je rame je rame je rame ...

Bonne journée
Laure
 
Re : UF modal

Re,

Bon, en effet, tu as tout a fait raison, c'est une ENORME erreur de mettre un set en dehors d'une macro...🙄. J'ai oublié de corriger dans mon dernier post... Cette erreur est déjà corrigée dans le code du fichier mais comme ça plante quand tu l'ouvres, tu n'as pas pu le voir...

Juste le:
Code:
Public MonUSFActif as Object
en début de ton module devrait suffire... En effet, par défaut, lorsque tu déclares une variable ou un objet, celui est "vide" (Nothing).

Puis dans le code de ton UserForm1:
Code:
Private Sub UserForm_Activate()
Set MonUSFActif = Me
End Sub

Private Sub UserForm_Deactivate()
Set MonUSFActif = Nothing
End Sub

Puis dans le code de "This Workbook" :
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
If ActiveWorkbook.Name <> "cijyZTKb7n.xls" And Not MonUSFActif Is Nothing Then
MonUSFActif.Hide
End If
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
If ActiveWorkbook.Name = "cijyZTKb7n.xls" And Not MonUSFActif Is Nothing Then
MonUSFActif.Show
End If
End Sub

Re-teste, et dis nous si cette fois ça va mieux...

Sinon, pour le super plantage de l'espace, je pense qu'Excel 2003 et Excel 2000 ne sont pas vraiment compatibles... J'ai rencontré pas mal de problèmes lors de l'utilisation d'USF et de FileDialog entre les deux versions... Peut etre que lorsque j'ai sauve ton fichier il y a eut conversion automatique vers un format plus récent... Mais je ne me rappelle pas avoir vu le message qui demande si l'on veut convertir dans le format plus récent...😕 Hmmm

Bonne journée, 🙂
 
Dernière édition:
Re : UF modal

Salut ...

Bon, j'ai une bonne et une mauvaise nouvelle. Je commence par la bonne :
Ca ne plante plus. 😀
La mauvaise nouvelle c'est lorsque je teste avec le fichier d'accueil (c'est à dire celui dont l'ouverture déclanche l'ouverture de tous les autres), la page active n'appartient pas au fichier associé à l'UF qui me pose problème, mais cet UF est bel et bien visible ... 😡😡😡 grrr ! commence à faire ch ... celui là ! 😉

Par contre si j'ouvre un nouveau fichier là ça fonctionne à merveille. Si je retourne dans le code qui ouve tous ces fichiers, celui associé à l'UF s'ouvre en premier ... 😱

Bref, je ne comprends pas pourquoi, lorsque ma macro ouvre les fichiers les uns après les autres, l'UF reste vsible à la fin d ela procédure bien que ce soit un autre fichier qui soit activé. Alors que lorsque je teste fichier seul puis que je créé un nouveau fichier là ça fonctionne à merveille ...

Je deviens peut être casse pied mais aller, j'ose : as tu une idée 😱😱😱

Bonne journée à toi ...
Laure
 
Re : UF modal

Re,

Ca ne plante plus. 😀
Ravi de l'apprendre 😉.

... si j'ouvre un nouveau fichier là ça fonctionne à merveille...
Bon, le code fonctionne, mais pour une application avec seulement ton fichier "cijyZTKb7n.xls" ouvert. Eh oui, lorsque j'ai fait cette macro, je n'avais que ton fichier sous les yeux donc, avec seulement ton fichier "cijyZTKb7n.xls" et un autre fichier "X", ça fonctionne... (pfiouu, mon honneur est sauf 😛)

Ne rêvons pas, cela aurait été trop beau que ce code s'adapte comme par magie a ton fichier d'accueil et toutes les macros qui l'accompagnent...🙄

Je pense que pour résoudre ton problème, il te faut prendre de la hauteur de vue... Il ne faut plus juste bidouiller le code et tester si ça fonctionne, mais il faut maintenant comprendre exactement ce qui se passe ...

En effet, les macros qui font apparaître et disparaître ton USF, sont des macros événementielles (MacEv), elles se déclenchent uniquement lorsque l'événement associé a effectivement lieu...

Ton USF apparaît et disparaît quand la fenêtre de ton fichier "cijyZTKb7n.xls" s'active et se désactive :
Code:
Private Sub Workbook_WindowDeactivate 
Private Sub Workbook_WindowActivate

  • Si ton code de fichier d'accueil ne fait qu'ouvrir des fichiers (Workbooks.Open) est-ce que VBA interprète cela comme une désactivation de fenêtre?
  • Ces MacEv sont-elles déclenchées par l'utilisateur uniquement ("avec action de la souris")? >>> A tester peut être
  • Est-ce que gérer tes fichiers (accueil, "esclaves" (=tous les autres), USF) avec des MacEv est bien adapté a ce que tu veux faire?
  • Est-ce que ce n'est pas au "fichier d'accueil" de gérer tout ça?
  • Est-ce que ce n'est pas au "fichier d'accueil" d'accueillir les MacEv et la déclaration Public peut être?
  • Est-ce que la structure ne devrait pas être simplifiée? Pas de fichier d'accueil mais un petit "Add-In" avec un menu ou une commandbar?

J'espère que cela te permettra d'appréhender la globalité de ton projet. On a trop souvent tendance a coder "la fonction de base" et a essayer ensuite de "construire autour" un système plus élaboré... C'est le contraire qu'il faut faire... Créer le système global "qui fonctionne" puis y incorporer enfin les fonctions de base...

Bonne journée, 🙂
 
Re : UF modal

Hello !

Ok je vois ce que tu veux dire. Je vais prendre un peu de temps pour absorber ce que tu me dis et pour revoir mon fichier.
Merci beaucoup pour tous ces conseils. Je reviendrais te dire si ça avance ... Mais ce sont des hoses complètement nouvelles, une nouvelle marche dans mon apprentissage de VBA alors ça peut prendre du temps 😉

Merci encore pour tout
@+

Laure
 
- 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
14
Affichages
742
Retour