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.
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.