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 Outlook Discussion :

[VBA/Outlook] Browser de fichier


Sujet :

VBA Outlook

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut [VBA/Outlook] Browser de fichier
    Bonjour,

    je suis en train de developper une petite appli pour creer des e-mails...j'ai realiser un formulaire...et dans ce formulaire je souhaiterais pouvoir browser mon disque pour collecter le nom du fichier que je vais mettre en attachement dans mon e-mail...

    je travaille avec Oulook 2003 SP3

    j'ai essaye plusieurs methodes mais aucune ne fonctionne car les objets utilise ne sont pas connus
    - application.getOpenFilename
    - Application.FileDialog(msoFileDialogFilePicker)

    j'ai poutant declare en refrence:
    - Microsoft Outlook 11.0 Object Library
    - Microsoft Office 12.0 Object Library (meme probleme avec Office 11.0)

    quelqu'un aurait il une idee de mon erreur?

    par avance merci,

    Daniel.

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,
    Il n'y a pas de telle boite integrée à Outlook mais tu peux utiliser un COMMONDIALOG (Feuille Microsoft Forms 2.0) sur un userform.

  3. #3
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    Pour cela tu peux utiliser les APIs, l'avantage c'est que tu n'a pas pas besoin de références et cette méthode peut être distribuée sans soucis

    Code à placer dans un module :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     'Déclaration de l'API
    Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                       "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
     
     'Structure du fichier
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
     
     'Constantes
    Private Const OFN_READONLY = &H1
    Private Const OFN_OVERWRITEPROMPT = &H2
    Private Const OFN_HIDEREADONLY = &H4
    Private Const OFN_NOCHANGEDIR = &H8
    Private Const OFN_SHOWHELP = &H10
    Private Const OFN_ENABLEHOOK = &H20
    Private Const OFN_ENABLETEMPLATE = &H40
    Private Const OFN_ENABLETEMPLATEHANDLE = &H80
    Private Const OFN_NOVALIDATE = &H100
    Private Const OFN_ALLOWMULTISELECT = &H200
    Private Const OFN_EXTENSIONDIFFERENT = &H400
    Private Const OFN_PATHMUSTEXIST = &H800
    Private Const OFN_FILEMUSTEXIST = &H1000
    Private Const OFN_CREATEPROMPT = &H2000
    Private Const OFN_SHAREAWARE = &H4000
    Private Const OFN_NOREADONLYRETURN = &H8000
    Private Const OFN_NOTESTFILECREATE = &H10000
     
    Private Const OFN_SHAREFALLTHROUGH = 2
    Private Const OFN_SHARENOWARN = 1
    Private Const OFN_SHAREWARN = 0
     
     
    Public Function OuvrirUnFichier(Titre As String, _
                                    TypeRetour As Byte, _
                                    Optional TitreFiltre As String, _
                                    Optional TypeFichier As String, _
                                    Optional RepParDefaut As String) As String
     'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
     'la boîte de dialogue de sélection d'un fichier.
     'Explication des paramètres
        'Handle = le handle de la fenêtre (Me.Hwnd)
        'Titre = Titre de la boîte de dialogue
        'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction)
            '1 = Chemin complet + Nom du fichier
            '2 = Nom fichier seulement
        'TitreFiltre = Titre du filtre
            'Exemple: Fichier Access
            'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        'TypeFichier = Extention du fichier (Sans le .)
            'Exemple: MDB
            'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        'RepParDefaut = Répertoire d'ouverture par defaut
            'Exemple: C:\windows\system32
            'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application
     
    Dim StructFile As OPENFILENAME
    Dim sFiltre As String
     
     'Construction du filtre en fonction des arguments spécifiés
    If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
      sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
    End If
    sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
     
     
     'Configuration de la boîte de dialogue
      With StructFile
        .lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure
        '.hwndOwner = Handle 'Identification du handle de la fenêtre
        .lpstrFilter = sFiltre 'Application du filtre
        .lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254
        .nMaxFile = 254 'Taille maximale du fichier
        .lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254
        .nMaxFileTitle = 254  'Taille maximale du nom du fichier
        .lpstrTitle = Titre 'Titre de la boîte de dialogue
        .flags = OFN_HIDEREADONLY  'Option de la boite de dialogue
        .lpstrInitialDir = "C:\"    'Chemin
     
      End With
     
    If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné
        Select Case TypeRetour
          Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1))
          Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1))
        End Select
      End If
     
    End Function
    Appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox OuvrirUnFichier("BD Open", 1, "All", "*")
    Merci à shwin pour ce code (issu de la FAQ Access)

    Dolphy

  4. #4
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 139
    Points : 178
    Points
    178
    Par défaut
    Bonsoir,

    J'ai pas compris la question, ton appli est dans quel langage ?

    A bientôt

  5. #5
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    MErci DOLPHY35, pour cette source je la met de coté.

    Pour Laurent je pense que c'est du VBA OUTLOOK

  6. #6
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 139
    Points : 178
    Points
    178
    Par défaut
    Oliv,

    Merci j'avais vu mais une appli développée par exemple en vb.net, il me semble que pour browser un disque. il y a un contrôle tout prêt.

    Alors pourquoi réinventé le ...

    A bientôt

  7. #7
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Tu as raison laurent, si tu crées un objet outlook à partir de word ou excel sans aller vers d'autres langages tu peux utiliser la boite de dialogue intégrèe dont parlait Daniel
    Application.FileDialog(msoFileDialogFilePicker)
    Et puis c'était avant tout une boutade

  8. #8
    Membre actif
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 240
    Points : 275
    Points
    275
    Par défaut
    Bonjour,

    Bon je rebondis sur ce sujet car j'ai essayer d'utliser cette méthode :

    Application.FileDialog

    mais bizarrement je n'arrive pas a créer l'object j'obtient cela comme message :
    "propritété ou méthode non défini par cette object"

    et en effet lorsque je fais ctrl+espace aprés avoir taper application, Filedialog ne s'affiche pas ...

    Autrement cette biblihiothéque ne semble pas charger pourtant lorsque je vais dans les références je trouve bien la bonne biblihiothéque ...

    Quelqu'un a déja eu ce probléme ?
    J'suis loin d'être un expert, seulement un passionné.
    L'humanité de l'homme ne reside que dans son intelligence. Certains l'on compris. D'autres ne le comprendront jamais... (Histrat)

  9. #9
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    SAlut,
    Dans quel logiciel se trouve ton code, si c'est outlook c'est normal (relire les posts)

  10. #10
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    FileDialog est dans la librairie Office il me semble.

    Pour l'utiliser, c'est assez simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TestDLG()
    Dim dlg As FileDialog
     
    Set dlg = Application.FileDialog(msoFileDialogFilePicker)
    dlg.Show
     
    Debug.Print dlg.SelectedItems(1)
     
    End Sub
    Dans le cas où tu n'autorises que la sélection d'un seul éléments.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  11. #11
    Membre actif
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 240
    Points : 275
    Points
    275
    Par défaut
    Hello,

    Tout d'abord merci pour vos réponses.

    Vu que j'ai tendance a être tétue j'ai fais quelque recherche, FileDialog n'est malheuresement pas supporter par outlook ... (pourquoi ???!!!! faut pas chercher je crois... c'est du microsoft MDRRRR)

    J'ai donc tenter autre chose créer un object Application.excel pour faire appel a partir de cette objet a son FileDialog mais là encore cela pose probléme car cela dépend de la configuration du poste client et surtout de la version d'excel installez (j'ai fais le teste et les versions trop vielles non pas FileDialog)...

    Donc j'ai fini par utiliser les fonctions de l'APIs et j'ai créer un module spéciale pour ma fonction de selection de répertoire :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    Private Const BIF_RETURNONLYFSDIRS As Long = &H1
    Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
    Private Const BIF_RETURNFSANCESTORS As Long = &H8
    Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
    Private Const BIF_BROWSEFORPRINTER As Long = &H2000
    Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
    Private Const MAX_PATH As Long = 260
     
    Type BrowseInfo
        hOwner As Long
        pidlRoot As Long
        pszDisplayName As String
        lpszINSTRUCTIONS As String
        ulFlags As Long
        lpfn As Long
        lParam As Long
        iImage As Long
    End Type
     
    Type SHFILEOPSTRUCT
        hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Boolean
        hNameMappings As Long
        lpszProgressTitle As String
    End Type
     
    Declare Function SHGetPathFromIDListA Lib "shell32.dll" ( _
        ByVal pidl As Long, _
        ByVal pszBuffer As String) As Long
     
    Declare Function SHBrowseForFolderA Lib "shell32.dll" ( _
        lpBrowseInfo As BrowseInfo) As Long
     
     
    Function BrowseFolder(Optional Caption As String = "") As String
     
    Dim BrowseInfo As BrowseInfo
    Dim FolderName As String
    Dim ID As Long
    Dim Res As Long
     
    With BrowseInfo
       .hOwner = 0
       .pidlRoot = 0
       .pszDisplayName = String$(MAX_PATH, vbNullChar)
       .lpszINSTRUCTIONS = Caption
       .ulFlags = BIF_RETURNONLYFSDIRS
       .lpfn = 0
    End With
     
    FolderName = String$(MAX_PATH, vbNullChar)
    ID = SHBrowseForFolderA(BrowseInfo)
    If ID Then
       Res = SHGetPathFromIDListA(ID, FolderName)
       If Res Then
           BrowseFolder = Left$(FolderName, InStr(FolderName, vbNullChar) - 1)
       End If
    End If
     
    End Function
    et on fais appel a la fonction avec ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Repertoire = BrowseFolder(Caption:="Selectionner un dossier")
            If Repertoire = vbNullString Then
                Debug.Print "Aucun dossier sélectionner"
                Exit Sub
            End If
    Merci encore pour vos participations même si je me suis finalement débrouiller tout seul mais ce sujet m'a pas mal mis sur la piste
    J'suis loin d'être un expert, seulement un passionné.
    L'humanité de l'homme ne reside que dans son intelligence. Certains l'on compris. D'autres ne le comprendront jamais... (Histrat)

  12. #12
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Il est dans la bibliothèque Office !
    Qui n'est pas automatiquement ajoutée au projet il est parfois nécessaire de l'ajouter au projet manuellement.

    Microsoft Office 11.0 Object Library
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  13. #13
    Membre actif
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 240
    Points : 275
    Points
    275
    Par défaut
    J'ai déjà essayer ça mais apparement il me charge Microsoft Office 9.0 Object Library ... donc bon l'APIs semble être le moyen de contourment idéal...

    Par contre petite question savez ou je peux trouvez une doc sur les différentes focntion de l'API car j'aimerais faire aussi de la comparaison d'image via le vba mais je ne sais pas trop comment faire...
    J'suis loin d'être un expert, seulement un passionné.
    L'humanité de l'homme ne reside que dans son intelligence. Certains l'on compris. D'autres ne le comprendront jamais... (Histrat)

  14. #14
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je pense qu'il faut au moins avoir 2003 pour utiliser un objet FileDialog.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  15. #15
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par ben_ghost Voir le message
    J'ai déjà essayer ça mais apparement il me charge Microsoft Office 9.0 Object Library ... donc bon l'APIs semble être le moyen de contourment idéal...
    cela dépend de ta version 11= OFFICE 2003 , 9 ca doit etre office xp
    Par contre petite question savez ou je peux trouvez une doc sur les différentes focntion de l'API car j'aimerais faire aussi de la comparaison d'image via le vba mais je ne sais pas trop comment faire...
    Pour travailler sur des images je te conseille de consulter la page d'arkham46
    ci-dessous
    http://arkham46.developpez.com/

  16. #16
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Citation Envoyé par Oliv- Voir le message
    cela dépend de ta version 11= OFFICE 2003 , 9 ca doit etre office xp

    Pour travailler sur des images je te conseille de consulter la page d'arkham46
    ci-dessous
    Le premier post mentionnait 2003.
    D'où le danger de poster à la suite d'une autre demande.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut FileDialog sous Outlook ... un grand merci.
    Bonjour à tous,
    Bonjour Ben

    Comme précisé dans la discussion, FileDialog sous Outlook n'existe pas !
    Belle connerie ... Tout le monde s'accorde là dessus.

    Merci donc pour ce code que je viens de tester, ça marche et répond à 80% à ce que je cherchais ! ... le bol !

    Mais comme j'aurai pu travailler chez Balzen, il m'en faut toujours plus !...
    Le plus serait de pouvoir positionner l'explorateur sur un dossier par défaut ... Fourni en paramètre d'appel de la fonction par exemple ...

    Serait-ce trop demander à notre brillant développeur de compléter sa macro ?! ....

    Ben, un grand merci d'avance !!


    Citation Envoyé par ben_ghost Voir le message
    Hello,

    Tout d'abord merci pour vos réponses.

    Vu que j'ai tendance a être tétue j'ai fais quelque recherche, FileDialog n'est malheuresement pas supporter par outlook ... (pourquoi ???!!!! faut pas chercher je crois... c'est du microsoft MDRRRR)

    J'ai donc tenter autre chose créer un object Application.excel pour faire appel a partir de cette objet a son FileDialog mais là encore cela pose probléme car cela dépend de la configuration du poste client et surtout de la version d'excel installez (j'ai fais le teste et les versions trop vielles non pas FileDialog)...

    Donc j'ai fini par utiliser les fonctions de l'APIs et j'ai créer un module spéciale pour ma fonction de selection de répertoire :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    Private Const BIF_RETURNONLYFSDIRS As Long = &H1
    Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
    Private Const BIF_RETURNFSANCESTORS As Long = &H8
    Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
    Private Const BIF_BROWSEFORPRINTER As Long = &H2000
    Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
    Private Const MAX_PATH As Long = 260
     
    Type BrowseInfo
        hOwner As Long
        pidlRoot As Long
        pszDisplayName As String
        lpszINSTRUCTIONS As String
        ulFlags As Long
        lpfn As Long
        lParam As Long
        iImage As Long
    End Type
     
    Type SHFILEOPSTRUCT
        hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Boolean
        hNameMappings As Long
        lpszProgressTitle As String
    End Type
     
    Declare Function SHGetPathFromIDListA Lib "shell32.dll" ( _
        ByVal pidl As Long, _
        ByVal pszBuffer As String) As Long
     
    Declare Function SHBrowseForFolderA Lib "shell32.dll" ( _
        lpBrowseInfo As BrowseInfo) As Long
     
     
    Function BrowseFolder(Optional Caption As String = "") As String
     
    Dim BrowseInfo As BrowseInfo
    Dim FolderName As String
    Dim ID As Long
    Dim Res As Long
     
    With BrowseInfo
       .hOwner = 0
       .pidlRoot = 0
       .pszDisplayName = String$(MAX_PATH, vbNullChar)
       .lpszINSTRUCTIONS = Caption
       .ulFlags = BIF_RETURNONLYFSDIRS
       .lpfn = 0
    End With
     
    FolderName = String$(MAX_PATH, vbNullChar)
    ID = SHBrowseForFolderA(BrowseInfo)
    If ID Then
       Res = SHGetPathFromIDListA(ID, FolderName)
       If Res Then
           BrowseFolder = Left$(FolderName, InStr(FolderName, vbNullChar) - 1)
       End If
    End If
     
    End Function
    et on fais appel a la fonction avec ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Repertoire = BrowseFolder(Caption:="Selectionner un dossier")
            If Repertoire = vbNullString Then
                Debug.Print "Aucun dossier sélectionner"
                Exit Sub
            End If
    Merci encore pour vos participations même si je me suis finalement débrouiller tout seul mais ce sujet m'a pas mal mis sur la piste

  18. #18
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    SAlut,
    Jette un oeil à cette solution :
    http://www.developpez.net/forums/d14...u/#post7652773

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci Oliv.

    J'avais trouvé sur le site une autre solution qui me convenait aussi (sans ouverture Excel) ... Malheureusement, je me suis précipité sur l'essai et ne saurai retrouver / citer l'auteur de la solution ...

    Maintenant j'hésite :
    D'un côté, la solution 'X' qui n'ouvre pas une autre application (donc pas de logo Excel) mais dont je ne maîtrise pas les arcanes ...
    De l'autre, 'ta' solution que je comprends déjà beaucoup plus et que je pourrais améliorer à l'occasion (qui sait ?!).

    A défaut de citer les sources, je partage ...
    Voici donc (voir PJ) ma solution Outlook "Sauvegarde et effacement des PJs" finalisée ... ou presque.
    Je dis "ou presque" car il me faut encore 'extraire du code' le paramétrage de la constante 'RootDir'.
    J'envisage la lecture d'un fichier texte dans un répertoire "UserRoot" d'un fichier texte qui fournirait le fameux répertoire "RootDir".

    Pour info, cette solution est un patchwork de choses récupérées à droite à gauche et de développements personnels.

    Encore merci.
    Fichiers attachés Fichiers attachés

  20. #20
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    re,
    Es-tu sûr de ta fonction de suppression CB_SupprimerSelection_Click() ?

    en principe pour supprimer des pj on commence par le fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For IPJ compteur to 1 step -1
     
    next i
    regarde ce code te donneras surement des idées
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    '*************** Et la procédure à lancer depuis le mail ouvert
    Public Sub Supprime_PJ()
    ' Ecrit par Fabrice NEBBIA
    ' Grace au travail de Géo, Anacoluthe, Isabelle Prawitz et Olivier CATTEAU
     
    ' Supprime les PJ du mail actif et insère le nom des PJ dans le corps du message
     
        Dim Courrier As MailItem
        Dim NomsPJ As String
     
        Dim NbPJ As Integer
        Dim i As Integer
        Dim pj As Attachment
        Dim Separateur As Variant
        Dim NbTiret As Integer
     
    If Application.ActiveInspector Is Nothing Then Exit Sub
     
    If MsgBox("Cette macro va supprimer les pièces jointes du mail et les remplacer par leur nom", _
    vbYesNo + vbQuestion, "Etes vous sûr de vouloir exécuter cette macro ?") = vbNo Then Exit Sub
     
        Set Courrier = ActiveInspector.CurrentItem
        If Courrier Is Nothing Then Exit Sub
     
        Select Case Courrier.BodyFormat
            Case olFormatHTML:
                Separateur = "<BR>"
                NbTiret = 45
            Case olFormatPlain:
                Separateur = Chr(10)
                NbTiret = 35
            Case Else
                Separateur = " - "
                NbTiret = 50
        End Select
     
        NbPJ = Courrier.Attachments.Count
        If NbPJ = 0 Then
            MsgBox "Le messages en cours ne contient pas de pièce jointe"
            Exit Sub
        End If
     
        NomsPJ = IIf(NbPJ = 1, "Pièce jointe supprimée", "Pièces jointes supprimées") & " du message initial après lecture: " & Separateur & String(NbTiret, "-")
     
        For i = NbPJ To 1 Step -1
            Set pj = Courrier.Attachments(i)
            PJType = TypePJ(Courrier.EntryID, pj.Index)
            If PJType = "" Then
                NomsPJ = NomsPJ & Separateur & "- " & pj.FileName
                pj.Delete
            Else
                If MsgBox(pj.FileName & ": est une image ou un élément incorporé dans le corps du mail", vbYesNo, "Supprimer cette élément ?") = vbYes Then
                NomsPJ = NomsPJ & Separateur & "- " & pj.FileName & "(incorporé)"
                pj.Delete
                End If
            End If
     
        Next
     
        Select Case Courrier.BodyFormat
            Case olFormatHTML:
     
            OuCommenceAdresse = InStr(1, Courrier.HTMLBody, "<BODY", vbTextCompare)
            If OuCommenceAdresse > 0 Then
                fin = InStr(OuCommenceAdresse + 5, Courrier.HTMLBody, ">") + 1
                BaliseBody = Mid(Courrier.HTMLBody, OuCommenceAdresse, fin - OuCommenceAdresse)
     
                Courrier.HTMLBody = Replace(Courrier.HTMLBody, BaliseBody, BaliseBody & "<font style='font-family: Tahoma ;font-size: 8pt ;color:#808080;font-style: italic;'>" & NomsPJ & "</font><BR>" _
                    & "<font style='font-family: Tahoma ;font-size: 8pt ;color:#808080;font-style: italic;'>" & String(NbTiret, "-") & "</font><BR><BR>", 1, 1, vbTextCompare)
            Else: Courrier.HTMLBody = "<font style='font-family: Tahoma ;font-size: 8pt ;color:#808080;font-style: italic;'>" & NomsPJ & _
                    "</font><BR>" & "<font style='font-family: Tahoma ;font-size: 8pt ;color:#808080;font-style: italic;'>" & String(NbTiret, "-") & "</font><BR><BR>" & Courrier.HTMLBody
     
            End If
            Case Else
                Courrier.Body = NomsPJ & Chr(10) & String(NbTiret, "-") & Chr(10) & Chr(10) & Courrier.Body
     
        End Select
     
     
        ' A activer pour enregistrer automatiquement les modifs
        'Courrier.Save
     
     
    End Sub
     
     Function TypePJ(ByVal StrEntryID As String, attindex As Integer) As Variant
    ' Ecrit par Olivier CATTEAU
    ' Nécessite la référence à la librairie Microsoft CDO 1.21
     
    ' Le retour est <>"" si la PJ est la PJ zest un objet inséré dans le mail HTML
     
    Dim oSession As Object 'MAPI.Session
      ' CDO objects
      Dim oMsg As Object 'MAPI.Message
      Dim oAttachs As Object 'MAPI.Attachments
      Dim oAttach As Object 'MAPI.Attachment
     
      ' initialize CDO session
      On Error Resume Next
      Set oSession = CreateObject("MAPI.Session")
      oSession.Logon "", "", False, False
     
      ' get the message created earlier
      Set oMsg = oSession.GetMessage(StrEntryID)
      ' set properties of the attached graphic that make
      ' it embedded and give it an ID for use in an <IMG> tag
      Set oAttachs = oMsg.Attachments
      Set oAttach = oAttachs.Item(attindex)
      Dim strCID As String
      strCID = oAttach.Fields(&H3712001E)
     
      TypePJ = strCID
      Set oMsg = Nothing
      oSession.Logoff
      Set oSession = Nothing
     
    End Function
    dans TargetDir tu dois remplacer les autres caractères interdits:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function remplaceCaracteresInterdit(ByVal CheminStr As String)
        Dim ObjCurrentMessage As Outlook.MailItem
     
        Dim liste As Variant
        Dim L
        liste = Array("\", "/", ":", "*", "?", "<", ">", "|", ".", """", vbTab, Chr(7))
        For L = 0 To UBound(liste)
            CheminStr = Replace(CheminStr, liste(L), "")
        Next L
        remplaceCaracteresInterdit = CheminStr
        'MsgBox CheminStr
    End Function

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

Discussions similaires

  1. [XL-2003] VBA : collage spécial Meta fichier dans email Outlook
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/04/2010, 15h20
  2. [VBA - Outlook] Ouvrir un fichier en VBA
    Par crashyear dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 06/02/2007, 12h25
  3. Envoi d'un mail en VBA: outlook ne se lance pas
    Par Hannibal dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/06/2003, 15h24
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07
  5. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 14h30

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