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 :

Ne pas activer macro Workbook_open d'un fichier ouvert depuis un autre avec CreateObj [Trucs & Astuces]


Sujet :

Macros et VBA Excel

  1. #21
    Membre éprouvé Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Points : 1 001
    Points
    1 001
    Par défaut
    Salut Currahee,

    J'ai regardé, ça à l'air de ressembler à ce qu'ils ont écrit plus haut, mais j'ai pas creusé :o)

    Sinon j'ai trouvé un truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:=nom, ReadOnly:=True, Notify:=False, UpdateLinks:=0, CorruptLoad:=xlExtractData
    en gras l'option qui ouvre le classeur en mode "Récupération de Données" dans le cas d'un fichier endomagé, une sorte de "démarrage sans échec" qui ne charge que la collection des Cells(i,j).value donc pas les données VBA donc pas le Workbook_Open...

  2. #22
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 39
    Points
    39
    Par défaut
    Bonjour,
    Si j'ai bien compris le pb, le workbook.open ne doit pas s'exécuter si le fichier est ouvert pr la macro d'un autre fichier.
    Donc,
    dans tes macros Workbook.open, ajour le code pour vérifier si ledit fichier est ouvert. Si oui, termine la macro Workbook.open

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each WB In Workbooks
      If WB.FullName = "fichierxx" Then
       GoTo suiteducode
       Exit For
      End If
    Next WB
    suiteducode

    bonne soirée

  3. #23
    Membre éprouvé Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Points : 1 001
    Points
    1 001
    Par défaut
    Citation Envoyé par frolland46 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each WB In Workbooks
      If WB.FullName = "fichierxx" Then
       GoTo suiteducode
       Exit For '<--- pas besoin
      End If
    Next WB
    suiteducode '<--- manque les ":" pour signaler que c'est un label, sinon il chechera une procédure
    quoi qu'il arrive la suite du code sera exécutée, si il trouve le fichier ouvert il sort du for, si il le trouve pas il sort du for donc c'est pareil.

    le code pour faire ce que tu décris c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each WB In Workbooks
      If WB.FullName = "fichierxx" Then
       GoTo suiteducode
       Exit For
      End If
    Next WB
    exit sub '(ou function au choix)
    suiteducode:
    perso j'aime pas trop les GoTo...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each WB In Workbooks
      If WB.FullName = "fichierxx" Then Exit Sub'(ou Function au choix)
    Next WB
    ...'le code normal du Workbook
    de plus:
    Citation Envoyé par LentilleLocale Voir le message
    Merci Didier mais les fichiers liés ne sont pas de moi
    Je ne peux donc remplacer les Workbook_open par des Auto_open n'en étant pas maître
    ...
    merci pour l'idée

  4. #24
    Membre éprouvé Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Points : 1 001
    Points
    1 001
    Par défaut
    Citation Envoyé par LentilleLocale Voir le message
    ... en utilisant le modèle ADO

    La commande que j'utilise CreateObject("Excel.Application").Workbooks.Open ...
    je suis entrain de modifier mon projet pour passer par ADO car il me semble que c'est beaucoup plus rapide que CreatObject, et en plus tu ouvres quand même le classeur puisque tu utilises la fonction Open, même si ce n'est pas visible lors de l'execution. Et en plus c'est pas si compliqué que ça par ADO... moi j'y connais absolument rien en bases de données et j'ai compris comment ça marche (grâce au lien de Ouskel). A toi de voire.


    +
    Rag

  5. #25
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par LentilleLocale Voir le message
    1) Le code 1 avec CreateObject (Temps de traitement 1 minute 15 pour 4 fichiers lus) : le code des fichiers lus est exécuté (workbook_open et workbook_before close)


    2) Le code 2 avec Set Wk ( (Temps de traitement 5 minutes 12 pour 4 fichiers lus) : le code des fichiers lus n' est pas exécuté (ce que je souhaite)
    Cependant le traitement est 5 fois plus long que par CreateObject



    3) et le code contenu dans chaque Fichier appelé dans ThisWorbook et que je ne veux pas voir s'exécuter lors de l'appel depuis le fichier de synthèse (hors, à mon gd désespoir, le userform se lance dans le 1er code à l'ouverture et, lors de la fermeture du fichier, on tombe en erreur car je n'ai pas Hyperion installé chez moi contrairement au bureau (ESSEXCLN.xll Erreur 53)


    En résumé :
    1) comment optimiser le temps d'exécution du 2ème code (5 fois plus lent que le 1er code mais n'exécute pas, comme souahité, les macros des fichiers appelés) --> Peut-être en forçant l'exécution dans une 2ème instance d'Excel ?
    2) comment empêcher l'exécution des macros à l'ouverture et à la fermeture des fichiers appelés pour le 1er code (qui est 5 fois plus rapide que le 1er)

    Avec le code 3, ouvrant une 2ème instance excel, j'obtiens une performance identique au 1er code mais les macro se lancent encore malgré le xlApp.EnableEvents = False
    Mais pourquoi donc ????
    Salut,
    Je pense que si tu utilises 2 instances tu dois mettre un EnableEvents = False
    dans les deux donc tu dois ajouter
    application.EnableEvents = False avant de créer ta 2ème instance.

    Pour ce qui est de la lenteur ajoute Application.ScreenUpdating = False et tes codes devraient mettre le même temps.

  6. #26
    Membre éprouvé Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Points : 1 001
    Points
    1 001
    Par défaut
    HS... Désolé pour mon incohérence habituelle...

  7. #27
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Je ne cherche pas à comparer avec ADO mais juste à déboguer son code.

    Pour moi
    Set xlApp = New Excel.Application et Set XlApp = CreateObject("Excel.Application")
    c'est pareil sauf que pour le premier il faut référencer Excel.

    La différence avec une nouvelle instance c'est donc que celle-ci n'est pas visible comme quelqu'un le faisait remarquer, donc à mon avis ca doit accélerer le code 2.
    http://xcell05.free.fr/pages/prog/accvba.htm

  8. #28
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543

  9. #29
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    C'est ça les long post ouskel'n'or , on ne retient pas tout ;-))

  10. #30
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Et si, dans le code suivant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim XlApp as Object
        Set XlApp = CreateObject("Excel.Application")
        XlApp.EnableEvents = False   ' devrait normalement empêcher le lancement de la macro du fichier appelé
        With XlApp.Workbooks.Open(RepertoireSource & Fichier)
    c'était simplement une question de paramètre non reconnu ? (False)
    As-tu testé avec
    Sait-on jamais (?!?) Je testerais.
    Mon idée ? Quand on utilise une instance de Word, les paramètres de Word ne sont pas reconnus et doivent être remplacés par leurs valeurs (tout au moins en déclarant WdApp as Object). Je sais que False est reconnu partout mais sait-on jamais...
    A tout hasard, vraiment ! Et à vrai dire je n'y crois pas

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/06/2015, 15h37
  2. appeler la fonction d'un fichier js depuis un autre fichier
    Par kohsaka dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/09/2007, 18h49
  3. Activer Macro automatiquement sur un fichier
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/08/2007, 06h28
  4. Réponses: 13
    Dernier message: 18/04/2007, 09h49
  5. [VBA][Office 2003] Fichier ouvert depuis IE ou Word?
    Par nbaudraz dans le forum VBA Word
    Réponses: 2
    Dernier message: 12/10/2005, 14h27

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