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,
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
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 !