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 :

Comment utiliser le chemin d'accès affiché dans ma MsgBox pour définir une variable


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Comment utiliser le chemin d'accès affiché dans ma MsgBox pour définir une variable
    Salut,

    Je suis actuellement confronté à la même problèmatique: je souhaite définir un argument (chemin d'accès du fichier) d'une fonction grâce à l'explorateur.
    Ayant consulté longuement la FAQ, j'ai trouvé comment activer et paramètrer l'explorateur pour renvoyer dans un MsgBox le chemin du fichier sélectionné, mais toujours aucun moyen de l'utiliser pour définir l'argument.
    J'ai essayé diverses opérations via un TransferText, mais rien à faire.

    Donc la question est: Comment utiliser le chemin d'accès affiché dans ma MsgBox pour définir une variable?

    Merci d'avance,

    LUD734

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    Bonjour,
    tu peux passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim temp as Variant
    temp = Application.GetOpenFileName()
    if tempo<> False Then
    'code ouverture
    End If
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Bonjour à toi JP,

    Ah, le fameux GetOpenFileName!
    Ca me simplifierait bien la vie de pouvoir utiliser cette commande, mais j'ai un petit problème avec: Chez moi, elle n'est disponible que sous Excel.
    Sous Access, impossible de trouver la référence Microsoft Common Dialog Control, pour utiliser le composant OpenDialog. Pourtant, quand je parcoure manuellement, je trouve bien comdlg32.dll, mais impossible de rajouter la référence.
    Ah oui, autre problème: ma boîte à outils est grisée: impossible de m'en servir -_-.

    Bref, je ne peux pas utiliser la commande que tu me proposes JP, parce que l'objet n'est pas reconnu.

    Une idée?

    Merci d'avance,

    LUD734

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    Pour utiliser GetOpenFileName, je passe par une "pseudo" Application Excel, que je kill à la fin. Il faut ajouter la référence Excel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim tempoXlApp as New Excel.Application
    Dim temp as Variant
    temp = tempoXlApp.GetOpenFileName()
    '
    '
    '
    tempoXlApp .Quit
    Set tempoXlApp  = Nothing
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci, j'ai résolu ce problème de GetOpenFileName.

    Seulement, il semble y avoir un problème quand je l'intègre au code. Un exemple concret sera sûrement plus clair:

    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
    Sub EnvoiMailMéthodeOLE(Adresse As String, Objet As String, Corps As String, Optional Pièce As String, Optional Cc As String, Optional Bcc As String)
        Dim MonAppliOutlook As New Outlook.Application
        Dim MonMail As Outlook.MailItem
        Dim MaPièce As Outlook.Attachments
        Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
        With MonMail
            '.Display ' 
            .To = Adresse
            If Not IsNull(Cc) Then .Cc = Cc
            If Not IsNull(Bcc) Then .Bcc = Bcc
            .Subject = Objet
            .Body = Corps
            If Not IsNull(Pièce) Then
                Set MaPièce = .Attachments
                MaPièce.Add Pièce, olByValue
            End If
            .Send
        End With
    End Sub
    Et la fonction rattachée est la suivante:

    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
    Function EnvoiAvecPièceJointe()
    Dim tempoXlApp As New Excel.Application
    Dim temp As Variant
     
    temp = tempoXlApp.GetOpenFileName()
     
        EnvoiMailMéthodeOLE Adresse:=InputBox("Entrer l'adresse du destinataire"), _
                            Objet:=InputBox("Objet du Message"), _
                            Corps:=InputBox("Message à envoyer"), _
                            Pièce:="temp", _
                            Cc:="", _
                            Bcc:=""
     
                            tempoXlApp.Quit
    Set tempoXlApp = Nothing
     
    End Function
    Le message retourné est: Impossible de trouver ce fichier. Vérifiez quele chemin d'accès et le nom du fichier sont corrects. Pourtant je suis absolument sûr du nom du fichier, et de son existence.

    Je dois passer pour un sous-doué, mais please, help!

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    et en remplaçant
    par
    d'autre part, tu dois combiner le IsNull avec IsMissing et mettre tester à False (cas où aucun fichier n'a été sélectionné).
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Si je remplace "temp" par temp, j'obtiens le code d'erreur: Erreur de Compilation, Type d'Argument ByRef incompatible.

    En ce qui concerne la PJ, j'y avais pensé, mais les clients envoient toujours un mail avec une PJ (PDF Invitation+Plan), donc le cas PJ absente est exclu.

    Merci de m'accorder du temps ^^

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    oki,
    essaie alors avec :
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Exactement ce qu'il fallait faire. Je me suis insulté de tous les noms quand j'ai vu ton message ^^. J'aurais dû y penser: c'est la chaîne de caractère contenue dans la variable qu'il me faut .

    Merci infiniment. Maintenant, il faudrait que je réussisse à améliorer la convivialité de la fonction.

    A ce propos, comment faire pour que la fonction sélectionne une ou plusieurs adresses d'une table, puis attribue ces valeurs à l'argument Adresse?
    Je passe par une requête, mais le problème est qu'elle ne parvient pas à attribuer plusieurs adresses à la suite. Seule la première adresse est sélectionnée.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    les adresses mail doivent bien être séparées par un ; non ?
    concaténation des données issues d'une requete, ca te parle ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    C'est parfait, merci bien.
    En fait j'ai fait une confusion: j'ai utilisé "." au lieu de "+" => Souvenirs de programmation en PHP -_-.

    Encore désolé de te demander des choses, mais y aurait-il un moyen de personnaliser l'InputBox pour le champ Corps du message? La rendre semblable au champ texte d'une messagerie?
    Tout taper sur une seule ligne, avec une mise en page nécéssitant la connaissance des tables html, c'est moyen.

    EDIT: En fait, je suis en train de me rendre compte que je demande de faire un logiciel simplifié de messagerie ...Il vaut peut-être mieux que je demande à la Section Informatique de nous prendre Access 2007, et exporter directement l'état en PDF pour l'envoyer via mail ...

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    hello,
    tu peux passer par un formulaire au lieu de te "limiter" à une inputbox :
    sinon à voir je pense
    http://access.developpez.com/sources...nerateurMsgBox
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  13. #13
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Super sympa ce code: très convivial et efficace

    Petit soucis: La commande obtenue est une MsgBox: il faut toujours modifier le code obtenu pour en faire une chaîne de caractères reconnue en tant qu'argument "Corps", puis le coller dans la procédure, avant de la lancer non? Du coup ça rompt un peu la fluidité de l'automatisation.
    Et puis pour quelqu'un qui ne connaît absolument pas Access ni VBA, j'ai peur que ça puisse créer des difficultés ...
    Petite partie de modifs, copier/coller ...

    => Ergonomie peu présente. Non, je pense vraiment qu'un passage à Access 2007 résoudrait le problème. Je vais juste tenter de garder l'explorateur afin qu'il puisse s'ouvrir et sélectionner la PJ avant l'ouverture d'Outlook, et la requête adresse, histoire d'automatiser un peu.
    J'espère seulement que la sécurité informatique nous donnera le feu vert ...

    Sinon, y aurait-il un moyen de créer automatiquement un PDF à partir d'un état depuis Access 2003, puis de l'inclure automatiquement dans un message?
    Tous les articles que j'ai consulté ne donnent pas de solution claire et précise.

    Merci

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 287
    Points
    34 287
    Par défaut
    Le passage automatique d'un état en PDF peut se faire, dès l'instant que tu as un outil installé sur ta machine (Adobe, PDF Creator, etc.)
    Il faut appliquer le code fourni dans les librairies.

    Tiens nous au courant pour l'Access 2007.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  15. #15
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    J'ai Adobe Reader d'installé sur les postes, ainsi que PDFCreator.

    J'ai trouvé un petit bout de code (livré comme exemple avec PDFCreator ) qui imprime sans problème le PDF d'un état virtuellement, sans les demandes de confirmation habituelles, donc tout va bien.

    Reste plus qu'à trouver le moyen de l'inclure automatiquement en tant que PJ dans un mail.

    J'ai contacté la Section Info => Ils vont se pencher sur le problème ...
    Espèrons seulement qu'ils vont pas prendre autant de temps à décider que la justice à émettre un jugement sur une affaire xD

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/01/2013, 16h39
  2. Réponses: 1
    Dernier message: 23/08/2012, 09h32
  3. Réponses: 4
    Dernier message: 02/09/2009, 09h23
  4. [MySQL] Comment utiliser le chemin d'accès d'une image ?
    Par mealtone dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 18/08/2006, 11h29
  5. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01

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