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 :

Ouverture d'un fichier Attaché [AC-2010]


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut Ouverture d'un fichier Attaché
    Bonjour à tous,

    L'introduction
    je suis en train de réaliser sous Access 2010 une base de donnée me permettant de gérer un ensemble de bâtiments administratifs (je début sous Access mais j'ai de bonnes bases en VBA Word/Excel).
    Cette base me permettrait, entre autre, de réaliser des documents Word pour sortir des rapports pour chaque bâtiment ( je ne peut pas utiliser les "Report" intégrés à Access car chez nous (banque), tout est Corporate, et les documents types sont imposés)
    J'ai donc crée une table avec tous les documents type dont j'ai besoin (fichier attachés à un enregistrement) et, entre autre, un formulaire alimenté par différentes tables qui regroupent les informations des bâtiment.
    J'aimerai que, quand je clic sur OK en bas du formulaire, Access ouvre le bon fichier Word attaché à un enregistrement de la table des fichiers types et le remplisse comme il faut. J'ai, en ce moment, plusieurs fichiers Word avec leurs macros VBA et une base de donnée sous excel et ça marche assez bien mais ce n'est quand-même pas optimal...

    Les soucis
    J'ai, dans un premier temps un souci pour ouvrir le fichier attaché (en revanche, aucun problème pour ouvrir un fichier qui se trouve ailleurs dans un dossier Windows mais j'aimerais que tout soit intégré à la table et pas avoir un sous-dossier avec plein de fichiers Word ou autre...)
    Mon deuxième souci sera sûrement de remplir le document via les "Text Form Fields" de Word et ce, depuis Access, mais ça, je me laisse chercher encore un peu avant de sonner l'alarme

    J'ai bien mis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String _
    , ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    dans un module, je suppose que c'est aussi nécessaire pour ouvrir un fichier attaché à un enregistrement.

    Ensuite je connais ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute 0&, vbNullString, "monfichier.doc", vbNullString, vbNullString, vbNormalFocus
    Mais bon, ça c'est pour un fichier situé dans un dossier Windows.

    J'ai essayé vers cette voie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute 0&, vbNullString, MA_TABLE.MON_FIELD.MA_LIGNE, vbNullString, vbNullString, vbNormalFocus
    mais si c'est ça, je n'ai pas trouver la bonne formulation...

    Malgré mes recherches, je n'ai pas trouvé de solution.

    merci d'avance de votre aide

    Sylvain

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    Bon alors, j'ai du nouveau pour mon problème. A priori, il faut en premier lieu demander à la macro d'enregistrer le fichier quelque-part avant de pouvoir l'ouvrir (logique )
    ensuite, je peux utiliser le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute 0&, vbNullString, "monfichier.doc", vbNullString, vbNullString, vbNormalFocus
    j'essaye et je crie au secours si je lutte trop


    Sylvain

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    A moins que je ne sois complètement en dehors de la plaque, tu peux ouvrir un doc bien plus efficacement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim oWdApp as word.Application
    Dim oWdDoc as Word.document
    Dim sPath as string
     
    '...
    Set oWdApp = New Word.Application
    oWdApp.Visible = True
    sPath = ...
    Set oWdDoc = oWdApp.Documents.Open sPath
     
    '... traitement
    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    Merci pour ta réponse Pgz.

    malheureusement j'en suis encore au niveau d'essayer l'enregistrement du fichier.

    j'ai basé mon script sur le code suivant : (pris dans le tuto access, très bien fait, je l'avoue, mais il doit y avoir un truc que je ne pije pas...)
    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
    Function EnregistrerFichier(strNomFichier As String, inteleve As Integer, strNomDestination) As Boolean
    On Error GoTo err
    Dim oRst As DAO.Recordset
        'Ouvre un recordset sur les fichiers de l'éleve passé en paramètre
    Set oRst = CurrentDb.OpenRecordset("SELECT Fichiers.FileData FROM tbl_eleve WHERE [N°]=" & _
                inteleve & " AND Fichiers.FileName=" & Chr(34) & strNomFichier & Chr(34))
        If Not oRst.EOF Then
     
            oRst.Fields(0).SaveToFile strNomDestination
            EnregistrerFichier = True
        End If    
    fin:
    Set oRst = Nothing
    Exit Function
     
    err:
        Select Case err.Number
        Case 3839:
            MsgBox "Impossible d'écraser le fichier", vbCritical
        Case Else
            MsgBox "Erreur inconnue", vbCritical
        End Select
        Resume fin
    End Function
    en fait, dans ce code, il y a des variables et des références liées à des tables que je ne trouve pas.

    j'ai cherché s'il était possible de télécharger le fichier d'exemple, en vain...

    la ligne qui me pose problème est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oRst = CurrentDb.OpenRecordset("SELECT Fichiers.FileData FROM tbl_eleve WHERE [N°]=" & _
                inteleve & " AND Fichiers.FileName=" & Chr(34) & strNomFichier & Chr(34))
    j'ai compris que :
    • tbl_eleve est le nom de la table dans lequel se trouve l'enregistrement, auquel est attaché le fichier,
    • "WHERE [N°]= inteleve" signifie (je pense) dans la colonne/field nommée N°, il faut chercher la ligne/enregistrement qui a la valeur stockée dans le variable inteleve,
    • strNomFichier est bien sur la variable qui stock le nom du fichier.

    Mais j'ai un problème avec Fichiers.FileData et Fichiers.FileName. Je suppose que ce ne sont pas des fonctions VBA access vu que le mot est en français mais je ne sais pas du tout à quoi ça se réfere...

    merci d'avance pour votre aide.

    Sylvain

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    Bon, je veins de trouver le tuto complet :http://warin.developpez.com/access/piecejointe/#LI

    la variante sur laquelle je me basais ne proposait pas l'ensemble de la démonstration...

    Donc je vais essayer me corriger tout seul

    a+

    Sylvain

  6. #6
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    bonjour,

    mais j'aimerais que tout soit intégré à la table et pas avoir un sous-dossier avec plein de fichiers Word ou autre
    Access est excellent en terme de RAD, c'est une bonne bdd ( en intégrant JET) mais ce n'est pas à franchement parler un outil de ged

    Je ne suis pas certain que tu fasses le bon choix d'architecture , ne serait ce que par souci de maintenance.
    En effet, tu vas dupliquer l'information pour rien, tes documents corporates existent bien déjà quelque part, et le moindre changement t'obligera à les répercuter dans ta base,
    Toujours par souci de maintenance, en cas de modification de code ou de modification de périmètre d'utilisation de mon application, je préfére toujours dissocier les traitement des données, en utilisant le principe de frontale, dorsale.

    Il me semble qu'il serait plus simple pour toi d'avoir en base
    - juste les données que tu manipules,
    - une table paramètre ou tu puisses renseigner le ou les répertoires de tes documents sources
    - et une dernière te permettant de rattacher le type de d'édition et le nom du modèle concerné

    Ensuite pour exploiter le tout j'utiliserai ce que te conseille pgz () en pilotant depuis access les outils (ce qui fonctionne parfaitement) qui ont générés tes fichiers modèles. Un dernier avantage que je vois à cette approche, c'est que si tu as besoin de rajouter des fonctionalités tu peux le faire de manière centralisée sans être obligé d'ajouter des morceaux de vba dans tes modèles

    mais ce n'était qu'un avis en passant, à toi de voir

    A+
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    merci pour ta contribution. Je vais rester dans mon idée (je n'ai pas beaucoup de fichier à attacher) Néanmoins, j'y penserai si le problème se pose. Merci en tout cas.

    J'ai résolu mon problème et cela fonctionne.

    en fait, le "Fichiers" de Fichiers.FileData ou Fichiers.FileName est tout simplement le nom du Field où se trouve les pièces jointes...

    A bientôt pour un nouveau blocage...

    Sylvain

  8. #8
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    bien, mettre en résolu alors
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    Oui, je vais le faire, il ne me reste plus qu'une question :

    je n'arrive pas à sauvegarder le document après qu'il soit rempli. J'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim appWord as New Word.Application
    With appWord
    Set docWord = .Documents.Open("c:\...\monFichier.doc")
    .Visible = True
    'Remplissage des bookmark
    docWord.Bookmarks("txt_ref").Range.Text = "blablablabla"
    'etc...
    Set docWord = .ActiveDocuments.Save
    End With
    Set appWord = Nothing
    Je suppose que ma commande Set docWord = .ActiveDocuments.Save est mauvaise mais je ne trouve pas...
    Je ne souhaite pas de faire de SaveAs.

    merci d'avance.

    Sylvain

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Août 2009
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    J'ai trouvé !!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim appWord as New Word.Application
    With appWord
    Set docWord = .Documents.Open("c:\...\monFichier.doc")
    .Visible = True
    'Remplissage des bookmark
    docWord.Bookmarks("txt_ref").Range.Text = "blablablabla"
    'etc...
    .ActiveDocuments.Save
    End With
    Set appWord = Nothing
    Sylvain

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

Discussions similaires

  1. javamail fichier attaché problème d'ouverture
    Par vanassch dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 02/10/2006, 02h31
  2. pb d'ouverture de fichier attaché
    Par filax dans le forum Flash
    Réponses: 4
    Dernier message: 25/09/2006, 13h44
  3. Réponses: 5
    Dernier message: 27/07/2004, 17h04
  4. Scanner des mails et récupérer le fichier attaché
    Par delphim dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/04/2003, 09h35
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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