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

VBA Access Discussion :

Ouvrir une pièce jointe en VBA [AC-2019]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Cadre technique en BE
    Inscrit en
    Juillet 2021
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cadre technique en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 98
    Par défaut Ouvrir une pièce jointe en VBA
    Bonjour.
    Mon but est d'inclure un fichier Word d'aide à ma base de donnée. Je ne veux pas que l'appuie sur le bouton aide vienne pointer un fichier extérieur à la base de données.
    Je tiens à préciser que j'ai déjà consulté ces solutions: https://access.developpez.com/faq/?page=PJVBA#PJOuvrir : dans ce cas il faut déplacer le fichier (qui n'est pas inclus dans la base de donnée) avec la base de données.

    Autre cas : https://www.developpez.net/forums/d1...nu-bdd-access/ : Idem

    Dans la conception du formulaire j'ai utilisé le menu "insérer un champ existant" (après avoir inséré une pièce jointe dans une table), ce qui donne :

    Un champ qui permet de pointer sur une pièce jointe :
    Nom : Capture d’écran 2022-04-02 183153.png
Affichages : 262
Taille : 1,5 Ko

    Cela ouvre ce menu :
    Nom : Sans titre.jpg
Affichages : 284
Taille : 26,8 Ko
    l'utilisateur sélectionne le fichier et cliques sur "Ouvrir". Je ne voudrais pas que l'utilisateur ait accès à ce menu (notamment pouvoir supprimer la pièce jointe).

    En fait je voudrais un code VBA qui permettent d'ouvrir directement la piéce jointe.
    La pièce jointe correspond à un objet de classe attachment https://docs.microsoft.com/fr-fr/off...ess.attachment , je n'ai pas trouvé de méthode appliquée à cet objet qui permettent d'ouvrir la pièce jointe.
    Pouvez vous m'aider?
    Merci.
    Cordialement

  2. #2
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 292
    Par défaut
    Salut
    Peut-être un début de piste ici

  3. #3
    Membre confirmé
    Homme Profil pro
    Cadre technique en BE
    Inscrit en
    Juillet 2021
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cadre technique en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 98
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Salut
    Peut-être un début de piste ici
    Le besoin initial a l'air identique, les solutions apportées sont d'une complexité sans nom (du moins pour mon niveau de débutant ). La solution la plus abordable fais appel à un fichier extérieur à la base qu'on lance par code vba, ce n'est pas ce que je veux faire.
    Je vais fouiller encore...
    Merci.

  4. #4
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 292
    Par défaut
    La solution pour un début de piste fonctionne très bien et ne fait pas appel à un emplacement. Quoi que, il est temporaire !
    Ne pas oublier que "entre ce que je veux" et "ce que l'on peut" le fossé peut être abyssal !
    C'est bien pour cela que la plus part des MVP Access et Pro Access préconisent de placer les pièces jointes à l'extérieur de la bdd.
    Parce qu votre fichier *.docx ne l'est plus, il devient binaire et votre bdd risque de gonfler comme un ballon de baudruche avec une limite à 2Go !
    Si vous trouvez la solution "magique", déposez-là ici pour que la communauté de DEV puisse en profiter.
    Bonne chance dans vos recherches.

  5. #5
    Membre confirmé
    Homme Profil pro
    Cadre technique en BE
    Inscrit en
    Juillet 2021
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cadre technique en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 98
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    La solution pour un début de piste fonctionne très bien et ne fait pas appel à un emplacement. Quoi que, il est temporaire !
    Ne pas oublier que "entre ce que je veux" et "ce que l'on peut" le fossé peut être abyssal !
    Ne le prenez pas mal je pensais que c'était infiniment plus simple dans la mesure où l'objet attachement existe ...


    Citation Envoyé par hyperion13 Voir le message
    C'est bien pour cela que la plus part des MVP Access et Pro Access préconisent de placer les pièces jointes à l'extérieur de la bdd.
    Parce qu votre fichier *.docx ne l'est plus, il devient binaire et votre bdd risque de gonfler comme un ballon de baudruche avec une limite à 2Go !
    D'accord je n'ai pas votre expérience de développeur , par contre j'ai une petite expérience professionnelle avec tout un tas d'outils Access développés par les uns et les autres avec des procédures qui se perdent parfois dans les limbes et qui ne suivent pas les outils, j'ai fait ici une mini procédure avec quelques images qui fait passer la taille de ma BDD de 1 à 5 méga ,on est loin des 2 giga ...

    Citation Envoyé par hyperion13 Voir le message
    Si vous trouvez la solution "magique", déposez-là ici pour que la communauté de DEV puisse en profiter.
    Bonne chance dans vos recherches.
    Evidemment je n'y manquerai pas.
    Cordialement.

  6. #6
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bonjour,

    Citation Envoyé par hyperion13 Voir le message
    C'est bien pour cela que la plus part des MVP Access et Pro Access préconisent de placer les pièces jointes à l'extérieur de la bdd.
    Parce qu votre fichier *.docx ne l'est plus, il devient binaire et votre bdd risque de gonfler comme un ballon de baudruche avec une limite à 2Go !
    Dans un champ pièce-jointe, le docx reste un docx.
    Pas de risque au niveau de la taille de la base de données, d'autant que ce n'est pas une GED mais juste un fichier d'aide.

    Pour éviter que l'utilisateur ne puisse modifier le fichier d'aide, commencez par le verrouiller dans le formulaire (propriété "Verrouiller" dans l'onglet "Données" du contrôle).
    Mais l'ouverture du fichier demande toujours de passer par la boîte de dialogue de gestion des pièces-jointes, c'est ainsi que ça a été conçu mais ici ce pas très pratique.
    Pour une ouverture directe sur clic, on n'a pas d'autre choix que de passer par du VBA pour sauvegarder le fichier sur le disque avant de l'ouvrir (c'est ce que fait Access qu'on demande l'affichage d'une pièce-jointe via la boîte de dialogue, le fichier est d'abord sauvegardé sur le disque, il ne peut en être autrement).

    Par exemple sur clic sur le contrôle (le mien s'appelle "pj") :
    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
     
    ' Ouverture du fichier sur clic
    Private Sub pj_Click()
    Dim lPath As String
    ' Chemin du fichier temporaire
    lPath = Environ("TEMP") & "\" & Me.pj.FileName
    ' Supprime un éventuel fichier déjà présent
    Kill lPath
    ' Sauvegarde de la pièce-jointe en fichier temporaire
    Me.Recordset.Fields(Me.pj.ControlSource).Value.Fields("FileData").SaveToFile lPath
    ' Ouverture du fichier temporaire
    Shell "explorer.exe """ & lPath & """"
    End Sub
    ' Annulation du double-clic
    Private Sub pj_DblClick(Cancel As Integer)
    Cancel = True
    End Sub

  7. #7
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 292
    Par défaut
    Salut
    Avec SQL Image Viewer on voit sous un autre angle les pièces jointes. Elles sont codées.

  8. #8
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bonjour,

    Que ce soit encodé, oui pourquoi pas, il y a quelques métadonnées mais très peu.
    Mais dans un champ pièce jointe, un docx reste un docx, certes stocké en binaire (ben oui comme tout).
    Il n'y a aucune altération du fichier comme c'était le cas avec des images dans un champs OLE qui étaient transformées en bitmap.

  9. #9
    Membre confirmé
    Homme Profil pro
    Cadre technique en BE
    Inscrit en
    Juillet 2021
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cadre technique en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 98
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Bonjour,


    Dans un champ pièce-jointe, le docx reste un docx.
    Pas de risque au niveau de la taille de la base de données, d'autant que ce n'est pas une GED mais juste un fichier d'aide.

    Pour éviter que l'utilisateur ne puisse modifier le fichier d'aide, commencez par le verrouiller dans le formulaire (propriété "Verrouiller" dans l'onglet "Données" du contrôle).
    Mais l'ouverture du fichier demande toujours de passer par la boîte de dialogue de gestion des pièces-jointes, c'est ainsi que ça a été conçu mais ici ce pas très pratique.
    Pour une ouverture directe sur clic, on n'a pas d'autre choix que de passer par du VBA pour sauvegarder le fichier sur le disque avant de l'ouvrir (c'est ce que fait Access qu'on demande l'affichage d'une pièce-jointe via la boîte de dialogue, le fichier est d'abord sauvegardé sur le disque, il ne peut en être autrement).
    Merci arkham46 pour ces précisions.
    J'ai essayé le code permettant d'accéder à un fichier temporaire. Je vais opter pour la solution de la pièce jointe avec un mode protégé.
    Merci à vous 2 pour ces réponses, cordialement

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

Discussions similaires

  1. [XL-2016] Ouvrir une pièce jointe dans un PDF grâce à VBA Excel
    Par King Arthur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/04/2020, 17h02
  2. [AC-2007] ouvrir une pièce jointe contenu dans une bdd Access
    Par kek's dans le forum Access
    Réponses: 10
    Dernier message: 10/05/2012, 18h23
  3. Réponses: 7
    Dernier message: 01/04/2010, 00h12
  4. Réponses: 0
    Dernier message: 16/09/2009, 11h17
  5. Impossible d'ouvrir une pièce jointe
    Par ajc35000 dans le forum Outlook
    Réponses: 2
    Dernier message: 15/01/2008, 19h56

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