Activer Macro automatiquement

Bonjour à tous,

après une petite recherche sur notre ami google j'ai trouvé un code qui permet d'activer les macros automatiquement après le lancement d'un fichier excel,

le problème c'est que avant de sortir il enregistre automatiquement les modifications faites, alors que normalement je dois avoir un message en me demandant si je souhaite enregistrer mes modifications

quelqu'un peut m'aider s'il vous plait :

Option Explicit

Sub Auto_Open()
kh_wVisible True
End Sub

Sub Auto_Close()
kh_wVisible False
ThisWorkbook.Close Not CBool(ThisWorkbook.Saved)
End Sub

Sub kh_wVisible(ibol As Boolean)
Dim nBook As String
nBook = ThisWorkbook.Name
With Windows(nBook)
    If .Visible = Not ibol Then .Visible = ibol
End With
End Sub

Bonjour,

j'ai trouvé un code qui permet d'activer les macros automatiquement après le lancement d'un fichier excel,

Je me demande qui a pu te faire croire ça !

Ton code n'a rien à voir avec ce que tu dis, et heureusement d'ailleurs : si tu pouvais activer les macros automatiquement sans l'accord de l'intéressé, ce serait une intrusion caractérisée... !

Il date passablement aussi car cela doit faire près de 20 ans que les macros Auto_xxxx ont cédé la place aux évènementielles.

Et l'intérêt de ce qu'il fait reste relatif...

Si l'utilisateur n'active pas les macros, il ne verra pas le classeur et ne pourra donc (en principe...) y accéder. Et si le programme te laissait décider de l'enregistrer ou non, cela remettrait en cause ce dispositif, et le code serait alors carrément bancal et inopérant (de façon aléatoire).

Cordialement.

Bonjour mferand

Je voulais dire obliger l'utilisateur a activer les macros pour ouvrir le fichier

Si j'ai qualifié l'intérêt de l'opération de relatif, c'est parce que le code lors de l'ouverture ne procède qu'à l'affichage ou non du classeur. Se limitant à ça, c'est anecdotique, l'intérêt en et plus que réduit...

Ce type de dispositif fonctionne si l'utilisateur veut bien le laisser fonctionner (ou s'il n'est pas en capacité de l'outrepasser)...

Je ne vois pas trop ce que tu veux en faire. Si tu construis un projet, il est préférable d'en définir toi-même lors de la conception les fonctionalités que tu estimes nécessaires à l'utilisation que tu en prévois...

Les solutions pour les mettre en place sont très rarement uniques, et tu pourras trouver sur le forum des conseils et une aide adaptée à ton projet...

Cordialement.

Re-Bonjour mferrand, le forum

Je ne construis aucun projet, Le code que j'ai posté en le mettant dans un module standard après chaque ouverture du fichier excel concerné m'oblige à activer les macros en cliquant sur oui dans un message affiché pour ouvrir le fichier

Jusqu'a là tout est bien, le problème vient quand je ferme mon fichier il n'affiche pas le message qui me demande d'enregistrer ou non les modifications faites sur le classeur mais il les enregistre tout seul chose que je ne désire pas

Certes !

Mais je te l'ai déjà dit, ce que tu souhaites est contradictoire avec le dispositif d'ouverture. Celui-ci n'est garanti que si le classeur est enregistré comme classeur masqué avant fermeture.

Pour y pallier, il te faudrait "moderniser" ton code, basculer les Auto_Open et Auto_Close sur les évènements classeur Open et BeforeClose, et ajouter une procédure sur l'évènement BeforeSave pour que le classeur soit masqué lors de chaque enregistrement.

Dans ces conditions, tu pourrais te laisser poser la question d'enregistrer ou non, s'il est assuré que le classeur a été masqué lors de l'enregistrement précédent.

Cordialement.

Re,

Je ne pourrai pas le faire parce que je suis archi nul en VBA

Bonsoir

Quelqu'un peut m'aider s'il vous plait

Un peu de bonne volonté ! Ce n'est tout de même pas très compliqué, tu n'as aucune ligne de code à écrire, et même tu en as seulement une à supprimer !

Tu vas dans l'éditeur : module ThisWorkbook. Dans liste déroulante gauche tu cliques sur Workbook, cela va t'afficher la déclaration de procédure d'évènement par défaut de l'objet qui est justement Open.

Tu y transfères le code de Auto_Open.

Private Sub Workbook_Open()
    kh_wVisible True
End Sub

Le curseur restant sur cette procédure, tu déroules la liste de droite et tu cherches l'évènement BeforeSave : tu cliques et cela insère la déclaration de procédure correspondante. Tu y places le code symétrique du précédent (qui se trouve dans ton Auto_Close).

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    kh_wVisible False
End Sub

Tu ne programmes pas l'évènement Auto_Close puisque tu ne veux pas d'enregistrement auto à la fermeture.

La procédure restante : kh_wVisible, tu peux si tu préfères la laisser dans un module Standard, cependant elle n'est utilisée que par les deux procédures précédentes, et peut aussi bien se trouver dans ThisWorkbook. Tu l'y transfères donc (autant que possible en tête du module pour respecter les zones dévolues aux différents types de procédures...) Mais tu évites de la laisser en double, une suffit.

Tu n'oublies pas de supprimer Auto_Open et Auto_Close. Et le tour est joué !

Cordialement.

Bonjour,

désolé mais je n'ai rien compris, je suis vraiment nul en VBA

Merci en tout cas pour votre aide

Cordialement

On en est à te tenir la main ! Les procédures sont écrites ! Que veux-tu de plus ! ?

Bonjour Mferrand,

ci-joint le fichier

j'ai appliqué le code que vous m'avez fournis mais il bug

122copies.xlsm (21.98 Ko)

Evidemment, ces 2 procédures appellent une macro, si tu oublies de la mettre, elle ne pourra pas être trouvée (il faut lire entièrement ce qu'on t'écrit !)

Cette macro n'a pas changé. Tu la colles dans le module ThisWorkbook, et cela ne devrait plus boguer.

NB- Sur ta procédure dans le module Standard, efface-moi cette horrible ligne : Application.CutCopyMode = False qui ne sert strictement à rien !

Je crois avoir déjà longuement expliqué que lorsque l'enregistreur te flanque cette ligne c'est que tu as accompli (sans le savoir) cette action au cours de tes manipulations, qui, reprises dans ton code produiront le même effet. En laissant cette ligne, qu'Excel aura exécutée automatiquement 2 lignes de code plus haut, tu ne fais que la faire une 2e fois ! Si tant est que tu avais besoin de cette commande, parce qu'Excel ne l'aurait pas fait automatiquement, l'enregistreur n'aurait pu l'enregistrer et tu ne l'aurais pas dans un code enregistré. A l'inverse, quand elle y est, il est rationnel de l'effacer ! Si elle n'y est pas et que tu constates que tu en as besoin (par exemple pour éliminer le scintillement à l'écran d'une plage copiée), là tu la rajoutes (mais c'est très rare...)

[Quand cela se produit pendant que tu travailles en manuel, qu'un scintillement ne disparaît pas de lui-même, il te suffit de presser la touche Escape pour le faire disparaître.]

Cordialement.

Rechercher des sujets similaires à "activer macro automatiquement"