[Mac] Contenir exécution macro

stafair

XLDnaute Nouveau
Bonjour,

Quand j'utilise ce code :

Application.DisplayAlerts = False
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close

la macro continu son éxécution et provoque une erreur sur l'instruction de fermeture.

Quelle instruction me permettrais de reprendre l'éxécution de la macro une fois que la boite de dialogue a été validé ?

Merci pour vos réponses.

Message édité par: stafair, à: 05/03/2005 16:24
 

Dan

XLDnaute Barbatruc
Bonjour,

Il faudrait plus d'infos.

1.Ton code est placé dans un module ou dans une procédure événementielle
Ce que je comprends, c'est que tu ouvres une boite de dialogue puis que tu fermes ton classeur .

Place éventuellement un fichier exemple.

:)
 

stafair

XLDnaute Nouveau
Ce code est placé dans une procédure évènementielle. (sheetbeforeclose)

J'ouvre une boite de dialogue mais la macro continue son éxécution alors que je n'ai ni enregistrer ni annuler, et créér un message d'erreur car le classeur ne peut pas se fermer du fait que la boite de dialogue est tojours ouverte.
 

Dan

XLDnaute Barbatruc
Re,

Je viens de vérifier tes instructions en les plaçant dans une macro comme ci-dessous et je n'ai aucune erreur. Tout fonctionne bien.

La macro à installer dans Thisworbook :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close
End Sub

Vérifie si elle correspond à la tienne.

Au besoin, place un fichier bidon avec ta macro que je puisse le regarder et vérifier.

Dans l'attente de te lire.

:)
 

stafair

XLDnaute Nouveau
J'ai fait un copier/coller de ta macro dans un nouveau classeur et l'erreur apparaît chez moi.

j'ai rajouté l'image de la boite d'erreur dans le zip

Merci. [file name=Archive.zip size=21714]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Archive.zip[/file]
 

Pièces jointes

  • Archive.zip
    8.9 KB · Affichages: 24
  • Archive.zip
    8.9 KB · Affichages: 24
  • Archive.zip
    8.9 KB · Affichages: 22

Dan

XLDnaute Barbatruc
Re,

Eh bien là aussi bizarrement que cela puisse paraitre, ta macro fonctionne parfaitement sous PC mais pas sous MAC.

Peux-tu me dire sous tu travailles sous MAC ou non ?

Si oui essaie de supprimer l'instruction ACTIVEWORKBOOK.CLOSE

Dans l'attente de te lire

:)
 

stafair

XLDnaute Nouveau
Je suis suis sous mac comme je l'ai spécifié dans le sujet.

Si j'enlève 'ActiveWorkbook.Close', 'Application.DisplayAlerts = False' devient inopérant et en plus de la boite de dialogue, j'ai la boite d'alerte 'ne pas enregistrer/annuler/enregistrer' qui elle suspend la macro.

Si je remplace 'Application.DisplayAlerts = False' par 'Cancel = True', je n'ai plus la boite d'alerte, la macro n'est pas suspendu, et une fois la boite de dialogue validée, le classeur ne se ferme pas.

Voilà..
 

Dan

XLDnaute Barbatruc
Bonsoir,

Désolé de revenir si tard sur ton pb. :sick:
Si tu places CANCEL = TRUE, cela a pour effet d'arrêter l'exécution de ta macro.
L'instruction ACTIVEWORKBOOK.CLOSE ne sert à rien dans ce cas car c'est la PRIVATE SUB BEFORE CLOSE qui fermera ton fichier.

Concernant le bug, cela ne s'arrange pas car après la boite de dialogue j'ai un véritable plantage EXCEL ! Et pourtant, sur PC cela roule tout seul.

Je pense qu'il faut procéder autrement pour faire cela mais compte tenu de ma réponse tardive, es-tu encore intéressé par cela ?

dans l'attente de te lire

:)
 

stafair

XLDnaute Nouveau
Dan écrit:
Si tu places CANCEL = TRUE, cela a pour effet d'arrêter l'exécution de ta macro.
Chez moi cela pour effet d'annuler la boite d'alerte automatique.


L'instruction ACTIVEWORKBOOK.CLOSE ne sert à rien dans ce cas car c'est la PRIVATE SUB BEFORE CLOSE qui fermera ton fichier.
Si je mets ACTIVEWORKBOOK.CLOSE, j'ai une erreur. Si je ne le mets pas, la PRIVATE SUB BEFORE CLOSE ne ferme pas mon fichier.

Le 14.03 il y a une MAJ d'office, si le bug n'est pas corrigé, je veux bien de ton aide pour explorer d'autres solutions.

Merci.
 

Dan

XLDnaute Barbatruc
Bonjour à toi,

Je suppose que tu as bien placé le CANCEL=TRUE après l'instruction Application.Dialogs(xlDialogSaveAs).Show.

Néanmoins c'est tout de même bizarre de ne pas avoir la même chose tous les deux. De plus on dirait que ta macro événementielle ne fonctionne pas puisque logiquement Before close ferme le fichier automatiquement.

Quelle version d'Excel as-tu ?

Vérifies aussi dans VBA quels sont les options cochées dans outils / références je crois.

Je vérifierai ce soir et te ferai savoir ce que j'ai exactement.

:)
 

stafair

XLDnaute Nouveau
Dan écrit:
Je suppose que tu as bien placé le CANCEL=TRUE après l'instruction Application.Dialogs(xlDialogSaveAs).Show.
Que je le place avant ou après, c'est la même chose.

Quelle version d'Excel as-tu ?
version 11.1

Vérifies aussi dans VBA quels sont les options cochées dans outils / références je crois.
visual basic for app.
m. excel 11.0 O.L.
ole automation
m. forms 2.0 O.L.
m office 11.0 O.L.
m. V.B. for app. extensibility


Merci.
 

stafair

XLDnaute Nouveau
Salut Dan,

Bon, après la mise à jour en 11.1.1, les boites de dialogues ouvertes par :

Application.Dialogs(xlDialogSaveAs).Show
Application.Dialogs(xlDialogSaveWorkbook).Show

n'attendent pas l'évènement utilisateur.

Application.Dialogs(xlDialogSaveCopyAs).Show

déclenche une erreur.

Si tu as une autre idée, je suis preneur.

Merci.
 

Dan

XLDnaute Barbatruc
Bonsoir,

Bon j'ai continué mes recherches mais je pense que c'est pas la bonne direction car j'ai toujours une erreur comme toi et Excel bug à chaque fermeture. Je pense que le mieux est de revoir la procédure.

Ce que j'ai compris de ton projet:

1.Tu as un fichier A avec des données
2.A la fermeture de A, tu veux sauver une copie sous un autre nom B, puis fermer A

Mes questions :

- est-ce que B doit rester ouvert ou se fermer comme A
- est-ce que les macros de A doivent se retoruver dans B

Merci de tes infos.

:)
 

Dan

XLDnaute Barbatruc
Bonsoir,

et bien le moins que l'on puisse dire, c'est que tu as mis le doigt sur une véritable pb. J'ai vraiment l'impression qu'Excel 2004 - VBA est égale à Excel 97 ...sans plus ! les événementielles ne fonctionnent pas toujours.

Jusqu'à présent la seule solution qui semble fonctionner est la suivante :

Sub Ferme()
Do events 'instruction facultative
Application.Dialogs(xlDialogSaveAs).Show
Application.Quit
End Sub

Il faut placer cette macro dans un module (et pas dans Thisworkbook) et la faire enclencher par une touche raccourci clavier.

Bon je continue mes investigations. Je dois avoir quelques applis sous Excel 97 qui pourrons peut-être convenir.

:)
 

Statistiques des forums

Discussions
312 472
Messages
2 088 710
Membres
103 930
dernier inscrit
Jibo