Menu de naviguation avec VBA

A2H

XLDnaute Nouveau
Bonjour à tous
Je voudrais créer un Menu dans un userform pour naviguer entre plusieurs classeurs avec VBA, dont chacun contient son propre Userform.
Je voudrais bien faire des boutons d'aller retour au menu
Merci
 

job75

XLDnaute Barbatruc
Bonjour le forum,

Pour ne pas finir en eau de boudin téléchargez les fichiers joints dans un même répertoire.

Le menu se trouve dans une ComboBox.

Bonne journée.
 

Pièces jointes

  • Classeur1.xlsm
    24.8 KB · Affichages: 34
  • Classeur2.xlsm
    23.8 KB · Affichages: 28
  • Classeur3.xlsm
    23.9 KB · Affichages: 27
  • Classeur4.xlsm
    23.8 KB · Affichages: 30
  • Classeur5.xlsm
    23.7 KB · Affichages: 27
  • Classeur6.xlsm
    23.8 KB · Affichages: 30

A2H

XLDnaute Nouveau
Bonjour A2H,

Vous ne croyez pas que vous vous moquez du monde ?

1) Il y a déjà ce fil où vous restez les bras ballants :

https://www.excel-downloads.com/threads/naviguer-entre-deux-classeurs-différents-2-projets-vba.20026231/#post-20199663

2) Vous ne joignez aucun fichier, moi l'en ai marre d'en créer.

A+
Bonjour Job je suis vraiment désolée, j'ai déjà essayer avec les codes que vous m'avez donné mais ça ne marche pas c'est pour ca que j'ai essayer de faire une autre discussion car j'ai cru que j'ai mal présenté ma question la première fois.
Ci_joint deux fichier et mon but de faire un "userform" contenant un menu de boutons qui me permet d'aller vers autre classeur.
Désolée autre fois et Merci pour l'aide
 

Pièces jointes

  • Menu.xlsm
    13 KB · Affichages: 24
  • Filtre.xlsm
    12.8 KB · Affichages: 20

job75

XLDnaute Barbatruc
Bonjour A2H,
Bonjour Job je suis vraiment désolée, j'ai déjà essayer avec les codes que vous m'avez donné mais ça ne marche pas
Mes codes fonctionnent très bien, il suffit de savoir les adapter !!!

Vos fichiers en retour, les codes sont bien sûr ceux de l'autre fil.

A+
 

Pièces jointes

  • Menu.xlsm
    21.2 KB · Affichages: 29
  • Filtre.xlsm
    21 KB · Affichages: 31

Dranreb

XLDnaute Barbatruc
Bonjour.
Avec cette hiérarchie d'un UFmMenu maître plus besoin que les UserForm soient affichés non modal.
Dans un module standard de Filtre.xlsm :
VB:
Sub AfficherUFm()
   USFFiltre.Show
   End Sub
Dans l'USFFiltre :
VB:
Private Sub BTMenu_Click()
Me.Hide ' ou bien Unload Me, ça dépend …
End Sub
Dans l'USFMenu :
VB:
Private Sub Filtre_Click()
   Me.Hide
   Run "'C:\Users\Luck\AppData\Local\Temp\Filtre.xlsm'!AfficherUFm"
   Me.Show
   End Sub
Adaptez naturellement le chemin du Filtre.xlsm
et supprimez sa Private Sub Workbook_Open().
Celle du Menu.xlsm, à ouvrir en premier, peut être gardée.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui, c'était le sens de l'autre discussion: se balader d'un classeur à l'autre sans ordre prédéfini.
Là c'est différent: c'est toujours d'un menu père vers un classeur fils, puis retour au menu.
On peut alors éviter le non modal autorisant l'accès aux cellules, ce qui peut représenter un inconvénient.
 

A2H

XLDnaute Nouveau
Bonjour.
Avec cette hiérarchie d'un UFmMenu maître plus besoin que les UserForm soient affichés non modal.
Dans un module standard de Filtre.xlsm :
VB:
Sub AfficherUFm()
   USFFiltre.Show
   End Sub
Dans l'USFFiltre :
VB:
Private Sub BTMenu_Click()
Me.Hide ' ou bien Unload Me, ça dépend …
End Sub
Dans l'USFMenu :
VB:
Private Sub Filtre_Click()
   Me.Hide
   Run "'C:\Users\Luck\AppData\Local\Temp\Filtre.xlsm'!AfficherUFm"
   Me.Show
   End Sub
Adaptez naturellement le chemin du Filtre.xlsm
et supprimez sa Private Sub Workbook_Open().
Celle du Menu.xlsm, à ouvrir en premier, peut être gardée.
Bien marché Merci :p
 

job75

XLDnaute Barbatruc
Re,
Là c'est différent: c'est toujours d'un menu père vers un classeur fils, puis retour au menu.
On peut alors éviter le non modal autorisant l'accès aux cellules, ce qui peut représenter un inconvénient.
On évite facilement le non modal en utilisant Me.Hide.

Dans les fichiers joints toujours aucune hiérarchie, les codes sont les mêmes.

Notez que l'enchaînement est plus "fluide" qu'en non modal.

A+
 

Pièces jointes

  • Menu.xlsm
    21.7 KB · Affichages: 25
  • Filtre.xlsm
    21.7 KB · Affichages: 30

Dranreb

XLDnaute Barbatruc
Sans hiérarchie en modal ce n'est pas tout à fait pareil: je crois que les Show imbriqués non terminés vont s'ajouter dans la pile, parce que je pense que le Me.Hide ne peut terminer le Show qui a affiché l'UserForm qu'une fois la procédure qui le contient terminée.
Mais bon… même si j'ai raison, ça peut marcher quand même. Il faudrait sans doute des millier d'années pour arriver à saturer la pile par ce biais ! Mais ce n'est techniquement pas correct.
 

job75

XLDnaute Barbatruc
Bonsoir Bernard,

Oui Me.Hide crée une pile et ça n'a aucune importance.

Cette instruction évite d'avoir à recharger l'UserForm, c'est un avantage.

Maintenant si tu n'aimes pas tu peux toujours la remplacer par Unload Me, aucun problème.

A+
 

Dranreb

XLDnaute Barbatruc
Non, Me.Hide ne crée pas de pile. La pile existe toujours. C'est un fondement de base du fonctionnement de tous les programmes et procédures. C'est le support des paramètres, variables locales et adresse de retour dans le code de la procédure appelante.

Je parle en somme de procédures qui n'arrivent pas à se terminer, alors qu'elle n'ont plus rien à faire, à cause d'incessants appels récursifs mutuels.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour Job75.
Oui, je me doutais vaguement aussi que ça ne dégagerais pas la pile non plus avec des Unload Me
Le problème c'est plutôt que les procédures engagent indirectement des UFm.Show modaux et mutuels avant de pouvoir se terminer.
J'ai commencé un truc avec un seul chef d'orchestre dans un module de classe du classeur de menu. J'ai mis les procédures supposées externes dans le même classeur, mais elles peuvent être mises dans d'autres, il suffirait de spécifier leurs noms à la place de "Menu" dans les BMs.Add
 

Pièces jointes

  • Menu.xlsm
    28.4 KB · Affichages: 26

Discussions similaires

Réponses
8
Affichages
332