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 :

Import Fichier Excel


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut Import Fichier Excel
    Bonjour à tous,
    Je dispose d'un formulaire contenant un objet OLE (un fichier Excel) que j'ai inséré à la main. Je souhaite créer un bouton dans mon appli excel pour éventuellement remplacer cet objet. Le souci, c'est que je ne vois absolument pas comment procéder.
    J'ai créé un FileDialog pour récupérer le chemin vers le nouveau fichier, mais je ne sais pas comment faire pour créer un objet OLE dans mon formulaire à partir de ce chemin. J'ai testé (sans trop y croire) un bête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!F_mon_formulaire.OLEObjects.Add ("C:\Documents and Settings\...\xxx.xls")
    Sans succès!

    Si quelqu'un a une idée...

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Pour toute creation de controle dans un formulaire via VBA il faut que le formulaire soit ouvert en mode création.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par loufab
    Bonjour,

    Pour toute creation de controle dans un formulaire via VBA il faut que le formulaire soit ouvert en mode création.

    Cordialement,
    Merci de la réponse, mais c'est ce que j'ai fait!
    J'aurais plutot du insérer le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        DoCmd.OpenForm "F_Test", acDesign, , , , acHidden
     
        Forms!F_Test.OLEObjects.Add ("C:\(...)\xxx.xls")
     
        DoCmd.Close acForm, "F_Test"

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Désolé de faire remonter le message de façon terroriste mais vraiment, je ne m'en sors pas...

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    En regardant de plus prés la méthode OleObjects.add appartient à Excel, c'est pour cela que cela ne peut pas fonctionner. Elle doit être utilisée au sein d'Excel et non d'ACCESS.

    Il faut que tu utilise CreateControl plutot. Regarde dans l'aide comment la mettre en oeuvre.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Je vais voir ca, merci pour ta réponse!

    Des que j'y arrive (si j'y arrive!) je poste le code!

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    J'ai essayé en vain!
    j'arrive d'un coté a créer le bon controle (vide) avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ctl = CreateControl("XF_Result", acCustomControl, acDetail)
    D'un autre coté je récupère mon fichier excel dans un objet avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set obj = GetObject("C:\(...)\État1.xls", "Excel.Sheet")
    Mais je ne vois pas comment faire passer obj dans mon fichu controle!

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Je suis allé voir sur le MSDN, apparement il y a un bug à la création d'un objet OLE.

    Malgré les solutions proposés impossible d'établir le lien avec un fichier existant.

    Est-ce que j'ai raté quelque chose ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Pour un insérer un Document OLE dans un formulaire, il faut au préalable qu'il existe un contrôle Cadre d'objet dépendant (BoundObjectFrame) ou indépendant (ObjectFrame) qui sert de container au document OLE.

    Le contrôle Cadre d'objet dispose des propriétés nécessaires pour y "insérer" un nouveau document en précisant les modalités de l'insertion (document incorporé ou document lié).

    Ci-dessous, un exemple extrait de l'aide en ligne VBA Access:
    Exemples de propriétés d'objets OLE

    L'exemple suivant crée un objet OLE lié à l'aide d'un cadre d'objet indépendant appelé OLE1 et dimensionne le contrôle pour afficher le contenu entier de l'objet lorsque l'utilisateur clique sur un bouton de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Command1_Click
        OLE1.Class = "Excel.Sheet"    ' Définit le nom de classe.
        ' Spécifie le type d'objet.
        OLE1.OLETypeAllowed = acOLELinked
        ' Spécifie le fichier source.
        OLE1.SourceDoc = "C:\Excel\Oletext.xls"
        ' Spécifie les données avec lesquelles créer le lien.
        OLE1.SourceItem = "R1C1:R5C5"
        ' Crée l'objet lié.
        OLE1.Action = acOLECreateLink
        ' Ajuste la taille du contrôle.
        OLE1.SizeMode = acOLESizeZoom
    End Sub

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Pour JBO :

    J'ai testé ce code hier soir sur un access2000, il ne fonctionne pas.
    Ce matin j'ai refais le test sur 2002 est le pb est indentique.

    • A savoir le lien vers le nouveau fichier n'est pas pris en compte.
    • Le controle n'a pas toutes les propriétés d'un champ OLE notamment la OLEData qui n'est pas implémenté.
    • Malgré le réglage de Locked et Enabled les constantes acOLELink et autres ne semble pas avoir le comportement décrit dans l'aide. (impossible de la modifier)
    • J'ai également testé la copie du controle à partir d'un controle déclaré en tant qu'objet lié. OleData est crée mais toujours pas le lien vers un nouveau fichier.


    Si tu l'as testé qu'est ce qui en a resulté ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Je viens de tester également et ca ne fonctionne effectivement pas (test effectué sous access 2003.

    j'ai ajouté ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DoCmd.OpenForm "XF_Result", acDesign, , , , acHidden
    Set OLE1 = CreateControl("XF_Result", acObjectFrame, acDetail)
    erreur : "Le cadre d'objet dépendant ou indépendant que vous avez essayé de modifier ne contient pas d'objet OLE."

    Le debuger indique sans surprise la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OLE1.Action = acOLECreateLink
    mais on touche au but c'est déja ca!

  12. #12
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Le problème c'est que sans cette propriété le lien n'est pas fait donc le champ OLE inexploitable... C'est le grain de sable.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    J'ai essayé de procéder autrement en ne linkant pas le fichier mais en l'intégrant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        DoCmd.OpenForm "XF_Result", acDesign, , , , acHidden
        Set OLE1 = CreateControl("XF_Result", acObjectFrame, acDetail)
     
        OLE1.Class = "Excel.Sheet"    ' Définit le nom de classe.
        OLE1.OLETypeAllowed = acOLEEmbedded
        OLE1.SourceDoc = "C:\(...)\État1.xls"
        OLE1.Action = acOLECreateEmbed
        OLE1.SizeMode = acOLESizeZoom
    Le problème vient là encore du OLE1.Action, et l'erreur est la même.

    On oublie probablement quelquechose...

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,

    Peut-être une piste avec ce lien

    insérer un objet OLE par bouton de commande
    "Always look at the bright side of life." Monty Python.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Peux tu me dire la manière dont tu as créé ton controle "logo"?

    J'aimerais m'assurer qu'on parle de la même chose en fait

  16. #16
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Pour Acarp47 :
    J'ai également testé ce code sans résultat...

    Pour Micniv :
    C'est une solution avec intervention de l'utilisateur donc pas totalement automatisé.

    Vu le type de fonction que Acarp47 veut mettre en place je pense que le chemin et nom de fichier change à chaque enregistrement.

    On est comme des chiens qui veulent se mordre la queue.

    Pour Acarp47 :
    Est-ce qu'une solution à base de fichier Excel Attaché te conviendrait ? Dans ce cas le montage est plus long mais ça marche sans surprise.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  17. #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    En fait, pour expliquer le contexte, mon application access exporte des données vers Excel. Pour ce faire, un template est stocké dans un formulaire et je copie les données dans celui ci avant de le sauvegarder sur le disque.

    Le but de la maneuvre serait de laisser les utilisateurs mettre à jour ce template (dans le formulaire). Peu importe le degré d'automatisation, pourvu qu'on ne soit pas obligé d'ouvrir le formulaire en modification!

    J'avais donc commencé a récupérer l'adresse du fichier excel avec un FileDialog, puis je pensais que la suite se passerait sans anicroche... Ben non!

  18. #18
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Merci Loufab, je n'avais pas englobé tout le contexte !

    Alors autre piste :
    Sur le site de cet excellent Stephen@lebans.com, il y a un exemple ExtractInventoryOLEver75.mdb qui doit être adapté pour cette problematique mais ... faut prendre le temps de creuser avant de voir la lumière (voir notamment la fonction ExtractOle() ) :
    http://www.lebans.com/oletodisk.htm
    "Always look at the bright side of life." Monty Python.

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Salut les courageux, les tenaces et les durs à cuire !
    Citation Envoyé par loufab
    Pour JBO :

    J'ai testé ce code hier soir sur un access2000, il ne fonctionne pas.
    Ce matin j'ai refais le test sur 2002 est le pb est indentique.
    [...]
    Si tu l'as testé qu'est ce qui en a resulté ?
    Comme vous deux, j'ai eu des soucis, mais j'ai trouvé quelque chose...
    ...et voici le code QUI FONCTIONNE... mais pour une version FRANÇAISE d'EXCEL.

    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
    Private Sub Commande_InsérerOLE_Click()
     
        ' Définit le nom de classe, mais ce n'est pas obligatoire
        CtrlOLE.Class = "Excel.Sheet"
     
        ' Spécifie si on veut lier ou incorporer le document OLE
        CtrlOLE.OLETypeAllowed = acOLELinked
     
        ' Spécifie le fichier source.
        CtrlOLE.SourceDoc = "C:\Temp\Oletext.xls"
     
        ' Spécifie les données avec lesquelles créer le lien.
        CtrlOLE.SourceItem = "L1C1:L5C5"
     
        ' on pourrait aussi préciser le nom de la feuille (affiché dans l'onglet)
        'CtrlOLE.SourceItem = "Feuil1!L1C1:L5C5"
     
        ' Crée l'objet lié.
        CtrlOLE.Action = acOLECreateLink
     
        ' Ajuste la taille du contrôle.
        CtrlOLE.SizeMode = acOLESizeZoom
     
    End Sub
    A mon avis, l'erreur était due à la syntaxe du genre "R1C1:R5C5" qui convient pour une version US d'EXCEL

    Subtil non ?

  20. #20
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Maintenant, un peu de réflexion sur ton objectif et sur ton choix technique...
    Citation Envoyé par Acarp47
    En fait, pour expliquer le contexte, mon application access exporte des données vers Excel. Pour ce faire, un template est stocké dans un formulaire et je copie les données dans celui ci avant de le sauvegarder sur le disque.
    Dans ton cas, je ne crois pas que l'approche via un Document OLE soit la plus pertinente.

    Qu'est-ce qui t'a amené dans cette direction ? Quels en sont les avantages ?

    Pourquoi ne pas simplement faire une copie du fichier modèle, "quelque part" ... ainsi tu pourrais plus facilement l'utiliser... parce qu'un container OLE (contrôle Cadre d'objet) c'est drôlement lourd !

    Mon opinion:
    * L'automation OLE ? Rien à dire, c'est vraiment super pratique !
    * Les documents OLE ? C'est lourd et ça convient rarement au besoin !
    * L'activation in situ d'un document OLE ? Beurk !
    * Un bon contrôle ActiveX fait souvent mieux l'affaire qu'un contrôle cadre d'objet (container OLE) !

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

Discussions similaires

  1. Importation fichier excel vers oracle
    Par yousfi.z dans le forum Oracle
    Réponses: 6
    Dernier message: 15/12/2008, 09h11
  2. Importation fichier Excel
    Par amka dans le forum Access
    Réponses: 2
    Dernier message: 01/08/2006, 13h35
  3. Importation fichier Excel dans table Access
    Par kemasse dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2006, 15h12
  4. import fichier excel vers mysql
    Par Groshaeny Roger dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 03/04/2006, 20h31
  5. [SQL Server 2000] erreur lors importation fichier excel
    Par Abydos Business Group dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/03/2006, 09h24

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