Lancer un modèle excel depuis access

thg -  
 thg -
Bonjour,

Je lance une macro depuis access avec exécuter une application;
dans la ligne de commande je donne le chemin excel.exe puis espace avec le chemin du modèle modèle .xltm qui doit me permetttre de créer un nouveau classeur.

PROBLEME: j'obtiens l'ouverture du modèle lui-même mais non pas la création d'un nouveau document issu de ce modèle.

Ligne de commande utilisée:
"C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" C:\Users\utilisateur\Desktop\AdlatusMandats\AttributionMandatAdlatus2.xltm

Merci pour votre aide.
th. godel

22 réponses

  • 1
  • 2
  1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Au passage, l'extension du fichier: AttributionMandatAdlatus2.xltm
    devrait-être xlsm ou xlsx ...!
    0
    1. thg
       
      Merci. Mais ça ne résout rien...
      Je veux partir d'un modèle qui crée un nouveau document. D'ailleurs j'obtiens ça si je lance le fichier modèle directement; mais pas à travers access.
      thg
      0
  2. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Pouvez-vous mettre une copie de la procédure utilisée?
    0
  3. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Dans l'ordre d'ouverture du classeur il devrait être
     .... Workbooks.Add (adrexcel)
    au lieu de
     ... Workbooks.Open(adrexcel)

    Salutations.
    Le Pingou
    0
  4. thg
     
    Bonjour,

    J'utilise les macros (prédéfinies) d'access avec un choix d'actions possibles:
    - je choisis "exécuter application" (qui n'est disponible que si on demande d'afficher toutes les actions)
    - ensuite j'ai une ligne de commande que je remplis avec
    "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" C:\Users\utilisateur\Desktop\AdlatusMandats\AttributionMandatAdlatus2.xltm

    soit commande lancement excel, puis commande ouverture fichier.

    Si j'utilise cette ouverture fichier dans le répertoire où il se trouve, j'obtiens un nouveau document avec nom du modèle initial +chiffre1 + xlsx losque je vais l'enregistrer (comme le ferait un modèle word avec document1, ou document2...)

    avec le lancement via access j'obtiens l'ouverture du modèle, sous son nom (comme si j'ouvrais un modele.dot dans word).

    comme ma commande dans access n'est pas issue de code VB, j'aimerais trouver la commande qui précise que je veux créer un nouveau doc et s'inclut dans la ligne donnée plus haut avec ouv. access + ouverture fichier

    ou alors une ligne de code entière qui remplace complètement ma macro...

    BUT: lancer un classeur excel qui utilise avec mise à jour les éléments que j'ai préparé dans access et figure dans une table créée et mise à jour à cet effet.

    merci.
    thg
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci pour l'information, donc pas de VBA.
    Quelle version Access et Excel ?
    Pouvez-vous faire une copie d'écran de la macro en mode création ?
    Merci.
    Salutations.
    Le Pingou
    0
  7. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Un exemple de procédure pour enregistrer des données Access vers Excel :
    Sub EngVersExcel_ouvre_classeur()
    Dim cdb As DAO.Database
    Dim rstcha As DAO.Recordset
    Dim strSQL As String
    Dim xlapp As Excel.Application
    Dim chemin As String
    
    chemin = "C:\Users\utilisateur\Desktop\AdlatusMandats "    
    repclasseur = chemin & "\AttributionMandatAdlatus2.xltm "
    Set xlapp = CreateObject("Excel.Application")
    
    ' partie lire data access
    Set cdb = CurrentDb
    strSQL = "SELECT * FROM T_InitialisationAnnees" & _
    " WHERE T_InitialisationAnnees.Identification = " & Chr(34) & Form_F_InitConge.Matricule & Chr(34)
    Set rstcha = cdb.OpenRecordset(strSQL)
    Dim c As Byte
    
    'partie Excel
    With xlapp
        .Workbooks.Add repclasseur    
        .Visible = True
        .Range("A2:C15").Delete
       'Tant que non fin du recordset
        While Not rstcha.EOF
          'Passer au suivant
            .Range("A" & 2 + c) = rstcha.Fields(0)
            .Range("B" & 2 + c) = rstcha.Fields(1)
            .Range("C" & 2 + c) = rstcha.Fields(2)
            rstcha.MoveNext
            c = c + 1
        Wend
    End With
    
    Set cdb = Nothing
    Set rstcha = Nothing
    Set exapp = Nothing
    
    End Sub
    --
    Salutations.
    Le Pingou
    0
  8. thg
     
    version: Office 2007.

    Copie écran?
    Comment je la joins?? Où je l'envoie?
    0
  9. thg
     
    OK.
    Voici la copie écran
    http://www.cijoint.fr/cjlink.php?file=cj201103/cijy0acUca.doc

    Merci
    Cordialement
    0
  10. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci pour les informations.
    Je vous propose de faire comme suit (je l'ai testé sans marche):
    Placer la procédure dans un module et vous la déclencher depuis un bouton de commande (par événement sur clic) :
    Sub OuvrirClasseurSelonModele()
        Dim Xl As Excel.Application
        Dim Classeur As Excel.Workbook
        Dim Feuille As Excel.Worksheet
     
        'Ouvre un nouveau classeur selon modèle
        Set Xl = New Excel.Application
        Xl.Visible = True
        chemin = "C:\Users\utilisateur\Desktop\AdlatusMandats "
        repclasseur = chemin & "\AttributionMandatAdlatus2.xltm "
        Set Classeur = Xl.Workbooks.Add(repclasseur)
        Classeur.Worksheets("Feuil3").Activate
        Set Feuille = Classeur.Worksheets("Feuil3")
     End Sub
    --
    Salutations.
    Le Pingou
    0
  11. thg
     
    Merci pour les lignes de code.
    Mais j'obtiens message d'erreur:

    Erreur compilation
    Type défini par utilisateur non défini.

    copie écran
    http://www.cijoint.fr/cjlink.php?file=cj201103/cij3ilhp0Q.jpg
    0
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Bonjour,
      Il manque une référence, ouvrir l'éditeur VBA (touche Alt+F11), clic Outils puis clic Références.
      Dans la liste, chercher la référence : Microsoft Excel 12.0 Object Library et cocher la case, clic OK pour terminer.
      Salutations.
      Le Pingou
      0
  12. thg
     
    Merci. Franchi une étape mais problème avec la propriété Add
    Désolé...

    ecran1
    http://www.cijoint.fr/cjlink.php?file=cj201103/cijCEheAQ2.jpg

    ecran2
    http://www.cijoint.fr/cjlink.php?file=cj201103/cijwNvmTDM.jpg

    Salutations.
    thg
    0
  13. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Je suis vraiment désolé, j'ai laissé trainer un espace dans la ligne de code
    chemin = "C:\Users\utilisateur\Desktop\AdlatusMandats "
    juste à la fin, supprimer l'espace entre [S] et ["]
    Pendant qu'on y est faite de même à la ligne suivante entre [.xltm] et ["]
    0
  14. thg
     
    Bonjour,
    Désolé pour le manque de suivi immédiat...

    Merveilleux, ça fonctionne.

    2 détails :

    - petit bog qui réclame à propos d'un indice (?)
    copie EcranA
    http://www.cijoint.fr/cjlink.php?file=cj201103/cijOeaVLIU.jpg
    copie Ecran B
    http://www.cijoint.fr/cjlink.php?file=cj201103/cijzGS0H0J.jpg

    - 2e point: je n'obtiens plus immédiatement la mise à jour des données liées ; je dois effectuer la commande excel "données", "actualiser tout".
    Peut-on - encore... - l'intégrer en fin de code ???

    Avec mes remerciements pour votre patience.
    thg
    0
  15. thg
     
    Trouvé l'erreur indice
    Il s'agit du nom de la feuille3 qui a en fait été renommée "Saisie".
    Et ça joue.

    Merci beaucoup.

    Toujours preneur d'une ligne pour:
    données, actualiser tout

    thg
    0
  16. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci pour l'information.
    Ma proposition ne comporte que l'ouverture du classeur selon le modèle.
    Vous avez certainement une instruction qui exporte les données d'Access vers Excel qu'il faut aussi exécuter.
    De l'aide par là : https://cafeine.developpez.com/access/tutoriel/excel/
    Salutations.
    Le Pingou
    0
  17. thg
     
    Bonsoir,

    En fait ma liaison est résolue.

    J'ai une requête création de table dans Access et mon fichier modèle dans excel conserve la table importée dans une feuille du classeur .

    Il suffit de faire la mise à jour du classeur excel pour retrouver les données de la table recréée dans access avec les dernières données

    D'où la seule opération à faire manuellement qui subsiste après lancement du fchier excel:
    clic sur données, clic sur actualiser tout.

    Et ... l'espoir d'ajouter une ligne de code qui effectue cette opération après l'ouverture de mon fichier-modèle excel.

    De toute manière merci beaucoup pour votre aide.
    thg
    0
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Bonjour,
      Question concernant ceci : Et ... l'espoir d'ajouter une ligne de code qui effectue cette opération après l'ouverture de mon fichier-modèle Excel.
      Est-ce que la liaison existe dans le fichier modèle... ? J'ai des doutes ?
      Salutations.
      Le Pingou
      0
  18. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Si tu te mets en enregistrement de macro après avoir sélectionné une cellule du TCD tu obtiens :
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh

    eric
    0
  19. thg
     
    Bonsoir,

    Je n'ai pas un tableau croisé.
    J'ai un tableau tout simple d'une dizaine de ligne et une vingtaine de colonnes (champs access).
    Il est défini comme tableau dans une feuille excel et conserve la liaison avec la table access.
    Mais il faut demander "actualiser tout" via "le menu données pour la mise à jour dans excel

    Je cherche la ligne qui "refresh" le classeur excel (pas un tableau croisé dyn.)

    thg
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Oupsss, j'ai lu un peu trop en diagonale, désolé.
      Et en le faisant manuellement avec l'enregistreur de macro en route tu n'obtiens rien ?
      eric
      0
    2. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Bonjour eriiic,
      Juste comme information selon se que j'ai compris, sous Excel il suffit de créer une connexion vers Access et la table à l'aide de l'outil Données externes.
      Pas besoins de macro.
      Amicales salutations.
      Le Pingou
      0
  20. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour thg,
    C'est vraiment étrange, à vous lire vous avez les données qui se trouvent dans une table et un classeur Excel qui à une liaison avec cette table. Donc vous devez uniquement actualiser le classeur pour avoir les données à jour. En principe pas besoin de procédure.
    Au passage,salutations eriiic
    0
  21. thg
     
    Bonjour,

    Tout fonctionnait (fonctionne) sans souci.
    Table access, fichier excel avec liaison, création d'un modèle sur ce fichier qui conserve ses liaisons et les met à jour à chaque ouverture.

    Seul désir initial:
    créer un événement (procédure ou macro) sur mise à jour dans access qui lance excel et effectue toutes les opérations sans intervenir.
    De façon à ce que l'utilisateur crée d'office un nouveau fichier (donc ne détruise pas le modèle)
    (Ca permet de créer un décompte/facturation excel assez complexe à partir des données clients et employés de la base access; et l'utilisateur travaille a priori dans access et non dans excel)

    au départ de la discussion, j'imaginais trouver une ligne de commande particulière dans la macro access qui lance un modèle excel en tant que nouveau document (au lieu d'ouvrir le modèle);

    au point actuel, j'ai une procédure qui le fait mais ne met pas à jour la liaison du classeur excel sans une intervention (minime) pour obtenir mon décompte/facturation complet immédiatement avec les données voulues.

    thg
    0
  • 1
  • 2