IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lancer une macro à l'ouverture d'un fichier si Excel est déjà ouvert


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Lancer une macro à l'ouverture d'un fichier si Excel est déjà ouvert
    Bonjour.
    J'aimerais qu'une macro se lance à l'ouverture de tout fichier Excel (xls/xlsx).

    Ceci marche avec un fichier qu'on ouvrirait alors qu'Excel n'était pas lancé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
      LES ACTIONS À RÉALISER
    End Sub
    Mais si Excel est déjà lancé (un autre fichier Excel est déjà ouvert par exemple) et que je j'ouvre un fichier xls/xlsx, la macro ne se lance pas dans ce nouveau fichier ouvert.

    J'ai essayé avec Private Sub Worksheet_Activate() et Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window) en les mettant aussi bien dans ThisWorkbook et dans Module1 sans résultat concluant.

    Comment puis-je réaliser ce que je souhaite (lancer une macro à l'ouverture d'un fichier xls, qu'importe si Excel est déjà lancé ou non) ?

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    Salut,

    l'evenement que tu utilises est le bon, mais j'ai du mal à comprendre ton soucis.

    Est-ce que tu veux dire que ton code ne s'exécute pas lorsque ton classeur s'ouvre ? Les macros sont-elles bien activées ?

    Quel est le contenu de ta macro ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Probablement un début de piste ici et
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merci hyperion13, mais ça, c'est déjà fait depuis le début (et indispensable pour que la macro fonctionne sur n'importe quel fichier je pense).

    Pour répondre à Jean-Philippe André :

    Voici les codes dans "VBAProject (PERSONAL.XLSB)" :
    - dans "ThisWorkbook" une première macro qui doit lancer une autre cinq secondes après l'ouverture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
        On Error Resume Next
        Application.OnTime Now + TimeValue("00:00:05"), "Macro1"
    End Sub
    - dans "Modules" -> "Module1" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Macro1()
     Range("B2").Select
    End Sub
    Pour tester, j'ai fait deux fichiers "1.xlsx" et "2.xlsx" (qui sont des documents "vides", ne contenant aucune donnée).
    1. Ouvrons "1.xlsx". Au bout de cinq secondes, la cellule B2 est sélectionnée.
    Fermons "1.xlsx" et Excel.
    2. Ouvrons "2.xlsx". Au bout de cinq secondes, la cellule B2 est sélectionnée cette fois encore.
    Fermons "2.xlsx" et Excel.
    3. Ouvrons "1.xlsx". Au bout de cinq secondes, la cellule B2 est sélectionnée.
    Ouvrons "2.xlsx" en laissant "1.xlsx" et donc Excel ouverts. B2 n'est pas sélectionnée dans "2.xlsx"

    Donc la macro n'est pas lancé à l'ouverture du fichier (elle se lance une fois à l'ouverture d'Excel, pas du fichier)

    J'espère que c'est plus clair.

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    re,
    Je ne l'avais pas remarqué dans votre Post#1
    Citation Envoyé par bobolecoco Voir le message
    Merci hyperion13, mais ça, c'est déjà fait depuis le début (et indispensable pour que la macro fonctionne sur n'importe quel fichier je pense)
    Alors Excel est une application, Workbook est un classeur et Workbook_open est une procédure qui permet d'exécuter des macros à l'ouverture d'un classeur. Et correspond qu'à une seule instance.
    Dans votre cas, il faudrait ajouter dans la sub workbook_open() un second OnTime avec un délai un peu plus grand qui appellerait une Macro2 par exemple pour qu'elle fasse une boucle For Each xlWbk In Application.Workbooks et re-déclenche votre Macro1.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merci hyperion13, ça fonctionne (pas exactement comme je le veux), mais je m'en sors. La macro se relance infiniment.

    ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
    On Error Resume Next
        Application.OnTime Now + TimeValue("00:00:01"), "Launch"
    On Error Resume Next
        Application.OnTime Now + TimeValue("00:00:02"), "SecondLaunch"
    End Sub
    Module 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Launch()
        Range("B2").Select
    End Sub
     
    Private Sub SecondLaunch()
      For Each xlWbk In Application.Workbooks()
          Application.OnTime Now + TimeValue("00:00:01"), "ImprimerLePlanning"
          Application.OnTime Now + TimeValue("00:00:02"), "SecondLaunch"
      Exit For
      Next
    End Sub

    Si dans la macro SecondLaunch je ne mets pas Application.OnTime Now + TimeValue("00:00:02"), "SecondLaunch", alors la macro se relance pour un seul fichier qu'on ouvrirait après le premier. Si je mets Application.OnTime Now + TimeValue("00:00:02"), "SecondLaunch", la macro se relance sans arrêt (je dois ajouter une ligne dans la macro "Launch" qui met une "marque" dans le fichier qui dit que la macro a déjà été lancée et qui s'assure que cette marque n'existe pas avant d’exécuter le contenu de la macro...). Mais ça fonctionne pour mon utilisation.

  7. #7
    Membre confirmé Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 354
    Points : 633
    Points
    633
    Par défaut
    Salut le fil
    Si j'ai bien compris lancement de la macro si premier fichier ouvert sinon pas de lancement, donc en regardant du côté des fenêtres ouvertes tu dois pouvoir faire cela non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
        If Application.Windows.Count = 1 Then
            ' // Ta Macro
            Call MyMacro
        Else
            MsgBox "Vous avez " & Application.Windows.Count & " classeur(s) ouvert(s)." & vbCrLf _
                 & "La macro de démarrage ne sera pas lancée", vbOKOnly Or vbInformation, "Lancement des macros non autorisé"
     
     
        End If
    End Sub
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en Vous avez aimé la discussion alors un fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 760
    Points : 28 618
    Points
    28 618
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les procédures événementielles de PERSONNA.XLSB se gèrent de la même manière que celles des AddIns (macros complémentaires)

    Toutes les procédures événementielles préfixées Workbook ne concernent que le classeur des macros complémentaires (xlam)
    Pour intercepter les événements de tous les autres classeurs, il y a lieu de créer une instance Application

    Code à placer dans le module ThisWorkbook du classeur nommé [B]PERSONNA.XLSB[/B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Public WithEvents appXls As Excel.Application
     
    Private Sub Workbook_Open()
      ' Ouverture de PERSONNAL.XLSB
      Set appXls = Excel.Application
    End Sub
     
    Private Sub appXls_WorkbookOpen(ByVal Wb As Workbook)
      ' Ouverture de n'importe quel classeur
      If Me.Name <> Workbooks(Workbooks.Count).Name Then
         MsgBox "Vous venez d'ouvrir le classeur " & ActiveWorkbook.Name
      End If
    End Sub
    Dans cet exemple, à adapter, une boîte de dialogue (MsgBox) affichera le nom du classeur que l'on vient d'ouvrir.

    Voir mon tutoriel sur le sujet titré VBA - Excel - Macros complémentaires - Les procédures événementielles
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [PPT-2003] Lancement d'une macro à l'ouverture d'un fichier
    Par formabox dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 21/07/2009, 16h49
  2. [XL-2003] Lancer une macro à l'ouverture d'Excel quel que soit le fichier
    Par EtyenH dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/05/2009, 08h50
  3. Lancer une macro à l'ouverture d'un fichier word
    Par beegees dans le forum VBA Word
    Réponses: 5
    Dernier message: 15/09/2008, 10h16
  4. lancer une macro à l'ouverture d'un classeur
    Par niro75 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/02/2008, 22h09
  5. Lancer une macro à l'ouverture d'un fichier
    Par Tibaldus dans le forum VBA Word
    Réponses: 2
    Dernier message: 12/09/2007, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo