VBA Filtre+Impression sélection PDF+Envoi PDF

Bonjour, étant loin d'être à l'aise avec les codes VBA. Est-il possible d'avoir un code VBA, me permettant de faire un filtre sur une sélection de cellule et en fonction du résultat du filtre faire un envoi PDF par email uniquement de cette sélection.

Dans le fichier exemple, et notamment dans l'onglet "Modele_Sem", j'aimerai sur la sélection A103:M109, faire un filtre sur la colonne H "EMMENER OU RECUPERER" et en fonction du résultat faire un envoi pdf de cette sélection avec un texte différents dans le corps du mail.

  • Si le filtre est "EMMENER", alors :
    Le titre de l'email serait "Véhicules à convoyer"
  • Le corps du mail serait "Bonjour, veuillez trouver ci-joint la liste des véhicules à emmener ce soir"
  • La pièce jointe serait le PDF de la sélection portant comme nom "Véhicules à emmener 2019-03-30" avec la date du jour à la fin.
  • Si le filtre est "RECUPERER", alors :
    Le titre de l'email serait "Véhicules récupérés"
  • Le corps du mail serait "Bonjour, veuillez trouver ci-joint la liste des véhicules qui ont été récupérés cette nuit"
  • La pièce jointe serait le PDF de la sélection portant comme nom "Véhicules récupérés 2019-03-30" avec la date du jour à la fin.

Est-ce que cela est possible, ou totalement irréalisable.

Merci de votre aide.

84exemple.xlsm (319.65 Ko)

Bonjour,

voici un exemple,

'Nécessite d'activer la référence "Microsoft Outlook Library"

Sub SendEmail_RECUPERER()
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim fichier As String

Set olApp = CreateObject("outlook.application")
Set olMail = olApp.CreateItem(olMailItem)

fichier = ThisWorkbook.Path & "\" & "Véhicules récupérés " & Date & ".pdf"

Call Créer_fichier(fichier, "RECUPERER")

    With olMail
        .To = "" '"............."
        .Subject = "Véhicules récupérés"
        .Body = "Bonjour, veuillez trouver ci-joint la liste des véhicules qui ont été récupérés cette nuit"
        .Attachments.Add fichier
        .Display
'        .Send
    End With

'Kill fichier
End Sub

Sub SendEmail_EMMENER()
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim fichier As String

Set olApp = CreateObject("outlook.application")
Set olMail = olApp.CreateItem(olMailItem)

fichier = ThisWorkbook.Path & "\" & "Véhicules à emmener " & Date & ".pdf"

'EMMENER RECUPERER
Call Créer_fichier(fichier, "EMMENER")

    With olMail
        .To = "" '"............."
        .Subject = "Véhicules à convoyer"
        .Body = "Bonjour, veuillez trouver ci-joint la liste des véhicules à emmener ce soir"
        .Attachments.Add fichier
        .Display
'        .Send
    End With

'Kill fichier
End Sub

Sub Créer_fichier(fichier As String, action As String)
Application.ScreenUpdating = False
Sheets.Add After:=Sheets(Sheets.Count)
    With ActiveSheet.PageSetup
         .LeftHeader = "&D"
        .Orientation = xlLandscape
        .Zoom = 75
    End With

Set plg = Sheets("Modele_Sem").Range("$A$103:$M$110")
Range("$A$2").Resize(plg.Rows.Count, plg.Columns.Count) = plg.Value
rw = Cells(Rows.Count, 1).End(xlUp).Row

For i = rw To 3 Step -1
    If Cells(i, 7) <> action Then Rows(i).Delete Shift:=xlUp
Next i

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fichier, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("Modele_Sem").Activate

Application.DisplayAlerts = False
Sheets(Sheets.Count).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Merci beaucoup, j’essaierai demain au bureau, mais avant tout ce code faut-il le coller dans la feuille modèle_Sem où est-ce un module ?

Le top aurait été un bouton « Emmener » et un autre « Récupérer » et en cliquant sur l’un des deux et bien il y a là la bonne action qui se déroule.

Est-il possible de rajouter une liste de destinataires différents en fonction de l’action demandée.

Encore merci

faut-il le coller dans la feuille modèle_Sem où est-ce un module ?

les 3 macros

SendEmail_RECUPERER

SendEmail_EMMENER

Créer_fichier

sont à copier sur un module

Le top aurait été un bouton « Emmener » et un autre « Récupérer » et en cliquant sur l’un des deux et bien il y a là la bonne action qui se déroule.

mets les 2 shapes de ton choix,

puis fait un clic droit sur 1 deux et sélectionne "Affecter une macro"

fait de même pour l'autre

Est-il possible de rajouter une liste de destinataires différents en fonction de l’action demandée.

les 2 macros

SendEmail_RECUPERER

SendEmail_EMMENER

sont indépendante

tu peux mettre ce que tu veut entre les guillemets de .To = ""

si tu mets plus d'une adresse mail il faut les séparer par un ;

par exemple:

 .To = "blabla@qc.ca;yoyo@qc.ca"

Merci à toi super boulot.

Est-ce que le filtre à la fin de la macro est supprimé? Car j'aimerais si cela est possible faire le même style qu'emmener ou récupérer mais cette fois sur la sélection A89:M102.

Je m'explique, j'aimerais avoir le choix entre :

  • Cliquer sur Emmener : ça fonctionne déjà
  • Cliquer sur Récupérés : ça fonctionne déjà
  • Cliquer sur Locaux non fermés : ça ne fonctionne pas encore :
    Quand je clicquerais sur locaux non fermés, il y aurait le filtre n'affichant que les locaux qui n'ont pas été fermés (c'est à dire que le filtre se fait si l'Action=Non)
  • Le corps du mail serait "Bonjour, veuillez trouver ci-joint la liste des locaux non fermés ce soir"
  • La pièce jointe serait le PDF de la sélection portant comme nom "Locaux non fermés 2019-03-30" avec la date du jour à la fin.

Et enfin retour à la normal avec suppression des filtres, afin de voir toutes les colonnes.

J'ai essayé d'adapter ton 1er module, j'en ai crée un 2ème pour les locaux non fermés. Avec un 3ème bouton sur l'onglet model_Sem.

J'essaierai l'ensemble demain au bureau (car sur mon mac, je n'ai pas outlook), par contre ce que j'aimerai savoir avant, est-ce qu'il faut activer la fonction filtre ou est-ce qu'elle est comprise dans le module.

Pour moi ce n'est pas un soucis, car je maîtrise en partie cette fonction, mais ce fichier sera mis entre les mains de personnes qui ne connaissent pas cette fonction de filtre (ce qui aurait été au top, c'est qu'en appuyant sur n'importe lequel des 3 boutons (EMMERNER-RECUPERES-LOCAUX), et bien que le filtre correspondent aux boutons, et que l'envoi d'email et de pdf en découle).

Sub SendEmail_LOCAUX()
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim fichier As String

Set olApp = CreateObject("outlook.application")
Set olMail = olApp.CreateItem(olMailItem)

fichier = ThisWorkbook.Path & "\" & "Locaux non fermés " & Date & ".pdf"

Call Créer_fichier(fichier, "LOCAUX")

    With olMail
        .To = "......" '"............."
        .CC = "......."
        .Subject = "locaux non fermés"
        .Body = "Bonjour, veuillez trouver ci-joint la liste des locaux qui n'ont pas pu etre fermés cette nuit"
        .Attachments.Add fichier
        .Display
'        .Send
    End With

'Kill fichier
End Sub

Sub Créer_fichier(fichier As String, action As String)
Application.ScreenUpdating = False
Sheets.Add After:=Sheets(Sheets.Count)
    With ActiveSheet.PageSetup
         .LeftHeader = "&D"
        .Orientation = xlLandscape
        .Zoom = 75
    End With

Set plg = Sheets("Modele_Sem").Range("$A$89:$M$102")
Range("$A$2").Resize(plg.Rows.Count, plg.Columns.Count) = plg.Value
rw = Cells(Rows.Count, 1).End(xlUp).Row

For i = rw To 3 Step -1
    If Cells(i, 7) <> action Then Rows(i).Delete Shift:=xlUp
Next i

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fichier, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("Modele_Sem").Activate

Application.DisplayAlerts = False
Sheets(Sheets.Count).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

re,

ce fichier sera mis entre les mains de personnes qui ne connaissent pas cette fonction de filtre

je n'ai pas utilisé le filtre de cette section, tu peux l'enlever.

Rechercher des sujets similaires à "vba filtre impression selection pdf envoi"