[E-03] Before Close conditionnel
Je travaille dans un fichier Excel 2003.
J'avais mis dans ThisWoorbook une macro BeforeClose qui devait recopier avant fermeture les valeurs de certaines cellules de l'une des feuilles appelée Barème, dans d'autres cellules de la même feuille.
Ca marchait parfaitement.
Malheureusement mon projet s'est complexifié, et dans une des Sub, il ouvre un autre fichier, y travaille et le ferme.
Et là, BeforeClose plante car il fonctionne sur tous les fichiers à fermer, et le second n'a pas de feuille Barème. d'où, à la fermeture du second fichier : plantage = n'appartient pas à la sélection.
Est-il possible de dire dans le BeforeClose d'agir sur la feuille Barème si elle existe ? Existe-t-il une synthaxe de ce type ?
Meric de vos réponses
Précisions sur la démarche, en réponse à PF
La situation est identique avec la nouvelle syntaxe.
Je vais essayer de mieux expliquer le contexte :
Je réalise bénévolement un fichier pour une petite commune qui veut déterminer les tarifs de ses prestations en fonction de la situation fiscale de ses administrés.
J'ai donc créé un fichier qui comporte 3 feuilles :
* une feuille Données, destinée à recueillir les éléments fiscaux de l'administré qui se présente.
* une feuille Résultats, qui affiche le tarif des différentes prestations applicable à cet administré.
* une feuille Barème, dans laquelle sont concentrées tous les paramètres décidés par le service qui servent de base aux différents calculs. Cette dernière feuille n'est accessible qu'aux décideurs, alors que les deux précédentes sont accessibles aux opérateurs.
Bien entendu,
* d'une part chaque changement des valeurs portées dans Barème peut générer des chagements dans Résultat à situation égale,
* et d'autre part, à chaque changement d'administré, les valeurs de Résultat changent.
Mon Objectif est double :
* Objectif 1 = garder une trace de chaque traitement de situation.
* Objectif 2 = garder une trace de chaque changement de paramètres de base.
Ma démarche pour l'objectif 1 :
Après saisie des informations concernant un administré, l'opérateur est invité à les Enregister en cliquant sur un bouton.
La macro associée
- crée une copie des deux feuilles nominatives,
- copie les valeurs des feuilles sources sur les copies,
- enregistre les copies dans un fichier au nom de l'administré (avec indication de la date du jour),
- supprime les copies du fichier d'origine,
- et efface les données personnelles du fichier d'origine qui est ainsi prêt à servir pour traiter un autre cas.
La démarche conserve donc un fichier de valeurs nominatif et daté pour chaque traitement effectué.
Ma démarche pour l'objectif 2 :
A chaque modification de l'un des paramètres de la feuille Barème, je cherche à générer une nouvelle version du fichier. Pour cela:
- je copie les valeurs de Barème à l'ouverture du fichier
- je le compare aux valeurs en temps réel
- je copie les valeurs de cette feuille à la fermeture
Je peux réaliser ainsi un historique des changements et y affecter un nom de version.
En cas de différence entre les valeurs à l'ouverture et les valeurs en temps réel, le décideur est appelé à valider sa décision en cliquant sur un bouton Validation. La macro associée
- crée une copie du fichier complet ainsi modifié, le renomme du nom de la nouvelle version et l'enregistre,
- revient au fichier d'origine dont il supprime les changements et le sauvegarde.
La démarche conserve donc une fichier de chaque version générée.
Le problème
L'enregistrement des données de Barème à la fermeture se fait grace à Private Sub Workbook_BeforeClose. Ca marche bien dans le cadre de l'objectif 2. Mais lorsque l'on crée les copies définies dans l'objectif 1, Private Sub Workbook_BeforeClose cherche à travailler sur une feuille Barème qui n'existe pas. D'où le plantage !
J'espère ne pas avoir été trop long, mais il fallait que je sois précis.
Merci d'avance