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 :

Ouvrir un fichier xlsm avec VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 38
    Points : 30
    Points
    30
    Par défaut Ouvrir un fichier xlsm avec VBA
    Bonjour à tous,

    j'essaie d 'ouvrir un fichier XLSM via une macro sous VBA.
    Mon problème est que lorsque le fichier s'ouvre la macro veux lancer la macro du fichier ouvert alors que ce n'est pas mon souhait ( la macro ne se trouve pas dans workbooks open mais dans un module VBA)
    et j'ai ce souci avec les 2 commandes suivantes:
    • Workbooks.Open Filename:= x
    • Set test = Application.Workbooks.Open(X)



    merci d'avance pour vos conseils

    cordialement

  2. #2
    Membre habitué
    Homme Profil pro
    Employé administratif
    Inscrit en
    mars 2018
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : mars 2018
    Messages : 85
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    J'ai trouvé ce bout de code sur le net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ouvrir_sans_macro()
    Application.EnableEvents = False
    Workbooks.Open "Répertoire\Nom du fichier"
    Application.EnableEvents = True
    End Sub
    Je ne l'ai pas testé, j'espère que ça fera ce que tu recherches. Tiens-nous au courant.

    Bien cordialement,

  3. #3
    Nouveau membre du Club
    Inscrit en
    janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    merci pour l'aide mais ça ne fonctionne pas j'ai toujours la macro sur le fichier à ouvrir qui se lance

    autant pour moi ça ne fonctionne pas en pas à pas mais ça fonctionne lorsque je lance la macro en autonome.

    merci beaucoup

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 259
    Points : 4 959
    Points
    4 959
    Par défaut
    Bonjour,

    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim mas As MsoAutomationSecurity
     
      mas = Application.AutomationSecurity
      Application.AutomationSecurity = msoAutomationSecurityForceDisable
      Set wbk = Workbooks.Open(nom)
      Application.AutomationSecurity = mas
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    16 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 16 604
    Points : 47 789
    Points
    47 789
    Billets dans le blog
    88
    Par défaut
    Salut.

    Perso, j'ajouterais une gestion d'erreur aux codes proposés pour éviter les problèmes si l'ouverture se passe mal. Je préfère le code de Patrice car avec le Application.EnableEvents = True en fin de parcours, on remet peut-être une propriété à True au mauvais moment.

    • Un code ne devrait jamais modifier durablement une propriété d'application s'il n'est pas explicitement prévu pour.
    • Il faut toujours prévoir une gestion d'erreur lorsque l'on modifie les propriétés de l'application pour être certain de sortir proprement en remettant tout en ordre avant.
    • Il faut toujours prévoir une gestion d'erreur lorsque l'on manipule des fichiers, notamment lorsque l'on essaie d'ouvrir un classeur.



    Sur le modèle du code de Patrice, on pourrait passer par un On Error Goto Catch à la place du Resume Next en fonction de l'architecture du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TestOpen()
      Dim mas As MsoAutomationSecurity
     
      On Error Resume Next
      mas = Application.AutomationSecurity
      Application.AutomationSecurity = msoAutomationSecurityForceDisable
      Set wbk = Workbooks.Open(nom)
      If Err = 0 Then
        '...
        '...
      End If
      Application.AutomationSecurity = mas
    End Sub

    Perso, j'aime bien une fonction qui renvoie le workbook et qui encapsule ces notions. De cette manière, on utilise du code que l'on peut tester isolément du reste. [Edit] Merci Patrice pour la correction de la coquille

    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
    20
    21
    22
    23
    24
    25
    26
    Function GetWorkbook(Filename, Optional ActivateWb As Boolean, Optional DisableEvents As Boolean) As Workbook
      Dim AppEnableEvents As Boolean
      Dim wb As Workbook
     
      Set wb = ActiveWorkbook
      On Error GoTo Catch
      AppEnableEvents = Application.EnableEvents
      Application.EnableEvents = Not DisableEvents
      Set GetWorkbook = Workbooks.Open(Filename)
      If Not ActivateWb Then wb.Activate
     
    Catch:
      Set wb = Nothing
      Application.EnableEvents = AppEnableEvents
    End Function
     
    Sub TestOpen()
      Dim wb As Workbook
     
      Set wb = GetWorkbook("c:\data\temp\testopen.xlsm", True)
      If Not wb Is Nothing Then
        MsgBox "Fichier ouvert"
      Else
        MsgBox "Problème à l'ouverture"
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Ouvrir un fichier excel avec vba
    Par Lardon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/07/2019, 14h52
  2. Réponses: 5
    Dernier message: 02/05/2018, 15h30
  3. [XL-2003] Pouvoir ouvrir des fichiers excel avec vba sans le faire planter
    Par perpitou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/12/2011, 16h52
  4. Ouvrir differents fichiers Word avec VBA
    Par karina218 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2007, 11h10
  5. Ouvrir un fichier word avec VBA Access
    Par alainb dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/10/2007, 22h57

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