IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Chaine de caractère pour Email en fonction de la valeur d'une Liste [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 58
    Points : 54
    Points
    54
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    beDoc.SendTo = ListeDeMail
    Equivalente à
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    beDoc.SendTo = "Email1@xxx.com, Email2@xxx.com, Email3@xxx.com"

    Merci de votre aide, Cordialement Bruno
    Images attachées Images attachées  

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 58
    Points : 54
    Points
    54
    Par défaut
    Dans l'exemple de l'image, j'ai dans la Listbox2 les type AE: CAC, AVG et PAC donc je souhaiterai avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListedeMail = "DupP@xxx.com, RichB@yyy.com, TotT@zzz.com

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 58
    Points : 54
    Points
    54
    Par défaut
    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"

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
         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

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Uff, plein d'erreur dans mon code, il est tant d'aller à la soupe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 58
    Points : 54
    Points
    54
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/04/2011, 01h34
  2. Réponses: 0
    Dernier message: 21/09/2010, 04h12
  3. [WD-2002] Afficher un champ en fonction de la valeur d'une liste déroulante
    Par babycoca dans le forum Word
    Réponses: 7
    Dernier message: 07/10/2009, 11h03
  4. Réponses: 1
    Dernier message: 28/11/2007, 00h18
  5. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo