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

Runtime Discussion :

XLS vers MDB sous runtime


Sujet :

Runtime

  1. #1
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut XLS vers MDB sous runtime
    Bonjour à tous !

    Depuis ce matin, je seche sur la communication entre excel et access. Il y'a bien des FAQ et des Tutoriaux, mais aucun ne répond à mon probleme.
    Voila la description:

    J'ai crée une appli sous access (toto.mbd), qui envoie des données vers Excel.
    Un fichier tata.xls s'ouvre donc automatiquement et l'utilisateur effectue d'autre manipulation dessus, jusqu'a (imprimer) et fermer ce fichier par le biais d'un bouton procédural, et juste avant la fermeture du fichier (tata.xls), Excel communique avec la base access (toto.mdb) en exécutant une requete d'action qui va faire un INSERT INTO dans une des tables avec des données contenu dans des cellules du fichier tata.xls.
    Jusque la, pas de probleme, j'arrive a répondre a mes attentes sans trop de souci et avec du code VBA sur toto.mdb et tata.xls, en effet j'ai effectuer l'ensemble de mes phase de test avec succes sur un poste possedant Access 2003 et Excel 2003. (mon poste de travail).

    Par contre, mon souci viens du fait que je dois aussi faire fonctionner ces 2 fichiers sur des poste en Windows XP, qui possede Excel 2003, mais qui n'ont pas Access ...

    J'ai donc déployer sur un poste de test (ne possedant pas Access donc), le Runtime Microsoft access.
    et voila mes résultats:
    Apres installation avec succes du Runtime, le fichier toto.mdb deviens exécutable. Je l'ouvre, et j'obtiens bien ma communication avec tata.xls (qui s'ouvre aussi).
    J'effectue mes manip sur tata.xls, et au final, qd je clique sur le bouton qui va lancer la requete SQL INSERT INTO contenu dans toto.mdb, j'obtiens un message d'erreur :

    "Un composant ActiveX ne peut pas créer d'objet. Erreur d'éxécution '429'"
    J'ai chercher un peu sur le net, et on signale sur des forums qu'il faut utiliser la référence Microsoft DAO 3.6.
    Je l'active donc sur Excel mais pas sur access, car je n'ai toujours pas access sur le poste de test, et par l'intermédiaire du Runtime, on doit pas avoir access a VBA editor.
    Meme apres l'installation de la référence DAO3.6 sur excel, j'ai toujours le meme probleme.
    J'ai aussi essayer de rajouter des références du type Microsoft ActiveX vX.X, sous excel, mais toujours rien ...

    -------------------------------------

    J'en déduit avec défétisme que l'on ne peut pas communiquer d'excel (tata.xls) vers "access" (toto.mdb) ou plutot le runtime access.

    Je laisse en commentaire mon code VBA sous excel, qui me permet de lancer la requete SQL sous toto.mdb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim MonAccess As New Access.Application
    MonAccess.OpenCurrentDatabase "\\h3msbs2003\BDC$\BDD_BDC.mdb"
    'J'appelle la procédure nommé "insintBONDECOMMANDE" avec 2 parametres
    MonAccess.Run "insintBONDECOMMANDE", Sheets("DATA").Range("A10").Value, Sheets("DATA").Range("B10").Value
    MonAccess.Quit acquitsaveNone
    Set MonAccess = Nothing
    La ligne qui est en gras, est la ligne mise en surbrillance quand, apres le message d'erreur (Un composant ActiveX ne peut pas créer d'objet. Erreur d'éxécution '429') je clique sur déboguer.

    Je rappel, que la meme manip fonctionne parfaitement entre Excel et Access , si access et non pas le Runtime est installé

    Quelqu'un a t'il une idée pour résoudre mon probleme ???

  2. #2
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    salut
    il semblerait que la fonction OpenCurrentDatabase ne fonctionne pas avec le runtime (ca fonctionne qu'avec la version complete d'access)

    essaye d'utiliser plutot : OpenDatabase qui se trouve dans la librairie DAO (n'oublie donc pas d'ajouter cette reference)

  3. #3
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    Merci à toi de répondre aussi rapidement!

    J'ai ajouter sous excel la librairie Microsoft DAO3.6, mais comment on utilise cette fonction ?
    J'ai tester MonAccess.Opendatabase ca marche pas :s

    si t'as un exemple d'utilisation ca serait sympa

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim db As DAO.Database
    Set db = DAO.OpenDatabase("C:\Temp\MaBase.mdb", False, False)
    j'ai piqué ca du tuto de caféine
    ca pourrait t'interesser:

    http://www.developpez.net/forums/sho...d.php?t=269383

  5. #5
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    ok merci!
    je vais tester, si ca marche, je tagg le post.

    Bonne continuation !

  6. #6
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    OK, bon deja j'ai plus le message d'erreur "erreur d'éxécution 429, un composant activeX ....."
    donc ca me rassure de savoir cette métohde compatible avec le runtime Access.

    Par contre, je ne connais que tres peu la programation DAO, comment est ce que je pourrai lancer l'exécution a partir de tata.xls, d'un module sur toto.mdb comprennant 2 arguments.

    avec mon ancienne méthode qui ne fonctionne pas avec le runtime, j'avais ce code la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim MonAccess As New Access.Application
    MonAccess.OpenCurrentDatabase "\\h3msbs2003\BDC$\BDD_BDC.mdb"
    MonAccess.Run "insintBONDECOMMANDE", arg1, arg2

    Avec ta méthode DAO, j'imagine que c'est un truc dans le style, mais y me manque la suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim db As DAO.Database
    Set db = DAO.OpenDatabase("\\h3msbs2003\BDC$\BDD_BDC.mdb", False, False)
    db.??????????? ("insintBONDECOMMANDE", arg1, arg2)
    tu as la réponse :S ???

  7. #7
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    j'ai regarder le lien vers le tuto de cafeine que tu a posté, c'est pas mal mais ca ne répond pas a mes besoins, étant données que le tuto permet de récupérer des donner de access vers excel, tandis que moi je veux envoyer des données de excel vers access en lancant une procédure contenu dans un module du fichier access.

    j'ai essayé de regarder les différents possibilités qu'offre l'objet DAO.database, mais je n'ai rien vu qui me permet d'éxécuter a distance une procédure.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Salut

    DAO te permettra de travaillere sur les données, pour lancer une procédure il va falloir passer par automation pour contrôler Access depuis Excel.

    Regarde dans le moteur de recherche du site à GETOBJECT pour prendre possesion d'Access, et regarde aussi dans la faq VBA. Par contre je ne sais pas si cela fonctionnera avec le runtime.

    Starec

  9. #9
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    le Run est une méthode d'Access.Application pas de la database

    dao.database ne te propose que des methodes pour effectuer des requetes pas des procédures

    donc essaye comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim MonAccess As New Access.Application
    Dim db As DAO.Database
    Set db = DAO.OpenDatabase("\\h3msbs2003\BDC$\BDD_BDC.mdb", False, False)
    MonAccess.CurrentDb = db
    MonAccess.Run "insintBONDECOMMANDE", arg1, arg2
    c'est juste une idée, testes pour voir si ca marche

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonAccess.CurrentDb = db
    ca ne devrait pas marcher :/

    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonAccess = GetObject(, "Access.Application")
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim MonAccess As New Access.Application
    ca revient au meme non?
    on ne pourra pas utiliser opencurrentdatabase ni newcurrentdatabase :/

  11. #11
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    j'ai tester ton idée, ca ne marche pas, la ligne :
    MonAccess.CurrentDb = db
    est en surbrillance, avec l'erreur : Errreur de compilation : Utilisation incorrecte de la propriété

    On ne peut vraiment pas exécuter une procédure a partir de DAO.database ??? il doit y avoir un méthode qui équivaut au Run de Access.application non ?

  12. #12
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    réponse a Shoruy:
    Oui, ca revient au meme, c'est la meme instanciantion mais écrit de 2 manieres différentes :s

  13. #13
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ayant cherché un peu le probleme sur le net
    j'ai trouvé 2 façons, je sais pas si elles fonctionnent mais bon :

    lancer d'abord la base grace a l'executable runtime d'access avec shell() et apres utilise getobject()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'remplacer par le vrai chemin
    Shell("c:\runtime\MSACCESS.exe " & """\\h3msbs2003\BDC$\BDD_BDC.mdb"" ", vbNormalFocus)
     
    Set accObj = getObject(, "Access.Application")

    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set db = DAO.OpenDatabase("\\h3msbs2003\BDC$\BDD_BDC.mdb", False, False)
     
    Set accObj = getObject("\\h3msbs2003\BDC$\BDD_BDC.mdb", "Access.Application")

  14. #14
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    OK, j'ai trouver une autre solution pour répondre a mes problemes.
    J'utilise simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strSQL as string
    Dim db As DAO.Database
    Set db = DAO.OpenDatabase("\\h3msbs2003\BDC$\BDD_BDC.mdb", False, False)
    strSQL = "SELECT * FROM TABLE WHERE champs = 'condition';"
    db.execute strSQL
    car en fait, ma procédure que je souhaitais lancer à partir d'excel, sous access, exécute un code qui concatene une chaine de string et exécute une requete SQL.


    Je vous remercie tous les 2 pour votre implication dans mon probleme, bonne continuation a vous.

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

Discussions similaires

  1. import xls/txt vers PGI (sous Windev)
    Par blastfr dans le forum WinDev
    Réponses: 8
    Dernier message: 13/05/2009, 16h08
  2. [Excel] De xls vers csv sans objet COM (php4 sous linux)
    Par AntaresJon dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 26/02/2009, 17h13
  3. de xls vers Word puis sauver toto.doc sous tata.doc
    Par jcd31170 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/06/2007, 09h24
  4. [IMPORTER] fichier .xls vers postgresql
    Par gloogloo dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 31/03/2005, 11h30
  5. [Linux]différence de code de windows vers unix sous eclipse
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 05/01/2005, 14h11

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