Quitter un ou deux classeurs suivant les cas

Bonjour à tous,

Je tourne en rond depuis un bon moment devant un problème qui ne devrait pas en être un, mais je me noie dans l'écriture du code. Mon problème est le suivant :

Je crée un fichier "Menu" me faisant apparaître un Userform contenant plusieurs boutons. Chaque bouton me permets d'ouvrir un fichier externe bien spécifique sur lequel je désire travailler. Une fois mon travail réalisé sur ce fichier externe, je désire le fermer, voire l'enregistrer et surtout revenir sur mon "Menu" afin de pouvoir ouvrir un autre fichier externe grâce à un autre bouton.

Une fois mon travail complètement terminé je désire, avec un bouton "Fin" du "Menu" fermer définitivement le fichier "Menu", les fichiers externes ayant théoriquement été fermés auparavant.

C'est là que le problème se corse car après avoir cliqué sur "Fin", si le fichier "Menu" se ferme bien, par contre apparaît la page Excel sans fichier.

Quelles instructions faut il mettre dans les procédures "Private Sub Workbook_BeforeClose(Cancel As Boolean)" de chacun des deux Worbooks, afin d'éviter ces conflits ?

Merci beaucoup et bonne journée à tous

Jacques

Bonjour,

Voici un essai :

private sub workbook_beforeclose(cancel as boolean)
if workbooks.count < 2 then cancel = true
end sub

Je ne suis pas sûr d'avoir tout à fait compris et il doit exister meilleure solution (c'est à dire sans placer ce test sous l'évènement beforeclose)...

Cdlt,

2toto.xls (38.00 Ko)

Merci,p

Mais je ne vois pas en quoi le fait de compter les workbooks pourra répondre à ma question, toutefois je vais approfondir

Pour être plus clair, voici les deux fichiers :

1) "Menu.xls " contient l'Userform et deux boutons, l'un pour accéder à l'autre fichier "toto.xls" et l'autre, "quitter" pour quitter l'application

2) "toto.xls" est le fichier avec lequel je désire travailler. Une fois les ajouts apportés dans ce fichier je désire le fermer et accéder de nouveau à l'Userform de "Menu" afin, par exemple, d'ouvrir avec un autre bouton un autre fichier, "loulou.xls" par exemple, et itérer ces opérations plusieurs fois

Enfin, mon travail terminé, revenu sur l'useform "Menu" je désire avec le bouton "quitter" fermer définitivement Excel

J'espère avoir été assez clair

P.S. : il est évident qu'il faudra reconstruire les chemins d'accès à ces fichiers dans les différents codes

Cordialement

Jacques

2menu.xls (49.00 Ko)

Re, d'accord, je n'avais pas bien compris...

Donc, vous voulez fermer totalement l'application ? Pouvez-vous essayer ce code :

Private Sub Quit_Click()
Dim wb As Workbook
With Application
    For Each wb In .Workbooks
        wb.save
    Next wb
    .Quit
End With
End Sub

Cdlt,

Parfait, ce petit bout de code fonctionne mais malheureusement à moitié.

En effet si je désire quitter excel sans ouvrir au préalable le fichier "toto" il n'y a pas de problème mais si je désire quitter mes fichiers et Excel après avoir utilé le fichier "toto" le bouton "Quitter" de l'userform "pédale dans la semoule" et .... incroyable .... le bouton "toto" dont le but est d'ouvrir le fichier correspondant, joue le rôle du bouton "Quitter" car il ferme tous mes fichiers et me permet de quitter Excel ... !

J'en perds mon latin !

Je vais approfondir

Bonne soirée

Jacques

Re,

J'en perds mon latin !

Moi aussi, j'en terre mon lapin !

Je ne comprends pas bien. Je n'ai regardé que le fichier Menu car j'ai compris que le code était exécuté à partir de celui-ci. Il faut bien que vous soyez attentif à affecter les bons codes aux bons fichiers et boutons. Ca m'a l'air d'être un problème d'organisation (pas évident quand on jongle entre plusieurs fichiers).

Sinon, vous devriez enregistrer vos fichiers au formats .xlsm et .xlsx (pour ceux sans macros)...

Bonne soirée,

Merci,

On verra tout cela demain après une bonne nuit de sommeil, en effet il paraît que la nuit porte conseil (lol)

Toutefois je partage votre analyse, il faut appliquer les bons codes aux bons fichiers et aux bons boutons ce qui engendre des soucis d'organisation assez délicats. Je vais tout remettre à plat et à tête reposée reconstruire mes procédures.

Encore merci d'avoir accepté de vous pencher sur ces problèmes. Je vous tiendrai au courant de la suite des événements, et en attendant dormez tranquillement sur vos deux oreilles.

Jacques

Re-Bonjour,

Voila avec un peu de persévérance et de réflexion on finit toujours par trouver.

Avec l'userform "Menu" j'ouvre le fichier de travail "toto" sans problème comme nous l'avions déjà constaté. Où ça bloquait c'est que je voulais revenir au Menu en fermant le fichier "toto" avec la croix rouge ou éventuellement avec un bouton "Retour au Menu". Le code à écrire soit dans la procédure "Workbook_BeforeClose(Cancel As Boolean)" soit dans le bouton "Retour Menu" est tout simplement "Application.Workbooks.Open ("Menu.xls").

En effet ce fichier est toujours en arrière plan car il n'a pas été fermé lors de l'appel du fichier "toto" et de plus dès l'ouverture de ce fichier l'instruction "Userform.Show" fait apparaître l'userform "Menu".

C'était aussi simple que cela et je cherchais midi à 14 heures, il est vrai que parfois les voies du langage VBA sont impénétrables.

Encore merci pour avoir accepter d'essayer à résoudre mon problème.

Bonne soirée et au plaisir de vous retrouver lors d'un prochain bug

Jacques

Bonjour Jacky,

Je suis content que tu aies trouvé et je te remercie d'être revenu me le dire !

Oui, ça peut être un sac de noeuds, on part sur quelque chose puis on change de façon et ça crée des petits conflits.

Bonne soirée en tout cas et bonne continuation !

Rechercher des sujets similaires à "quitter deux classeurs suivant cas"