Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 09h39   #1
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Par défaut Chaine de caractère pour Email en fonction de la valeur d'une Liste

Bonjour le forum.

Voici mon problème, j'espère que vous pourrez m'aider.

Je souhaite établir un code qui renvoie une chaine de caractère permettant d'envoyer un mail à plusieurs personnes.

Vous trouverez une image en pièce jointe pour mieux visualiser ce qui me donne du fil a retordre.

Voila dans la ListBox2 qui correspond a la ListBox intitulée AE j'ai un certain nombre de type de client: CAC, AVG...

Lorsque je clique sur le bouton Email, je souhaiterai un code qui établisse une liste des mails a envoyer de la forme:
Code vb :
ListeDeMail = "Email1@xxx.com, Email2@xxx.com, Email3@xxx.com"

Les E-mails que je souhaite trouver dans la liste sont ceux des personnes dont le "type de AE" se trouve présent dans la ListBox2.

Je ne sais pas comment `m'y prendre pour qu'il ajoute a une chaine de caractère les E-mail correspondant aux personnes ayant dans une table (en bleu) un type qui correspond aux caractères dans une liste.

J'espère avoir été clair mais c'est pas gagné ;-)

Je rajouterai ensuite les destinataires avec le code suivant:

Code vb :
beDoc.SendTo = ListeDeMail
Equivalente à
Code vb :
beDoc.SendTo = "Email1@xxx.com, Email2@xxx.com, Email3@xxx.com"

Merci de votre aide, Cordialement Bruno
Images attachées
Type de fichier : jpg exemple.JPG (67,9 Ko, 1 affichages)
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 09h50   #2
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Dans l'exemple de l'image, j'ai dans la Listbox2 les type AE: CAC, AVG et PAC donc je souhaiterai avoir:

Code :
ListedeMail = "DupP@xxx.com, RichB@yyy.com, TotT@zzz.com
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 10h25   #3
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

il serait a mon avis plus approprié d'utiliser un ListView plutot que des ListBox les une à la suite des autres.

Visiblement tu as placé un tableau, je parle de la notion de tableau excel2007 (Insertion tableau), sur ta feuille excel contenant la liste de tes clients avec les adresses mail (c'est bien ça?) si oui, quel est le nom du tableau.

Toujours si j'ai bien compris, il suffit de boucler sur les valeurs contenues dans la colonne 4 du dit tableau et de n'utiliser les adresses mail que lorsque le type est connu dans la listbox.
Si c'est les cas, l'utilisation d'un Dictionary semble intéressante.

dis moi

++
Qwaz

Salut

Ça devrait ressembler à quelque chose comme ça je pense

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub UserForm_Click()
Dim TheCell As Range
Dim iLigne As Integer
Dim ListeMail As String
'Il faut aller dans le menu Outils, Référence et cocher Microsoft Scripting runtime
Dim DicoType As Dictionary
 
 
    'On boucle sur chaque element de la liste pour renseigner le Dico
    For iLigne = 0 To ListBoxAE.ListCount
        'S'il n'existe pas dans le dico on l'y rajoute
        If Not DicoType.Exists(ListBoxAE.List(iLigne)) Then DicoType.Add ListBoxAE.List(iLigne)
    Next
 
    'On boucle sur chaque cellule de la colonne 4 du tableau
    For Each TheCell In Feuil1.Range("Tableau2").Columns(4)
        'On controle si le type est dans la liste
        If DicoType.Exists(TheCell.Value) Then
            'S'il existe, on rajoute le séparateur si il y a déjà au moins un mail dans la chaine
            If ListeMail <> "" Then ListeMail = listmail & ","
            'On rajoute le mail
            ListeMail = listmail & TheCell.Offset(0, -3)
        End If
    Next
 
End Sub
A adapter avec tes noms de feuille et de tableau

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 11h46   #4
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Bonjour,

J'ai bien placé un tableau de liste de contact!

Je ne savait pas qu'il pouvait être utile de lui donner un nom. Je viens de l'apeller: "TablasDeContacto"

Citation:
Toujours si j'ai bien compris, il suffit de boucler sur les valeurs contenues dans la colonne 4 du dit tableau et de n'utiliser les adresses mail que lorsque le type est connu dans la listbox.
C'est exactement ca.
(même si j'avais en tête de faire le contraire)

Je ne connais pas la fonction Dictionary

Est-ce une fonction interne à VBA qui peut s'utiliser dans les ListBox ou une fonction utilisée dans les cellules d'excel?

Merci de m'aider.

Cdt Bruno

Effectivement nos messages se sont croisés.

J'ai un probleme dans cette ligne de code
Code :
     If Not DicoType.Exists(UserFormEMail.ListBox2.List(iLigne)) Then DicoType.Add UserFormEMail.ListBox2.List(iLigne)
Il me donne un message d'erreur: "Argument non optional"

Une solution? Merci Bruno
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h35   #5
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Uff, plein d'erreur dans mon code, il est tant d'aller à la soupe

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub UserForm_Click()
Dim TheCell As Range
Dim iLigne As Integer
Dim ListeMail As String
'Il faut aller dans le menu Outils, Référence et cocher Microsoft Scripting runtime
Dim DicoType As New Dictionary
 
 
    'On boucle sur chaque element de la liste pour renseigner le Dico
    For iLigne = 0 To ListBoxAE.ListCount - 1
        'S'il n'existe pas dans le dico on l'y rajoute
        If Not DicoType.Exists(ListBoxAE.List(iLigne)) Then DicoType.Add ListBoxAE.List(iLigne), iLigne
    Next
 
    'On boucle sur chaque cellule de la colonne 4 du tableau
    For Each TheCell In Feuil1.Range("Tableau3").Columns(4).Cells
        'On controle si le type est dans la liste
        If DicoType.Exists(TheCell.Value) Then
            'S'il existe, on rajoute le séparateur s'il y a déjà au moins un mail dans la chaine
            If ListeMail <> "" Then ListeMail = ListeMail & ","
            'On rajoute le mail
            ListeMail = ListeMail & TheCell.Offset(0, -3)
        End If
    Next
 
End Sub
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2011, 12h38   #6
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Citation:
Envoyé par Qwazerty Voir le message
Salut
Uff, plein d'erreur dans mon code, il est tant d'aller à la soupe
Encore message croisé
Je regarde ca bon appétit :-D

Marche très bien

MERCI
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h19.


 
 
 
 
Partenaires

Hébergement Web