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] Fonction "Enregistrer sous"


Sujet :

VBA Outlook

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut [VBA - Outlook] Fonction "Enregistrer sous"
    Bonjour,

    J'essaye de créer une macro qui me permettrait d'afficher la fenêtre "Enregistrer sous" avec un emplacement défini ainsi que le type de donnée (ici .msg).

    J'ai déjà fait cette fonction dans Excel. J'ai essayé de l'adapter à Outlook mais ça ne fonctionne pas malgrés mes recherches sur Internet.
    Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub enregistrer()
     
    Application.Dialogs(olDialogSaveAs).Show
     
    End Sub
    Pouvez-vous m'aider s'il vous plait ?

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pourquoi ne pas utiliser les fonctions API pour afficher les boîtes de dialogues ?

    (dispo sur la FAQ Access du site)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    J'ai essayé d'utiliser les API mais ça ne fonctionne pas.
    Il faut dire que je m'y connais pas trop en VBA. Je fais plutôt des fonctions très simples.

    Voici ce que j'ai tapé :
    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
     
    Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
            Alias "GetSaveFileNameAs" (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
    Function EnregistrerUnFichier(Handle As Long, Titre As String, _
                        NomFichier As String, Chemin As String) As String
     
     'EnregistrerUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
    la boîte de dialogue d'enregistrement d'un fichier.
     'Explication des paramètres
        'Handle = le handle de la fenêtre (Me.Hwnd)
        'Titre = Titre de la boîte de dialogue
        'NomFichier = Nom par défaut du fichier à enregistrer
        'Chemin = Chemin par défaut du fichier à enregistrer
     
    Dim structSave As OPENFILENAME
     
    With structSave
        .lStructSize = Len(structSave)
        .hWndOwner = Handle
        .nMaxFile = 255
        .lpstrFile = NomFichier & String$(255 - Len(NomFichier), 0)
        .lpstrInitialDir = Chemin
        .lpstrFilter = "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0) 'Définition du filtre (aucun)
        .Flags = &H4  'Option de la boite de dialogue
    End With
     
    If (GetSaveFileName(structSave)) Then
        EnregistrerUnFichier = Mid$(structSave.lpstrFile, 1, InStr(1, structSave.lpstrFile, vbNullChar) - 1)
    End If
     
    End Function
    Et le lien pour la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub essai()
     
    MsgBox EnregistrerUnFichier(Me.hwnd, "Enregistrer sous", "Test.msg", "C:\")
     
    End Sub
    Quand je l'exécute, il me met une erreur au niveau du "Me.hwnd" ==> "utilisation incorrect du mot clé Me"

    Pouvez-vous m'aider ?

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EnregistrerUnFichier(0, "Enregistrer sous", "Test.msg", "C:\")

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 344
    Points : 158
    Points
    158
    Par défaut
    dans outlook , tool /vba editor

    copy & paste 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
     
     
    Sub Save_Doc_Attachment()
     
        'Declaration
        Dim myItems, myItem, myAttachments, myAttachment As Object
        Dim myOrt As String
        Dim myOlApp As New Outlook.Application
        Dim myOlExp As Outlook.Explorer
        Dim myOlSel As Outlook.Selection
     
        Dim extension As String
        Dim nameattach As String
        Dim mypath As String
     
        mypath = "D:\testout\"
     
        'Ask for destination folder
        myOrt = InputBox("Destination", "Save Attachments", mypath)
     
        On Error Resume Next
     
        'work on selected items
        Set myOlExp = myOlApp.ActiveExplorer
        Set myOlSel = myOlExp.Selection
     
        'for all items do...
        For Each myItem In myOlSel
     
        Debug.Print myItem
     
            'point on attachments
            Set myAttachments = myItem.Attachments
     
            'if there are some...
            If myAttachments.Count > 0 Then
     
            Debug.Print myAttachments.Count
     
                'for all attachments do...
                For i = 1 To myAttachments.Count
     
                Debug.Print i
     
                    'save them to destination
                    Debug.Print myAttachments(i)
     
                    extension = Right(myAttachments(i), 3)
                    Debug.Print extension
     
                    If ((extension = "doc") Or (extension = "DOC")) Then
     
                    myAttachments(i).SaveAsFile myOrt & _
                        myAttachments(i).DisplayName
     
                    nameattach = nameattach + myAttachments(i) & vbLf
                    Debug.Print nameattach
     
                    End If
     
                Next i
     
     
            End If
     
        Next
     
        MsgBox (nameattach & " is/are saved ")
     
        'free variables
        Set myItems = Nothing
        Set myItem = Nothing
        Set myAttachments = Nothing
        Set myAttachment = Nothing
        Set myOlApp = Nothing
        Set myOlExp = Nothing
        Set myOlSel = Nothing
     
    End Sub

    essaie de t'imspiré de ca , cette macro ne sauvegarde les docs dans un email,


    l'email doit etre ouvert et tu lances ta macro avec un bouton sur ton mail


    en fait myAttachments(i) sont tes pieces jointes


    et myAttachments(i).SaveAsFile myOrt & _
    myAttachments(i).DisplayName

    sert a sauvegarde dans le chemin que ta donné (myort)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par cafeine
    Hello,

    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EnregistrerUnFichier(0, "Enregistrer sous", "Test.msg", "C:\")
    Ca résoud mon problème d'erreur mais ça ne fonctionne toujours pas.

    J'arrive à avoir la boite de dialogue "enregistrer sous", je fait OK là où je veux l'enregistrer.
    J'ai eu une popup qui s'affiche avec le chemin de mon enregistrement mais quand je regarde sur mon disque, je n'ai rien du tout d'enregistré.

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ce code ne permet pas d'enregistrer un fichier mais seulement d'obtenir un nom de fichier qu'on peu ensuite utilisé..pour l'enregistrement...!

    que désirez vous mettre dans ce fichier ..?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par megapacman

    essaie de t'imspiré de ca , cette macro ne sauvegarde les docs dans un email,


    l'email doit etre ouvert et tu lances ta macro avec un bouton sur ton mail


    en fait myAttachments(i) sont tes pieces jointes


    et myAttachments(i).SaveAsFile myOrt & _
    myAttachments(i).DisplayName

    sert a sauvegarde dans le chemin que ta donné (myort)
    Je n'arrive pas trop à comprendre comment faire.
    J'ai essayé sans rien changer et ça m'affiche une boite de dialogue personnalisée mais moi je voudrais le boite de dialogue "Enregistrer sous" directement avec des paramètres personnalisés (extension, chemin par défaut, ...).

    J'ai fait une macro à ma sauce pour afficher la bonne boite de dialogue mais ça ne fonctionne pas. Pourtant la macro provient de l'aide VBA d'Outlook.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub essai()
     
    Dim fs As FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    fd.Show
     
    End Sub

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par bbil
    ce code ne permet pas d'enregistrer un fichier mais seulement d'obtenir un nom de fichier qu'on peu ensuite utilisé..pour l'enregistrement...!

    que désirez vous mettre dans ce fichier ..?
    Je veux pouvoir afficher la boite de dialogue "Enregistrer sous " avec des paramètres personnalisés.
    Je sélectionne un message dans mon boite de réception sans forcément l'ouvrir et quand je clique sur le bouton lié à ma macro, la boite de dialogue s'affiche.

    Et quand je clique sur OK, le message s'enregistre en .msg

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Ok,
    alors ça marche comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strPath as String
    strPath = EnregistrerUnFichier(0, "Enregistrer sous", "Test.msg", "C:\")
    If Len(strPath) > 0 Then
       myAttachments(i).SaveAsFile strPath
    End If

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par cafeine
    Ok,
    alors ça marche comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strPath as String
    strPath = EnregistrerUnFichier(0, "Enregistrer sous", "Test.msg", "C:\")
    If Len(strPath) > 0 Then
       myAttachments(i).SaveAsFile strPath
    End If
    Je n'y arrive pas.
    Y a-t-il des modifications à faire dans le code que tu m'as passé ?

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Oui, il faut que tu adaptes ce code pour désigner un MailItem (objet mail) ...

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set mail = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items(1)
    For Each i=1 In Mail.Attachments.count
      Mail.Attachments(i).SaveAsFile EnregistrerUnFichier(0, _
             "Enregistrer sous", "Test.msg", "C:\")
    Next i

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par cafeine
    Oui, il faut que tu adaptes ce code pour désigner un MailItem (objet mail) ...

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set mail = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items(1)
    For Each i=1 In Mail.Attachments.count
      Mail.Attachments(i).SaveAsFile EnregistrerUnFichier(0, _
             "Enregistrer sous", "Test.msg", "C:\")
    Next i
    Je n'y arrive toujours pas.
    Il me met "Incompatibilité de type".

  14. #14
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    oops je me suis mélangé ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Machin()
     
    Set mail = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items(1)
    if Mail.attachments.count > 0 Then
       For i = 1 To mail.Attachments.Count
         mail.Attachments(i).SaveAsFile EnregistrerUnFichier(0, _
                "Enregistrer sous", "Test.msg", "C:\")
       Next i
    else
       msgbox "Pas de piece jointe pour ce mail !"
    end if
     
    End Sub

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par cafeine
    oops je me suis mélangé ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Machin()
     
    Set mail = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items(1)
    if Mail.attachments.count > 0 Then
       For i = 1 To mail.Attachments.Count
         mail.Attachments(i).SaveAsFile EnregistrerUnFichier(0, _
                "Enregistrer sous", "Test.msg", "C:\")
       Next i
    else
       msgbox "Pas de piece jointe pour ce mail !"
    end if
     
    End Sub
    Ca ne fonctionne toujours pas.
    Que je sélectionne un message sans pièce jointe ou avec pièce jointe, il me renvoit toujours le message "Pas de pièce jointe pour ce mail !".

    D'après ce que je comprends cette macro enregistre les pièces jointes d'un mail mais moi, j'aimerais enregistrer le mail entier sous forme msg.

  16. #16
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    ok alors beaucoup plus simple :

    permet d'enregistrer les mails sélectionnés !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set explo= Application.ActiveExplorer
    set mails = explo.selection
    For i = 1 to Mails.count
      mails(i).SaveAs EnregistrerUnFichier(0, _
                "Enregistrer sous", "Test.msg", "C:\")
    Next i

  17. #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par cafeine
    ok alors beaucoup plus simple :

    permet d'enregistrer les mails sélectionnés !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set explo= Application.ActiveExplorer
    set mails = explo.selection
    For i = 1 to Mails.count
      mails(i).SaveAs EnregistrerUnFichier(0, _
                "Enregistrer sous", "Test.msg", "C:\")
    Next i
    Merci ça fonctionne impec et les pièce jointes restent attachées.
    Comment je pourrais modifier cette macro, pour que le nom par défaut du fichier enregistré soit le nom du mail ?

    Remplacer "Test.msg" par une variable & ".msg" ==> comment dire à la variable de prendre le sujet du mail ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Voilà j'ai essayé de modifier le code pour afficher le sujet comme nom d'enregistrement.
    La variable que je définis prend bien le sujet du mail mais par contre, il ne veut pas se mettre dans la boite de dialogue. Il me renvoit toujours une erreur.

    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
    Dim NameFile As String
     
    Set explo = Application.ActiveExplorer
    Set mails = explo.Selection
     
    For i = 1 To mails.Count
      NameFile = mails.Item(i)
      MsgBox NameFile
      mails(i).SaveAs EnregistrerUnFichier(0, _
                "Enregistrer sous", NameFile, "P:\")
    Next i
     
    i = i - 1
     
    MsgBox "Nombre de messages enregistrés : " & i
     
    End Sub

  19. #19
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    dans ce cas ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set explo= Application.ActiveExplorer
    set mails = explo.selection
    For i = 1 to Mails.count
      mails(i).SaveAs EnregistrerUnFichier(0, _
                "Enregistrer sous", Mail(i).subject & ".msg", "C:\")
    Next i

  20. #20
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par cafeine
    dans ce cas ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set explo= Application.ActiveExplorer
    set mails = explo.selection
    For i = 1 to Mails.count
      mails(i).SaveAs EnregistrerUnFichier(0, _
                "Enregistrer sous", Mail(i).subject & ".msg", "C:\")
    Next i
    Il me met toujours la même erreur :
    "Argument ou appel de procédure incorrect"

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/05/2009, 16h40
  2. Réponses: 2
    Dernier message: 29/11/2008, 17h55
  3. [VBA/Excel] Fonction open sous Excel 97
    Par nico01984 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/01/2006, 14h19
  4. [VBA-E] Enregistrer sous un autre format
    Par Bashaq dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/10/2005, 23h33

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