l'erreur 9 n'est jamais curieuse et dans ce cas elle est tout à fait logique !
En effet, cela se passe dans l'évènement du classeur juste avant sa fermeture :
soit il doit être sauvegardé par ThisWorkbook.Save soit il ne doit pas l'être et afin d'éviter la question
son état doit être forcé par ThisWorkbook.Saved = True ...
Mais en aucun cas ThisWorkbook.Close doit y figurer
étant donné la fermeture déjà demandée s'effectuant juste après cet évènement !!
(tant que Cancel reste à False)
___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
Idée comme ça :
Si tu utilises ThisWorkbook, tu parles donc du classeur actuel = celui qui est en train d'exécuter le code.
Que va-t-il se passer une fois l'instruction exécutée puisque ce classeur sera fermé ?
--> Bien que l'instruction existe, je ne pense pas qu'on puisse l'utiliser autrement qu'en dernière instruction avant le néant.
Essaye, éventuellement, de ne pas avoir recourt à l'option SaveChanges :
' Triche en déclarant le classeur sauvegardé
ThisWorkbook.Saved = True
' Fermeture qui ne devrait pas poser la question
ThisWorkbook.Close
Voir aussi s'il y a une différence entre ActiveWorkbook et ThisWorkbook
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 le partage (Socrate)
hummm ... Error 9
Ça semblerait quand même vouloir dire que le compilateur tente d’accéder à une variable.
Vérifie, dans ton code, si tu n'aurais pas maladroitement nommé une de tes variables ou fonction avec l'un de ces mots clé ThisWorkbook ou savechanges
Bonjour,
cette erreur risque également de se produire si a/ont été supprimée(s) une/des feuille(s) vers lesquelles pointe(nt) une/des formule(s) Excel...
(et je sais de mémoire que CerberusPau a l'habitude de mettre un peu partout des formules Excel)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Certes, et j'ai suivi tes conseils. En l'occurrence, il ne reste qu'une feuille, et vide.
Il y a aussi des malins petits SelectionChange ou Change que j'affectionnent (et qui me jouent régulièrement des tours): Raison des EnabledEvents=False
Les EnabledEvents=False n'ont aucune influence sur les formules éventuellement présentes. Ils ne font qu'inhiber les évènements (les formules ne répondent pas à des évènements et sont de surcroît traitées par Excel dans un fil (thread) totalement distinct de VBA
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Et il me semble bien te l'avoir déjà exposé il y a trois ou quatre mois .
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
est relancé par
ThisWorkbook.Close savechanges:=False
Seul moyen "rude" que j'ai trouvé pour tester :
If Sheets("Bridge").Range("C3").Value = 1 Then Exit Sub
en "tête de gondole"
suivi du code :
If Sheets("Bridge").Range("C1").Value <> "" _
Then ThisWorkbook.Close savechanges:=False
If Sheets("Bridge").Range("C1").Value = "" Then
.../...
Sheets("Bridge").Range("C3").Value = 1
ThisWorkbook.Save
ThisWorkbook.Close savechanges:=False
End If
End Sub
Il semble que soit je me suis mal expliqué, soit tu n'as pas compris ...
Mais peu_ importe ===>> je vois de toutes manières une chose étrange entre ces deux lignes :
ActiveWorkbook.Save
ThisWorkbook.Close savechanges:=False
dans quelle circonstance, dans ton appli, le classeur de la fenêtre active est différent du classeur qui contient la macro qui contient cette instruction ?
ces deux lignes et ces deux notations n'ont en effet un intérêt que si deux classeurs distincts présents et que la macro est contenue dans un classeur qui n'est pas celui de la fenêtre active.
Essaye de t'expliquer sur cet aspect.
In va par ailleurs dee toutes manières déjà tenter d'y voir clair à ce sujet en regardant ce qu'affiche :
msgbox workbooks.count
dis-nous ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
et que tu nous dises ce que cela affiche.
On finira bien, ainsi, par cerner la raison du problème ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Le but est que si à la fermeture du classeur, une condition précise n'est pas remplie, toutes les feuilles sont supprimées,sauf une, bien sûr, qui est, elle, vidée.
(Je voulais aussi supprimer les macros, mais selon la version d'Excel qui sera utilisée, cela pose des problèmes. Donc, j'ai abandonné cette idée...)
Donc, après avoir vérifié ma condition, soit je ferme sans sauvegarder, soit je "détruis" le classeur: et là, je dois le sauvegarder après mes "destructions" avant de le fermer.
J'avais aussi essayé sans plus de succès la seule ligne
ThisWorkbook.Close savechanges: =True
.
Voilà.
Ce dont je suis sûr, c'est qu'il y bien un "double appel" de BeforeClose, mais je ne sais pas pourquoi. Bon, je le "contre" avec la valeur en C3 (ou une donnée mise en mémoire), mais cela me semble curieux.