Selectionne les contacts voulu via la liste déroulante
Bonjour,
J'ai un code qui me permet d'envoyer un mail prêt rempli avec divers option voulu. Mais le sujet est que j'aimerai via ma liste déroulant sélectionner les contacts qui y sont incrémentés. J'aimerai sélectionner la liste déroulante de la cellule J17 de la feuille "Demande d'intervention", puis via celle-ci faire appel aux destinataires concernés
Quelqu'un à une idée ?
J'ai créé une variable "strContactTo As String" sur mon code VBA qui actionne les fonctions pour la création du mail, puis l’incrémente dans ".To = strContactTo" pour les destinataires voulu du mail.
Option Explicit
Public Sub Bouton_unique_DI()
Dim ws As Worksheet, ws2 As Worksheet
Dim OutApp As Object, OutMail As Object, WshShell As Object
Dim sNomFic As String, sRep As String, strContactTo As String
Dim i As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
'Appel à déprotéger le fichier complet
Call Dprotection
'Sauvegarde du formulaire DI sur l'onglet "Sauvegarde DI"
Set ws = Worksheets("Sauvegarde_DI")
Set ws2 = Worksheets("Demande_d'Intervention")
i = 5
Do While ws.Range("D" & i).Value <> ""
i = i + 1
Loop
ws.Range("E" & i).Value = ws2.Range("J17").Value
ws.Range("D" & i).Value = ws2.Range("J19").Value
ws.Range("I" & i).Value = ws2.Range("J21").Value
ws.Range("F" & i).Value = ws2.Range("I24").Value
ws.Range("G" & i).Value = ws2.Range("M24").Value
ws.Range("H" & i).Value = ws2.Range("G27").Value
ws.Range("K" & i).Value = ws2.Range("I45").Value
ws.Range("M" & i).Value = ws2.Range("L45").Value
ws.Range("L" & i).Value = ws2.Range("I47").Value
ws.Range("J" & i).Value = ws2.Range("M49").Value
'Mise en forme du formulaire dans le mail
Set WshShell = CreateObject("WScript.Shell")
sRep = WshShell.SpecialFolders("Desktop")
sNomFic = sRep & "Demande d'intervention " & Replace(ws2.Range("J19").Value, "/", "-") & ".pdf"
ws2.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sNomFic, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Set OutApp = CreateObject("outlook.application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = strContactTo
.Cc = ""
.Attachments.Add sNomFic
.Subject = "Demande d'intervention " & Replace(ws2.Range("J19").Value, "/", "/")
.Body = "Bonjour" & Chr(13) & Chr(13) & "Ci-joint, la demande d'intervention au format PDF."
.Display
' .Send 'envoi du mail
End With
Kill sNomFic
'Efface les cellules concernées
Range("J17:L17,J19:K19,J21,G27:N41,L45:M45,I47:K47").ClearContents
ActiveWorkbook.Save
Set WshShell = Nothing: Set OutApp = Nothing: Set OutMail = Nothing
'Appel à la protection du fichier
Call Protection
'Sauvegarde le fichier après exécution du code
ActiveWorkbook.Save
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
'Message de fin pour cloturer le programme
MsgBox "Demande d'intervention expédiée à la liste de diffusion concernée"
End SubMais pour le code pour la liste déroulante, la j'ai plus de mal. j'ai commencé mais je me perd dans le procédé.
Option Explicit
Sub Contacts()
Dim i As Long
Dim tabContactEmails
'Selectionne les contacts via la liste déroulante
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
' Récupérer les mails des destinataires
Sheets("Paramètres").Activate
'les adresses mail CA sont en colonne E
Set début_liste = Range("E4")
Set fin_liste = Range("E4").End(xlDown)
MailAd_CA = Range(début_liste, fin_liste).Value
'les adresses mail SVH sont en colonne G
Set début_liste = Range("G4")
Set fin_liste = Range("G4").End(xlDown)
MailAd_SVH = Range(début_liste, fin_liste).Value
'les adresses mail LH sont en colonne I
Set début_liste = Range("I4")
Set fin_liste = Range("I4").End(xlDown)
MailAd_LH = Range(début_liste, fin_liste).Value
'les adresses mail GRA sont en colonne K
Set début_liste = Range("K4")
Set fin_liste = Range("K4").End(xlDown)
MailAd_GRA = Range(début_liste, fin_liste).Value
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End SubMerci à vous
bonjour,
95 messages et pas encore compris que pour citer du code on utilisait le bouton </> ?
Les bras m'en tombent !
EDIT : De plus joindre un classeur complètement vide est à peu près aussi utile que de ne rien joindre du tout : Tu perds ton temps et tu nous fais perdre le notre.
A défaut d'un vrai classeur on demande un classeur qui permet de tester et de comprendre. après le nom réel réel du mec ou son N° de téléphone on s'en fout. Mais si en plus on doit imaginer ce qu'on pourrait bien faire avec ce genre de classeur : Moi c'est pas compliqué, je referme et je vais me coucher !
A+
Bonjour,
Désolé de ne pas être très performant au sujet du VBA mais ce n'ai vraiment pas mon domaine de prédilection.
Ci-joint mon classeur plus détaillé.
En fait c'est moi qui ne devait plus être bien réveillé...
Bon de toute façon il ne me semble pas possible de sélectionner plusieurs destinataires sur cette cellule :
Soit tu utilises des listes et tu coches chaque ligne ou il y a un nom pertinent.
Soit tu crées une ou plusieurs macros qui sont capables de reconnaitre des groupes de noms.
Mais pour ce genre de liste de validation ça sert juste à vérifier que le nom saisi est orthographié correctement... Tu ne peux pas sélection plusieurs items via une liste de validation.
A+
Re,
Pas grave, et j'ai réussi en fouinant à trouver mon bonheur en incrémentant un nouveau module ci-dessous
Function Contacts2(xDest)
With Sheets("Paramètres")
xListeAdresse = Range("Tab_Mail_" & xDest)
End With
Contacts2 = xListeAdresse
End FunctionPuis en modifiant un partie de mon code en appelant les fonction du dessus
xListeTo = Contacts2([J17])
For F = 1 To UBound(xListeTo)
If F = 1 Then
strContactTo = xListeTo(F, 1)
Else
strContactTo = strContactTo & ";" & xListeTo(F, 1)
End If
Next FMerci quand même de ton aide