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

Access Discussion :

Créer Macro dans fichier Excel généré par Access [AC-2010]


Sujet :

Access

  1. #1
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut Créer Macro dans fichier Excel généré par Access
    Bonjour

    A partir d'une base Access je génère un fichier Excel.
    Pas de problèmes pour créer les feuilles, les entêtes et pieds de page, transférer les données... et créer un bouton.

    Mais comment créer la macro dans le fichier Excel qui sera exécutée par ce bouton ?

    Merci pour votre aide.
    Un problème bien posé est à moitié résolu

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    On peut mais c'est assez compliqué.
    Il faut allez jouer dans les objets du VBE et parfois certaines sécurité t'en empêchent.

    Je te suggère 2 alternatives :
    1. Écrire et faire exécuter ta macro dans le code Access.
    2. Développer ta macro dans Excel, et faire une fichier modèle que tu recopies et que tu enrichis avec tes données à chaque traitement.
      Une fois la copie de ton modèle complétée, tu ouvres l'ouvres et tu exécutes la macro Excel avec la commande call AppExcel.Run("NomMacro") où AppExcel est l'instance de Excel créée par Access.
      Personnellement c'est ce que je fais. Cela me permet de bien séparer la partie Excel de celle Access.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Quelques précisions supplémentaires :

    La base Access est diffusée à des utilisateurs "lambda".
    L'utilisateur de cette base a la possibilité, suivant des paramètres qu'il choisit, de générer (par un bouton) le fichier Excel en question.
    Ce fichier Excel doit être autonome pour être utilisé par d'autres personnes non munies de la base Access.

    Ma question est donc : comment, au moment de la génération du Excel, écrire un module dans celui-ci ?
    (Module qui s'exécutera à l'appui du bouton créé dans le fichier Excel)
    Un problème bien posé est à moitié résolu

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Inserting a module into a new workbook using VBA
    https://stackoverflow.com/questions/...book-using-vba

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Désolé, mais ce code n'est pas directement utilisable (déclarations oubliés, manque d'explication...),.

    Mais je "tourne autour du pot" !
    En effet, mes nombreuses recherches sur différents forums m’amènent toujours à une ligne de code plus ou moins équivalente , mais qui bloque : l'avant-dernière ci-dessous qui devrait créer le module dans Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim xlApp As Variant, xlBook As Variant, xlSheet As Variant
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open("CheminCompletXLS")
        Set xlSheet = xlBook.Worksheets("NomFeuille")
    ...
        LignesCode = ...
    ...
        xlBook.VBProject.VBComponents.Add(1).Name = "NomModule"
        xlBook.VBProject.VBComponents("NomModule").CodeModule.AddFromString LignesCode
    Erreur, oubli, impossibilité ? J'avoue ne plus avoir d'idée.

    Merci d'avance si vous en avez une.
    Un problème bien posé est à moitié résolu

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    y a-t-il un message d'erreur ?
    sinon il est question d'ajouter les références pour : Microsoft Visual Basic For Applications Extensibility 5.3
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Pas de message d'erreur.
    Microsoft Visual Basic For Applications Extensibility 5.3 bien installé.
    Un problème bien posé est à moitié résolu

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    est-ce référencé dans Excel : xlBook.VBProject.VBComponents ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    est-ce référencé dans Excel : xlBook.VBProject.VBComponents ?
    Désolé, mais je ne comprends pas.

    Rappel sur mes explications précédentes : le code problématique est exécuté dans Access au moment où il crée le fichier Excel.
    Un problème bien posé est à moitié résolu

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Rappel sur mes explications précédentes : le code problématique est exécuté dans Access au moment où il crée le fichier Excel.
    Oui, mais le code faisant appel à xlBook.VBProject.VBComponents et xlBook étant un objet de l'application xlApp, donc Excel, il faut à mon avis ajouter la référence dans Excel
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Ok s'il faut la rajouter dans le fichier Excel.
    Mais il faut le faire en VBA à partir d'Access au moment de la génération de ce fichier. Comment ?

    Rappel : le fichier est généré directement à partir d'une base Access fournie à un utilisateur 'lambda'.
    Un problème bien posé est à moitié résolu

  12. #12
    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 594
    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 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Salut,

    pour les references dans Excel, tu as ceci pour te faire avancer

    http://silkyroad.developpez.com/VBA/...Editor/#LIII-A

    Tout ce que tu demandes est simple a faire, mais c'est un peu long, donc toutes les etapes seront a coder, plutot que d'avoir un fichier deja pret, mais on va y arriver =]
    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

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Ceci dit, j'ai essayé de suivre le tutoriel et j'ai un message d'erreur 1004 rien qu'en lançant cette instruction dans la fenêtre d'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? msgbox(Application.VBE.Version)
    et j'ai bien la référence cochée. Cela ne va pas être si simple que cela ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  14. #14
    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 594
    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 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Tigre, la ligne en question, tu la lances depuis Access ou Excel ?

    Si tu tentes depuis Access il te faut passer par xlApp au lieu d'Application

    Sous Excel j'obtiens par contre la valeur 7.00 par exemple
    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

  15. #15
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonjour le forum.

    le code suivant marche:
    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
    27
    28
    29
    30
    Dim CheminCompletXLS As String   ',LignesCode As String
        Dim xlApp As Variant, xlBook As Variant, xlSheet As Variant
        Dim proj As VBIDE.VBProject
        Dim comp As VBIDE.VBComponent
        Dim CodeMod As Object
        Dim LineNum As Integer
     
        Set xlApp = CreateObject("Excel.Application")
     
        CheminCompletXLS = CurrentProject.Path & "\" & "MonFichier.xlsm"
        Set xlBook = xlApp.Workbooks.Open(CheminCompletXLS)
        Set xlSheet = xlBook.Worksheets("Feuil1")
     
        Set proj = xlBook.VBProject
        Set comp = xlBook.VBProject.VBComponents.Add(vbext_ct_StdModule)    'module standart
        comp.Name = "MyNewModule"
     
        Set CodeMod = comp.CodeModule
     
        With CodeMod
            LineNum = .CountOfLines + 1
            .InsertLines LineNum, "Public Sub ANewSub()"
            LineNum = LineNum + 1
            .InsertLines LineNum, "  MsgBox " & """" & "I added a module!" & """"
            LineNum = LineNum + 1
            .InsertLines LineNum, "End Sub"
        End With
     
        xlBook.Close
        Set xlApp = Nothing
    par contre, vouloir ajouter tous un bloc de code en une seul fois me semble assez périlleux !
    Cdlt

  16. #16
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    @ Jean-Philippe, j'ai essayé depuis Excel bien sûr et ce pour obtenir le nom de la référence "Microsoft Visual Basic For Applications Extensibility 5.3" et essayer de la créer depuis Access.

    @ Thierry_PALLIER :
    bonjour Thierry,
    je cherchai en premier lieu à créer la référence VBE 5.3 pour Excel depuis Access pour poster la méthode et ce, en essayant le tutoriel de sylkroad mais sans succès d'où mon dernier message.
    Cette référence semble nécessaire pour créer du code Excel depuis Access.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  17. #17
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour à tous

    Comme proposé, je suis allé lire les versions de VB : sur Access c'est 7, et sur Excel impossible.

    L'erreur 1004 signalée par tee_grandbois m'a fait penser que je faisais mes essais sur un code qui est en service sans problème par ailleurs, mais dont j'avais mis SetWarnings à False !
    Mille excuses !

    Le code de SilkyRoad proposé par Jean-Philippe et Thierry ne passe pas. Je m'en étais déjà fortement inspiré.

    J'ai donc repris mes différents essais qui donnent tous une erreur '-2147319780 la méthode VBE de... a échoué' avec '(8002801c)' en plus lors du débogage.
    Si cela vous dit...
    Un problème bien posé est à moitié résolu

  18. #18
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Peut-être une piste...

    N'ayant pas utilisé les macros sous Excel depuis un certain nombre d'années, et c'était pour mon entreprise, je viens d'avoir l'idée lumineuse d'aller voir sur mon Excel 97.
    Ô surprise !

    Quand je fais Outils/macros, rien ne se passe quand je choisis VBE et j'ai le message 'enregistrement impossible' quand je veux enregistrer une macro.
    Il y a donc un problème de VBE. (absent ?)
    J'ai repris l'installation à partir du CD, mais je n'ai rien vu en relation avec VBE.
    A noter que je suis sous Windows 10 sur mon nouveau PC.

    Les PC du boulot devaient être encore sous XP et je suis sûr d'avoir codé sous Excel 97 puisque je le faisais souvent à la maison.

    La cause première n'est donc pas dans le code.

    Une idée ?
    Un problème bien posé est à moitié résolu

  19. #19
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    @ tee_grandbois
    sur le site "Code Project" ,https://www.codeproject.com/Articles...BA-Code-Module :

    "The Visual Basic Editor is an interface which is used to used to create, modify, and maintain Visual Basic for Applications objects. The majority of Microsoft Office applications include a built-in VBE interface which is used to access the underlying Microsoft Visual Basic for Applications Extensibility library (VBIDE). The interface is VBE, its implementation is VBIDE, and the code is VBA.

    At runtime, an instance of VBIDE is automatically made available through the VBE property of the Application object. Additional type libraries are not required to use the property or the interface it exposes. The only requirement being that the target Office application supports the interface.

    As a result, this project does not early bind to the extensibility type library. All extensibility objects are dimensioned as Object and any required constants have been manually re-created in the module included with this article."

    A la dernière ligne ,il n'y aurais donc pas de référence à ajouter.

    @ titi95 ,il faut un fichier .xlsm . La manip marche pour un xls, mais ne poura pas etre enregistré avec cette extension.
    L'exemple que j'ai posté : win 10, office 2007
    Cdlt

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Merci des renseignements Thierry mais je n'ai rien inventé je n'ai fait que suivre le tutoriel ... http://silkyroad.developpez.com/VBA/...asicEditor/#LI
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [AC-2007] Importer un fichier excel généré par une application intranet
    Par Debutant10 dans le forum VBA Access
    Réponses: 23
    Dernier message: 13/09/2016, 20h34
  2. Réponses: 2
    Dernier message: 11/09/2008, 13h49
  3. Rechercher une valeur dans fichier Excel depuis VBA Access
    Par tribaleur dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/07/2008, 14h10
  4. Réponses: 1
    Dernier message: 26/03/2008, 14h44
  5. Réponses: 7
    Dernier message: 23/01/2008, 13h02

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