XL 2016 Macro mail excel

youpi457032

XLDnaute Occasionnel
Bonjour,
Je suis néophyte en programmation.
Je souhaite par vba récupérer les adresses mail de toute une colonne Excel après qu'elle ait été filtrée, et envoyer un mail via Outlook à l'ensemble des destinataires apparaissant dans cette colonne filtrée. J'ai pu le faire avec l'ensemble des mails de la base non filtrée, mais je ne parviens pas à récupérer les adresses mail une fois le filtre actif.
Si l'un d'entre vous à une solution ? Je câle…..
Merci
 

youpi457032

XLDnaute Occasionnel
merci de la réponse. Ca fonctionne sur une colonne non filtrée. J'arrive a récupérer l'intégralité des champs d'une colonne
mais dès que je filtre ça ne me renvoie rien. Le code fonctionne si la fonction est sur la feuille active, mais moi je voudrais qu'elle fonctionne sur une autre feuille sur laquelle je filtre les données.
voici mon code à tout hasard :

Sheets("base_PDV").Activate

For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
Destinataire = Destinataire & ";" & Range("B" & i).Value
Next i

With oBjMail
.BCC = Destinataire 'le destinataire
.Subject = ""
.Body = "Bonjour,"
'.Attachments.Add ActiveWorkbook.FullName
.Display
'.Send ' I
End With
Set oBjMail = Nothing
Set ObjOutlook = Nothing

End Sub

******
mon tableau de bord est en feuille 3
j'aimerai depuis cette feuille après filtrage de la colonne B en "base_PDV" récupérer uniquement les adresses mail filtrées, pour les expédier dans Outlook. La feuille FILTRAGE ne me servirait plus, je la supprimerai.
Ps : existe t-il une macro pour récupérer ces mails filtrés sans doublon ! au passage !
un grand merci d'avance !!
 
Dernière modification par un modérateur:

youpi457032

XLDnaute Occasionnel
Je reposte mon fichier, mais cette fois ci vierge de toute donnée.
Merci de m'avoir fait la remarque.
Je reprends l'idée.
Ma macro mail en Feuille FILTRAGE fonctionne très bien. Elle ne récupère que les adresses mails des lignes non vides. Mais la fonction de tri est trop laborieuse et longue. J'ai amélioré ce tri en Feuille TABLEAU DE BORD. Je voudrais que ma fonction de mail qui fonctionne très bien en feuille Filtrage opère de de la même manière depuis mon TABLEAU de BORD. Mais ca ne fonctionne pas avec ma macro (mail_liste_filtrée). Si vous avez l'astuce, merci !
avec le petit plus, la récupération du champ mail sans doublon ! Merci :)
 

Pièces jointes

  • mon fichier vierge de toute donnée.xlsm
    2.8 MB · Affichages: 16
C

Compte Supprimé 979

Guest
Re,

Désolé, il manque un POINT
VB:
Destinataire = Destinataire & .Range("B" & Lig).Value & ";"
Sinon tu ne fais pas référence à l'objet conteneur qui est ta feuille "base_PDV"

Ça ira mieux comme ça :p
 
C

Compte Supprimé 979

Guest
Re,

Effectivement en regardant de plus près, j'ai finalement compris ta demande :p
Voici le code complet ;)

Attention ! Il faut activer la référence indiqué dans le code
VB:
Sub Envoyer_Mail_liste_filtrée_Outlook()
  Dim DLig As Long, Lig As Long
  Dim ObjOutlook As New Outlook.Application
  Dim oBjMail As Outlook.MailItem
  Dim Nom_Fichier As String
  Dim Destinataire As String
  ' Activer la référence : Microsoft Scripting Runtime
  ' Définir l'Objet Dictionnaire
  Dim MonDico As New Scripting.Dictionary
  ' Ou définir Mondico comme objet et Créer l'instance du dictionnaire
  ' Dim MonDico As Object
  'Set MonDico = CreateObject("Scripting.Dictionary")
 
  ' Initialiser l'instance Outlook
  Set ObjOutlook = New Outlook.Application
  Set oBjMail = ObjOutlook.CreateItem(olMailItem)
  ' Avec la base
  With Sheets("base_PDV")
    ' Dernière ligne de la feuille
    DLig = .Range("B" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne
    For Lig = 2 To DLig
      ' Vérifier si ligne affichée
      If .Range("B" & Lig).EntireRow.Hidden = False Then
        ' En cas d'erreur on continue le code
        On Error Resume Next
        ' Tenter d'ajouter le mail au dictionnaire : doublon impossible
        MonDico.Add .Range("B" & Lig).Value, ""
        ' Si pas d'erreur, ajouter l'adresse
        If Err.Number = 0 Then
          Destinataire = Destinataire & .Range("B" & Lig).Value & ";"
        End If
        On Error GoTo 0
      End If
    Next Lig
  End With
  ' Envoyer le mail
  With oBjMail
    .BCC = Destinataire  'le destinataire
    .Subject = ""
    .Body = "Bonjour,"
    '.Attachments.Add ActiveWorkbook.FullName
    .Display
    '.Send '  Ici tu peux l'activer si tu ne veux pas vérifier le mail
  End With
  ' Effacer les variables objet pour libérer la mémoire
  Set oBjMail = Nothing
  Set ObjOutlook = Nothing
  Set MonDico = Nothing
End Sub

A+
 

youpi457032

XLDnaute Occasionnel
Idéalement, pour finaliser ce fichier dans sa partie filtrage et mail, j'aimerai optimiser la fonction de filtre.
pour essayer de faire simple. j'aimerai une boite de dialogue ou chaque cours est référencé avec la possibilité de l'activer ou non par une case à cocher. En activant la case on activerait une fonction de filtre (en VBA) qui afficherait l'ensemble des élèves qui se sont inscrits dans ce cours ( dans le classeur ils peuvent apparaître dans plusieurs colonnes du tableau. L'idée serait par des cases à cocher (en VBA dans une boite de dialogue ) de reproduire la fonction slicer ( qui est très pratique, mais ne permet pas de travailler sur plusieurs colonnes à la fois ).
Si le cœur vous en dit …..de vous pencher sur ce problème.. :)
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 955
Membres
103 059
dernier inscrit
gib17