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 :

[Macro] Impression plusieurs pièces jointes de plusieurs mails sélectionnés.


Sujet :

VBA Outlook

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut [Macro] Impression plusieurs pièces jointes de plusieurs mails sélectionnés.
    Salut à tous,
    J'ai trouvé une macro qui devrait faire ça mais elle ne s'applique pas chez moi, j'ai un message d'erreur.

    Pourriez-vous me dire pourquoi ?

    Nom : unnamed.jpg
Affichages : 969
Taille : 182,3 Ko

    J'aimerai également qu'il puisse imprimer des documents word, c'est possible de rajouter qque chose pour qu'il imprime les 2 ? Voir même du jpeg ?

    merci d'avance

    Ci dessous le code : (le code a été trouvé ici)

    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
     
    'en tête de module
    'ceci est un code de GEO
     Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hWnd As Long, ByVal lpszOp As String, _
        ByVal lpszFile As String, ByVal lpszParams As String, _
        ByVal lpszDir As String, ByVal fsShowCmd As Long) As Long
     
    'la macro
    Sub printPDF(chems)
    Dim Res As Long
    Dim chemin_de_MaPj As String
    'chemin_de_MaPj = "c:\temp\test.pdf"
    chemin_de_MaPj = chems
    Res = ShellExecute(0, "print", chemin_de_MaPj, "", "", 0)
    End Sub
     
     
     
    Sub ImprimePDFdeTouteLaSelection()
    '---------------------------------------------------------------------------------------
    ' Procedure : ImprimePDFdeTouteLaSelection
    ' Author    : Oliv'
    ' Date      : 26/11/2008
    ' Purpose   :
    '---------------------------------------------------------------------------------------
    '
     
        Dim MonOutlook As Outlook.Application
        Dim Mail As Object
        Dim LeMail As Outlook.MailItem
        Dim LesMails As Object
        Set MonOutlook = Outlook.Application
        Set LesMails = MonOutlook.ActiveExplorer.Selection
        For Each LeMail In LesMails
     
     
                Dim pj As Attachment
                For Each pj In LeMail.Attachments
                    If Right(UCase(pj.FileName), 4) = ".PDF" Then
                        LeFichier = "c:\temp\" & pj.FileName
                        pj.SaveAsFile (LeFichier)
                        'là tu mets ta fonction pour imprimer
                        Call printPDF(LeFichier)
     
                       DoEvents
                        Kill LeFichier
                        'supprime le fichier
                    End If
                Next pj
     
        Next LeMail
        Set LesMails = Nothing
        MsgBox "Opération terminée"
    End Sub

  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
    Le message vient du fait que tu n'a pas de end sub après Public Sub MACROIMPRIMALL()

    Il faut supprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub MACROIMPRIMALL()

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Effectivement, je te remercie Oliv-

    J'ai 2 autres questions :

    1) J'ai beaucoup de mail avec des pièces jointes + ou - importante en taille. La macro fonctionne bien sauf que à mon avis vu la taille, il y a qques fois un décalage qui m'arrive aussi si je le fais manuellement trop vite.
    Je m'explique, exemple, j'ai 5 mails avec 2 pièces jointes :

    L'imprimante sort :

    Mail 1 pièce jointe 1 pièce jointe 2
    Mail 2 pièce jointe 2...
    Mail 3 pièce jointe 1 pièce jointe 1 du mail 2 pièce jointe 2 du mail 3.

    Vous voyez ce que je veux dire ? Y a t'il un moyen de lui dire, attend que le mail 1 soit ok puis fait le mail 2. Genre caller un délai de 10 sec entre.
    Car sinon je suis obligé de tout retrier.

    2) C'est possible de rajouter en + des pdf, les pièces word et jpeg ?
    Genre en rajouter à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Right(UCase(pj.FileName), 4) = ".PDF" Then
    = ".pdf" ".doc" ".jpg" Then
    Je n'ai pas encore su tester, ça fonctionnerait comme ça ? Ou il faut ajouter autre chose ?

    Question bonus, vers quel tuto je dois me tourner pour apprendre ce langage ? (Outlook et excel) pour comprendre pq on met tel ligne et ce qu'elle fait ?

    Un grand merci d'avance

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Petit Up

    Pour le 1 je ne sais toujours pas
    Et le 2 j'ai testé ça fonctionne pas… Il faut que si c'est pas un pdf mais un .jpg ou .xlsx qu'il l'imprime aussi...

  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
    Bonjour,

    Il est conseillé pour des fichiers "Office" comme Excel et Word d'utiliser l'automation du programme en question pour imprimer (= piloter le programme par programme).

    L'inconvénient de la méthode ShellExecute , c'est effectivement qu'elle n'attends pas la fin pour passer au suivant et que cela imprime sur l’imprimante par défaut et sur le logiciel par défaut pour ce type de fichier

    tu verras que cela peut poser des problèmes certains logiciels demandent des actions, notamment pour les images.

    Voici une autre méthode, qui n'est pas optimale non plus, le mieux c'est de tout convertir en PDF de fusionner les PDF et d'imprimer ce PDF, mais c'est du boulot ...

    pour les extensionS de fichier il faut LES mettre en MAJUSCULES

    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
    Sub ImprimeTouteLaSelection_Invoke()
    '---------------------------------------------------------------------------------------
    ' Procedure : ImprimeTouteLaSelection_Invoke
    ' Author    : Oliv'
    ' Date      : 12/06/2019
    ' Purpose   :
    '---------------------------------------------------------------------------------------
    '
     
        Dim MonOutlook As Outlook.Application
        Dim Mail As Object
        Dim LeMail As Outlook.MailItem
        Dim LesMails As Object
        Dim Impression As Boolean
        Set MonOutlook = Outlook.Application
        Set LesMails = MonOutlook.ActiveExplorer.Selection
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        DossierTemp = "C:\TEMP\PRINTtemp"
     
        For Each LeMail In LesMails
     
     
            Dim pj As Attachment
            For Each pj In LeMail.Attachments
     
                '   ICI on applique des FILTRES SUR LES PJ
                Select Case UCase(Fso.GetExtensionName(pj.FileName))
                Case "BMP", "TIF", "PCX", "JPG", "IMG", "PCT", "PNG", "DCX", "XIF", "GIF"
                    Impression = True
     
                Case "XLSX", "XLSM", "XLAM", "CSC"
                    Impression = False
     
                Case "XLS"
                    Impression = False
     
                Case "PDF"
                    Impression = True
     
                Case Else
                    'ici pour tous les autres
                    Impression = False
                End Select
     
     
                If Impression Then
                    LeFichier = DossierTemp & "\" & pj.FileName
                    pj.SaveAsFile (LeFichier)
                End If
            Next pj
     
            'on imprime ici
            PrintFilesV2 DossierTemp, "*.*"
     
            'on supprime les fichiers
            DoEvents
            On Error Resume Next
            Kill DossierTemp & "\*.*"
            Impression = False
     
        Next LeMail
        Set LesMails = Nothing
        MsgBox "Opération terminée"
    End Sub
     
     
    Public Sub PrintFiles(ByRef vDir As Variant, ByRef sFileSpec As String)
        Const SHCONTF_NONFOLDERS = &H40&
     
        With CreateObject("Shell.Application")
            With .Namespace(vDir).Items
                .Filter SHCONTF_NONFOLDERS, sFileSpec
                .InvokeVerbEx "Print"
            End With
        End With
    End Sub
     
    Public Sub PrintFilesV2(ByRef vDir As Variant, ByRef sFileSpec As String)
        Const SHCONTF_NONFOLDERS = &H40&
        Dim objShell As Object
        DoEvents
        Set objShell = CreateObject("Shell.Application")
        Set its = objShell.Namespace(vDir).Items
        its.Filter SHCONTF_NONFOLDERS, sFileSpec
        For i = 0 To its.Count - 1
            its.Item(i).InvokeVerbEx ("Print")
        Next
        Set objShell = Nothing
    End Sub

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 16
    Points
    16
    Par défaut
    Un grand merci à toi Oliv- je vais tester ça lundi

    J'avais lu dans un autre poste il me semble une fonction Sleep qui pourrait faire un petit "délai" entre chaque fichier pour éviter justement (je pense) ce mélage de fichier entre les mails, pour que si le fichier 3 qui est trop volumineux ne s'imprime pas en 5ème par exemple.
    Je vais essayer de retrouver cela et de l'adapter.

    Encore merci

Discussions similaires

  1. Envoyer plusieurs pièces jointes dans un mail
    Par totor92290 dans le forum IHM
    Réponses: 16
    Dernier message: 02/03/2016, 14h19
  2. Réponses: 2
    Dernier message: 03/10/2012, 15h39
  3. Réponses: 3
    Dernier message: 26/11/2008, 18h00
  4. Réponses: 1
    Dernier message: 09/06/2008, 11h42

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