Lancer un modèle excel depuis access

Fermé
thg - 15 mars 2011 à 13:53
 thg - 19 mars 2011 à 11:46
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



A voir également:

22 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
15 mars 2011 à 17:06
Bonjour,
Au passage, l'extension du fichier: AttributionMandatAdlatus2.xltm
devrait-être xlsm ou xlsx ...!
0
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
15 mars 2011 à 21:21
Bonjour,
Pouvez-vous mettre une copie de la procédure utilisée?
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 15/03/2011 à 22:53
Bonjour,
Dans l'ordre d'ouverture du classeur il devrait être
 .... Workbooks.Add (adrexcel)
au lieu de
 ... Workbooks.Open(adrexcel)

Salutations.
Le Pingou
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 16/03/2011 à 10:04
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 mars 2011 à 10:33
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
version: Office 2007.

Copie écran?
Comment je la joins?? Où je l'envoie?
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 mars 2011 à 15:05
Bonjour,
Via https://www.cjoint.com/ ou http://www.cijoint.fr/ et poster le lien.
Salutations.
Le Pingou
0
OK.
Voici la copie écran
http://www.cijoint.fr/cjlink.php?file=cj201103/cijy0acUca.doc

Merci
Cordialement
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 mars 2011 à 22:13
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
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
17 mars 2011 à 14:20
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
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
17 mars 2011 à 21:02
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
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
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 18/03/2011 à 14:30
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
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
18 mars 2011 à 21:47
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
18 mars 2011 à 18:46
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
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
18 mars 2011 à 19:48
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
18 mars 2011 à 21:59
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
18 mars 2011 à 21:38
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
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