Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro exécutée en auto

Y

yoyo

Guest
Bonjour,

Je souhaiterai utiliser une macro à chaque ouverture
d'excel sur mon poste (pour qu'elle soit exécutée sur tous
les fichiers excel que j'ouvre). Je pense qu'il faut pour
cela enregistrer sa macro dans le répertoire "C:\Program
Files\Microsoft Office\Office\XLOuvrir", mais je ne sais
pas comment y arriver (et si c'est possible...).

Si quelqu'un a une idée...
 
L

Ljoulin

Guest
lu,
c l'instruction OPEN de WORKBOOK ki fé ça.
Exemple:

Sub Workbook_Open()
'Entre les instructions ICI
'Déclenché à l'ouverture du classeur
End Sub

Pour que ces instructions s'éxécutent à l'ouverture d'EXCEL,
enregistre ton classeur comme Macro Complémentaire.


évoilà
 
Y

Yoyo

Guest
l'instruction OPEN de WORKBOOK : c'est pour cela que tu appelle la procédure "Sub Workbook_Open()" ???.

Sinon, ça ne fonctionne pas dans mon cas : excel exécute apparemment les macros, avant d'ouvrir les fichiers ; or, cette macro est censée modifier les fichiers que l'on ouvre --> ça ne fait rien du tout.

Par ailleurs, si je peux reformuler ma demande, ce qui m'intéresserait, ce serait d'exécuter cette macro dès l'ouverture d'un fichier excel (c'est-à-dire même quand excel est déjà ouvert...). Est-ce réalisable ?

Merci pour les futures réponses.
 
@

@+Thierry

Guest
Salut Yoyo, Ljoulin, le Forum

Huum parlons nous bien de la même chose ?

Si tu as un fichier qui doit faire telle ou telle action quand tu ouvres ce fichier en question c'est bien ce que te dit Ljoulin et que je te mets en image ci-dessous... (NB qu'Excel soit déjà ouvert ou non, çà ne change rien dans ce cas là)




Tu devras donc rédiger la macro nécessaire dans chacun le Private Module de "ThisWorkBook"des Fichiers concernés...

Maintenant si tu veux qu'Excel fasse quelque chose à chaque ouverture de fichiers (quelque soit le fichier) c'est bien évidemment un autre problème. Il faudrait voir exactement l'action que tu veux faire en fait et soit s'orienter pour créer une XLA (Macro Complémentaire) ou un fichier Personal.XLS dans le répertoire XLStart... mais il faudrait que tu soies plus explicit...

Bonne Soirée
@+Thierry
 
Y

Yoyo

Guest
Hello @+Thierry et Ljoulin,

la liste des fichiers qui devraient recevoir la macro n'est pas complètement figée --> je n'ai pas envie de m'amuser à copier/coller à chaque fois ma macro "dans le Private Module de ThisWorkBook"... Mais merci pour ton explication @+Thierry qui est on ne peut plus claire.

Voici ma macro que je souhaite exécuter à chque ouverture d'excel (voire à chaque ouverture fichier, si possible, mais c'est moins grave si cette 2e possibilité n'est pas possible) :

Sub Workbook_Open()
' Rappatriement des propriétés personnalisées vers des cellules des feuilles excel
' Boucle sur les propriétés personnalisées
For Each P In ActiveWorkbook.CustomDocumentProperties
' On évite les propriétés qui ne correspondent pas à un nom de plage
On Error Resume Next
' Les blancs sont supprimés dans le nom des propriétés
Range(Trim(P.Name)) = P.Value
If Err <> 0 Then Range(Trim(P.Name)).ClearContents
Err.Clear
' Fin de la boucle
Next P
' Fin de la macro
End Sub

En gros, on peut faire des tests avec cette macro un peu plus simple (mais qui montre le même problème) :
Sub test_ouverture()
Range("A1").Value = "La macro fonctionne"
End Sub

Le problème est que la macro semble être exécutée après ouverture d'excel, mais avant l'ouverture du fichier, si l'on a enregistrée cette macro en tant que macro complémentaire dans XLouvrir... Du coup, le fichier ainsi ouvert n'est modifié par la macro...

Si vous voyez une astuce pour me débloquer, je suis preneur.

Yoyo
 
Y

yoyo

Guest
On m'a un peu aidé, mais il existe bien une solution : je vous transfère la proposition venant de "Frédéric Sigonneau [MVP Excel - né un sans-culottide]", car cela peut intéresser plus d'un...

Pour exécuter une macro à l'ouverture de n'importe quel classeur (à condition qu'il ait été enregistré au moins une fois), il faut passer par la création d'un 'Excel perso' dans un module de classe, qui va intercepter les événements standard d'Excel de ton choix (ici le Workbook_Open) pour exécuter le code de ton choix.

Exemple de mise en place simple.
Dans ton perso.xls (classeur de macros personnelles) insère un module de classe
et renomme-le ExcelApplication. Puis recopie dans ce module le code ci-dessous :

'=======================
Public WithEvents AppXl As Application

Private Sub AppXl_WorkbookOpen(ByVal Wb As Workbook)
If Not Wb.Name = ThisWorkbook.Name Then
MsgBox "coucou"
End If
End Sub
'=======================

Ensuite, dans le module ThisWorkbook du perso.xls, recopie ce code qui va créer
une instance d'Excel et l'affecter à l'application Excel au moment de son
ouverture (le perso.xls est exécuté au lancement d'Excel) si les macros sont
activées :

'=======================
Dim MonXL As New ExcelApplication

Private Sub Workbook_Open()
Set MonXL.AppXl = Application
End Sub
'=======================

Voilà. Enregistre, ferme puis relance Excel. Ensuite, l'ouverture de chaque
classeur va provoquer l'affichage du message "coucou" (ou l'exécution du code
que tu mettras à sa place).


Il suffisait de le savoir, non ?
Ciao
 

Discussions similaires

Réponses
2
Affichages
512
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…