XL 2013 Avec un tableau croisé dynamique envoyer un mail seulement à une sélection

Estellepokis

XLDnaute Nouveau
Bonjour,

Je suis débutante en Excel, macro, VBA...

J'ai une question pour connaitre une procédure à un projet que j'ai.

J'ai un tableau croisé dynamique avec 3 filtres. A la sortie il va m'afficher le nom, prénom et adresse mail de différentes personnes.
Jusqu'à présent, on pouvait appuyer sur l'adresse mail d'une personne et grâce à une macro et VBA ça nous renvoyer sur outlook pour lui envoyer un mail.
Or, j'aimerais quand il m'affiche les différentes personnes en fonction du filtre que j'ai choisi, en sélectionner plusieurs (peut-être grâce à des cases à cocher ?) et leur envoyé un mail groupé en copie caché.

Je pensais pour ça, DANS MA BDD :
> Ajouter une colonne "MAIL" avec seulement une case à cocher dans chaque ligne correspondant à une personne
> Faire apparaître le champ "MAIL" dans mon tableau croisé dynamique
Mais je n'arrive pas à faire apparaître les cases à cocher dans le tableau dynamique ? Il y a écrit "vide" ?

Ensuite en cochant les cases, l'idée était d'appuyer sur un bouton "Envoyer mail" qui serait relié au case coché et voilà.

Mais je ne sais pas si j'ai la bonne procédure ? Avez-vous des indications pour une novice comme moi en Excel ?
 

Estellepokis

XLDnaute Nouveau
Je peux t'envoyer un excel vide d'informations mais qui a la même forme si ça peut t'aider ?

Moi je cherche encore comment faire comprendre au bouton, qu'il garde en mémoire les adresses mails des Windings rouges ? Ensuite j'ouvrirai la boite outlook avec les adresses mails récoltées, mais ça, ça ira je pense !
 

Estellepokis

XLDnaute Nouveau
Pour l'instant j'ai fait ce code qui me permet d'ouvrir Outlook avec tous les destinataires de la colonne J (là où il y a toutes les adresses mails) et de les mettre en copie caché.

Code:
Sub Bouton4_Cliquer()

Dim OutlookApp As Object
Dim OutlookMail As Object
Dim destinataire As String
Dim A As Integer

With Sheets("REPERTOIRE")
    For A = 16 To Range("J65536").End(xlUp).Row
        destinataire = destinataire & ";" & Range("J" & A).Value
    Next A
    
    Set OutlookApp = CreateObject("outlook.application")
    Set OutlookMail = OutlookApp.createitem(0)
        With OutlookMail
        .Subject = "" 'sujet du mail
        .BCC = destinataire 'adresse mail destinataire
        .Display 'affiche le mail
        End With

End With

End Sub

Il faut maintenant que j'arrive à sélectionner, seulement, les adresses de la ligne où le windings 254 (colonne N) est rouge.
Donc prendre les adresses mails (colonne J) où sur la même ligne à la colonne N la case est rouge ?
 

laurent3372

XLDnaute Impliqué
Erratum: (rgbRed au lieu de vbRed) et font.color au lieu de .colorindex (ma faute!)
Code:
    For A = 16 To Range("J65536").End(xlUp).Row
        If Range("N" & A).Font.Color= rgbRed Then
            destinataire = destinataire & ";" & Range("J" & A).Value
        End If
 

Estellepokis

XLDnaute Nouveau
Super, ça marche !

J'ai encore une question!
Sur ce programme qui permettait de changer le windings de couleur quand on cliquait sur la cellule, comment je peux exempter une CASE de la macro ?
J'ai essayé plusieurs sol et ça ne marche pas...

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column = 14 Then
    With Target.Font
        If .Color = rgbBlack Then .Color = rgbRed Else .Color = rgbBlack
    End With
End If

End Sub
 

laurent3372

XLDnaute Impliqué
Pour exclure (par exemple) les cases N16, N18 et N26 de la macro
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column = 14 Then
    if Target.Row = 16 or Target.Row = 18 or Target.Row = 26 then exit sub
    With Target.Font
        If .Color = rgbBlack Then .Color = rgbRed Else .Color = rgbBlack
    End With
End If

End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Juste pour varier la syntaxe
(avec emploi d'un Select Case et d'un IIF)
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
If T.Column = 14 Then
Select Case T.Row
Case 16, 18, 26: Exit Sub
Case Else: T.Font.Color = IIf(T.Font.Color = rgbBlack, rgbRed, rgbBlack)
End Select
End If
End Sub
PS: Je n'ai pas compris pourquoi il faut utiliser rgbRed plutôt que vbRed
Parce que sur mon Excel 2013
IIf(T.Font.Color = vbBlack, vbRed, vbBlack)
donne le même résultat.
 

Discussions similaires

Haut Bas