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 :

Exécuter une macro à l'ouverture de fichiers Excel spécifiques


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut Exécuter une macro à l'ouverture de fichiers Excel spécifiques
    Bonjour,
    je souhaiterais pouvoir exécuter une macro à l'ouverture d'un fichier excel, seulement j'aimerais cadrer le code, car la macro doit s'exécuter sur des fichiers Excel spécifiques, sachant que les personnes manipulent d'autres fichiers Excel.

    J'ai donc tenté ceci sous l'éditeur vba de l'onglet développeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub Workbook_Open()
       Dim nonfeuille As String
       dim chemin as string 
     
        nonfeuille = ActiveWorkbook.Name
    chemin = ActiveWorkbook.Path & "\" & nonfeuille 
        MsgBox nonfeuille
     
        If ActiveWorkbook.Name = "mon fichier.csv" Then
    			'j'ai pensé à faire une autre verification à savoir 			
    			'si chemin = "c:\..\..\mon fichier.csv" alors
    			'je fais mon traitement ici
    			fin si
     
        Else
        MsgBox "mauvais fichier"
     
        End If
    End Sub
    j'aimerais que le code s'execute à l'ouverture d'un fichier excel, mais j'ai à chaque fois une erreur :
    Erreur d'exécution 91
    Variable objet ou variable de bloc with non définie
    mais quand je clique sur lecture, dans l'éditeur, le code s'exécute normalement.


    je ne sais pas pourquoi le code ou les variables ne sont pas pris en compte à l'ouverture mais que lorsque l'on clique sur lecture, ça marche bien.

    Sauriez vous m'expliquer?

    Merci pour vos lumières

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Je t'avouerai ne pas comprendre ton problème car je viens de tester de mon côté et tout va bien !

    Sur quelle ligne ça bloque ?

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par android59 Voir le message
    J'ai donc tenté ceci sous l'editeur vba de l'onglet developpeur :
    Dans quel module as-tu placé ce code ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    bonjour,
    j'ai joint une copie d'écran pour que vous ayez un aperçu.

    J'ai placé le code dans :
    VBAproject (PersonalXLSB) / Microsoft Excel objects /thisWorkbook, sachant que ma macro se trouve dans VBAproject (PersonalXLSB) /Modules , est ce correct?
    Merci

  5. #5
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    Après quand je clique sur stop puis lecture, là le debogage marche sans erreur

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,


    Peux-tu nous expliquer pourquoi tu utilises ActiveWorkbook plutôt que ThisWorkbook ?
    Il est toujours préférable de travailler avec un objet défini plutôt que celui supposé être actif !
    Open se produit avant Activate !

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Donc, en résumant, tu veux un classeur Excel contenant une/des macro(s) qui doivent s'exécuter sur des fichiers spécifiques qui sont ouverts par une autre personne; laquelle personne peut travailler sur ces fichiers spécifiques, ou d'autres. Ou bien chacun des fichiers en cause doit contenir leurs macros automatiques.

    Donc, ta macro dans ton classeur de macros personnelles ne va fonctionner que sur ta machine. Donc, tu dois créer une macro complémentaire, complément, application ou tout autre nom que Microsoft pourrait utiliser ou inventer. (La dernière fois que j'ai regardé c'était application). Ou bien chacun des classeurs en cause, si tu ne fais pas d'application devra contenir toutes les macros. Et ce fichier devra probablement se trouver sur toutes les machines appelées à exécuter ces macros et il devra être installé dans un emplacement approuvé (dans les options de chaque Excel en cause) pour être ouvert automatiquement dès qu'Excel est lancé. Et, ceci étant dit, chaque Excel en cause devra être configuré manuellement pour que l'endroit approuvé contenant ton application soit un endroit sécurisé inaccessible à l'individu. Sinon n'importe quel individu moindrement connaisseur d'Excel pourrait virer cette application et échapper à son contrôle. Et pour conserver un minimum de sécurité, tu ne peux pas configurer les Excels en cause pour qu'ils exécutent toutes les macros. Donc, si ta boîte, ou toi personnellement n,'avez pas de certificat de signature numérique; va falloir en acquérir. Parce que ceux que l'ont peut créer nous-mêmes avec selfcert ou makecert ne sont valables qu'un an. Et puis, tu ne peux pas mettre de macros VBA, dans un fichier texte. À mon avis, tu n'es pas sorti de l'auberge.

    P.S. En passant, si les classeurs que ta macro doit traiter sont utilisés par plusieurs personnes, comment pourras-tu être sur que ta macro automatique fera vraiment la bonne chose à faire, à ce moment précis.

    Mais bon-là j'arrête, tellement cela me semble irréalisable sans une usine à gaz.

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par Patrice740 Voir le message
    Bonjour,


    Peux-tu nous expliquer pourquoi tu utilises ActiveWorkbook plutôt que ThisWorkbook ?
    Il est toujours préférable de travailler avec un objet défini plutôt que celui supposé être actif !
    Open se produit avant Activate !
    Même avec ThisWorkbook, il a un problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If ActiveWorkbook.Name = "mon fichier.csv" Then

  9. #9
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Bonjour,


    Peux-tu nous expliquer pourquoi tu utilises ActiveWorkbook plutôt que ThisWorkbook ?
    Il est toujours préférable de travailler avec un objet défini plutôt que celui supposé être actif !
    Open se produit avant Activate !
    Bonjour,
    lorsque je fais un msgbox thisworkbook il me dit "Personal.xlsb.

    Quand je fais ActiveWorkbook.name il me retourne le nom du fichier : monfichier.csv.


    Ce n’est pas vraiment cela clementmarcotte, en fait, je vais résumé le contexte.

    j'ai mon fichier excel matrice.csv qui est généré à partir de mon batch, il est enregistré dans un répertoire. Je l'ai ouvert puis j'ai créé une macro qui va lancer un traitement. initialement mon fichier excel possède une feuille de calcul et une fois que j'ai cliqué dans ma macro, il en aura 8, chacune avec des données différentes.

    Donc ma macro se lance à partir de l'onglet " mes macros " du ruban, jusque là rien de compliqué.
    Ma macro n'est alors disponible que sur mon ordi et pour mes fichiers excel à moi. Pour la rendre disponible à d'autres personne, j'ai suivi une procédure pour créé un répertoire où mes macros seront enregistré : pour cela j'ai fais "enregistrer une macro " et j'ai sélectionné " classeur de macros personnelles".

    Le dit fichier précédemment cité va être réceptionné par une autre personne pour l'ouvrir et vérifier les données. Donc quand cette personne va l'ouvrir, le principe est que la macro se lance automatiquement et que les feuilles se généère automatiquement. Donc dès qu'elle ouvre monfichier.csv, ouf et pouf, la macro se lance qu'une fois et les 8 feuilles apparaissent.
    Seulement et bien évidemment, elle utilise d'autres fichiers excel pour faire d'autre traitement, et j'aimerais que la mcro se lance seulement pour ce ficier spécifique et qu'une seul fois, est ce que ça vous parait plus clair ?

    merci à vous

  10. #10
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    En fait, quand j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Workbook_Open()
     
    MsgBox ActiveWorkbook.Name
     
    End Sub
    lorsque je clique sur mon fichier excel, il s'ouvre en erreur, puis si j'execute le code une fois ouvert là ça marche, c'est là que ça bloque.
    Donc j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Activate()
    MsgBox "mauvais fichier"
    End Sub
    mais il ne m'affiche aucune popup, donc en gros je dois tester si c'est le bon fichier pour executer la macro

  11. #11
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par android59 Voir le message
    Bonjour,
    lorsque je fais un msgbox thisworkbook il me dit "Personal.xlsb.
    C'est normal, l'évènement Workbook_Open n'est déclenché que par l'ouverture du classeur (Thisworkbook) qui contient la macro (i.e. Personal.xlsb) !
    Pour détecter l'ouverture d'un autre fichier, il faut utiliser un évènement du niveau Application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
    Private WithEvents XLApp As Excel.Application   'Pour utiliser localement les événements de l'application
    Private Sub XLApp_WorkbookOpen(ByVal Wb As Workbook)
      'Traitement ouverture d'un classeur autre que celui qui contient la macro
    End Sub

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par android59 Voir le message
    Bonjour,
    l

    Le dit fichier précédemment cité va être réceptionné par une autre personne pour l'ouvrir et vérifier les données. Donc quand cette personne va l'ouvrir, le principe est que la macro se lance automatiquement et que les feuilles se généère automatiquement. Donc dès qu'elle ouvre monfichier.csv, ouf et pouf, la macro se lance qu'une fois et les 8 feuilles apparaissent.
    Seulement et bien évidemment, elle utilise d'autres fichiers excel pour faire d'autre traitement, et j'aimerais que la mcro se lance seulement pour ce ficier spécifique et qu'une seul fois, est ce que ça vous parait plus clair ?

    merci à vous
    Justement. Pour que la macro puisse se lancer automatiquement, il faut modifier la configuration d'Excel et une signature électronique de la macro. Parce que si la configuration d'Excel est ai plus restreint la macro ne se lancera jamais.

Discussions similaires

  1. [Excel 2013] : Exécuter une macro chaque sur un fichier qui change
    Par Startinov dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/11/2017, 17h58
  2. Execution d'une macro sans ouverture du fichier
    Par mhamedbj dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/12/2007, 11h02
  3. Exécuter une macro à l'ouverture du classeur
    Par illight dans le forum Contribuez
    Réponses: 2
    Dernier message: 22/06/2007, 12h24
  4. [VBA-E] une macro qui enregistre mon fichier Excel
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/03/2007, 11h47
  5. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20

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