XL 2016 Mailing List

JeanDidouille

XLDnaute Nouveau
Bonjour à tous,



Je reviens vers vous concernant le code d’une mailing liste. Il me semble que c’est mon 2ème ou 3ème poste sur ce forum à propos de ce fichier. Je remercie au passage encore une fois les personnes qui m’avaient précédemment répondu.

Cette fois-ci, j’aimerai finaliser mon fichier pour de bon mais il me reste 2 derniers problèmes :

  • Il y a un bouton pour un formulaire de saisie (intitulé « medecin ») dans la feuille « MedecinsListe » qui permet normalement d’ajouter, supprimer et modifier un contact du tableau. Cependant, les listes déroulantes du formulaire (entre autres celle qui devrait me permettre de saisir le nom d’un médecin) ne fonctionnent pas et rien n’apparait lorsque je clique sur l’icône.

  • Enfin, pour le code « envoi de mail individuelle » (une fenêtre mail s’ouvre pour chacun des contacts filtrés et visibles dans le tableau), j’aimerai que chacun des contacts (visibles), CC et fichier associé à ceux-ci soit sélectionnés dans la feuille « MedecinListes » MAIS que le sujet et corps du mail soit quand à eux sélectionnés dans la feuille « Mail ».
Voilà, encore une fois, étant complétement néophyte en VBA j’apprécierai grandement votre éclairage sur ce modeste problème et vous remercie grandement par avance. 🙏



Bonne journée et merci encore ! 😊
 

Pièces jointes

  • Mailing RMA-sauvegarde -Final - Copie.xlsm
    900.2 KB · Affichages: 10
Solution
Bonjour,
Il y a un bouton pour un formulaire de saisie (intitulé « medecin ») dans la feuille « MedecinsListe » qui permet normalement d’ajouter, supprimer et modifier un contact du tableau. Cependant, les listes déroulantes du formulaire (entre autres celle qui devrait me permettre de saisir le nom d’un médecin) ne fonctionnent pas et rien n’apparait lorsque je clique sur l’icône.
L'initialisation du userform doit s'appeler Userform_Initialize ( mot clé réservé ) et pas Médecin_Initialize .
Ceci dit, le contenu peut être simplifié avec le code ci-dessous:
VB:
Option Explicit
Dim Ws As Worksheet


'formulaire

Private Sub Userform_Initialize()
    
    Set Ws = Sheets("MedecinsListe")

    ComboBox2.List() = Array("", "Mr."...

JeanDidouille

XLDnaute Nouveau
Code:
Sub mail_indiv_()

Dim mail As Worksheet
Set MedecinsListe = ThisWorkbook.Sheets("MedecinsListe")
Dim I As Integer

Dim OA As Object
Dim msg As Object

Set OA = CreateObject("outlook.application")

Dim last_row As Integer

last_row = Range("A2").End(xlDown).Row
For I = 2 To last_row
    If Rows(I).Hidden = False Then
        Set msg = OA.CreateItem(0)
        msg.To = Tableaux.Range("B" & I).Value
        msg.CC = Tableaux.Range("F" & I).Value
        msg.Subject = Range("C4") 'POur les subject et body, prendre les cellules  de la feuille Mail
        msg.Body = Range("C7")
        If Tableaux.Range("H" & I).Value <> "" Then
            msg.Attachments.Add Tableaux.Range("H" & I).Value
        End If
        msg.Display
    End If
Next I

End Sub

'Liste déroulante civilité
'ne marche pas

ComboBoxBox.ColumnCount = 1
ComboBoxBox.List() = Array("", "Mr", "Mme", "Mlle")
Set Ws = Sheets("MedecinsListe")
With ComboBoxBox
For J = 2 To Ws.Range("D" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("D" & J)
Next J
End With

End Sub


' Liste déroulante nom médecin
'ne marche pas

Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer

If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
ComboBox2 = Ws.Cells(Ligne, "C")
For I = 1 To 8
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next I
End Sub
 

fanch55

XLDnaute Barbatruc
Bonjour,
Il y a un bouton pour un formulaire de saisie (intitulé « medecin ») dans la feuille « MedecinsListe » qui permet normalement d’ajouter, supprimer et modifier un contact du tableau. Cependant, les listes déroulantes du formulaire (entre autres celle qui devrait me permettre de saisir le nom d’un médecin) ne fonctionnent pas et rien n’apparait lorsque je clique sur l’icône.
L'initialisation du userform doit s'appeler Userform_Initialize ( mot clé réservé ) et pas Médecin_Initialize .
Ceci dit, le contenu peut être simplifié avec le code ci-dessous:
VB:
Option Explicit
Dim Ws As Worksheet


'formulaire

Private Sub Userform_Initialize()
    
    Set Ws = Sheets("MedecinsListe")

    ComboBox2.List() = Array("", "Mr.", "Mme.", "Mlle.")
    ComboBox1.List = [tableau_Remi27[Nom médecin]].Value

End Sub

Remarque: choisir le nom seul du medecin dans le combobox1 n'est pas optimum pour les homonymes
pour en réduire le risque, on peut coder:
VB:
Option Explicit
Dim Ws As Worksheet

'formulaire

Private Sub Userform_Initialize()
    
    Set Ws = Sheets("MedecinsListe")

    ComboBox2.List() = Array("", "Mr.", "Mme.", "Mlle.")
    With ComboBox1
        .ColumnCount = 2
        .List = [tableau_Remi27[[Nom médecin]:[Prénom médecin]]].Value
        .ListWidth = [tableau_Remi27[[Nom médecin]:[Prénom médecin]]].Width
    End With

End Sub

Enfin, pour le code « envoi de mail individuelle » (une fenêtre mail s’ouvre pour chacun des contacts filtrés et visibles dans le tableau), j’aimerai que chacun des contacts (visibles), CC et fichier associé à ceux-ci soit sélectionnés dans la feuille « MedecinListes » MAIS que le sujet et corps du mail soit quand à eux sélectionnés dans la feuille « Mail »
Code modifié:
VB:
Sub mail_indiv_()

Dim I       As Integer
Dim OA      As Object:      Set OA = CreateObject("outlook.application")
Dim Mail    As Worksheet:   Set Mail = ThisWorkbook.Sheets("Mail")

    For I = 1 To [tableau_Remi27[#Data]].Rows.Count
        If Not [tableau_Remi27[#Data]].Rows(I).Hidden Then
            With OA.CreateItem(0)
                .To = [tableau_Remi27[Adresse mail médecin]].Rows(I)
                .CC = [tableau_Remi27[CC]].Rows(I)
                .Subject = Mail.[C1].Text
                .Body = Mail.[C7].Text
                If [tableau_Remi27[Fichier]].Rows(I).Text <> vbNullString Then
                    .Attachments.Add [tableau_Remi27[Fichier]].Rows(I).Text
                End If
                .Display
            End With
        End If
    Next I
    Set OA = Nothing

End Sub
 

JeanDidouille

XLDnaute Nouveau
Bonjour,

L'initialisation du userform doit s'appeler Userform_Initialize ( mot clé réservé ) et pas Médecin_Initialize .
Ceci dit, le contenu peut être simplifié avec le code ci-dessous:
VB:
Option Explicit
Dim Ws As Worksheet


'formulaire

Private Sub Userform_Initialize()
   
    Set Ws = Sheets("MedecinsListe")

    ComboBox2.List() = Array("", "Mr.", "Mme.", "Mlle.")
    ComboBox1.List = [tableau_Remi27[Nom médecin]].Value

End Sub

Remarque: choisir le nom seul du medecin dans le combobox1 n'est pas optimum pour les homonymes
pour en réduire le risque, on peut coder:
VB:
Option Explicit
Dim Ws As Worksheet

'formulaire

Private Sub Userform_Initialize()
   
    Set Ws = Sheets("MedecinsListe")

    ComboBox2.List() = Array("", "Mr.", "Mme.", "Mlle.")
    With ComboBox1
        .ColumnCount = 2
        .List = [tableau_Remi27[[Nom médecin]:[Prénom médecin]]].Value
        .ListWidth = [tableau_Remi27[[Nom médecin]:[Prénom médecin]]].Width
    End With

End Sub


Code modifié:
VB:
Sub mail_indiv_()

Dim I       As Integer
Dim OA      As Object:      Set OA = CreateObject("outlook.application")
Dim Mail    As Worksheet:   Set Mail = ThisWorkbook.Sheets("Mail")

    For I = 1 To [tableau_Remi27[#Data]].Rows.Count
        If Not [tableau_Remi27[#Data]].Rows(I).Hidden Then
            With OA.CreateItem(0)
                .To = [tableau_Remi27[Adresse mail médecin]].Rows(I)
                .CC = [tableau_Remi27[CC]].Rows(I)
                .Subject = Mail.[C1].Text
                .Body = Mail.[C7].Text
                If [tableau_Remi27[Fichier]].Rows(I).Text <> vbNullString Then
                    .Attachments.Add [tableau_Remi27[Fichier]].Rows(I).Text
                End If
                .Display
            End With
        End If
    Next I
    Set OA = Nothing

End Sub
Merci de ta réponse Fanch !

Pour le code des mails individuels ça marche nickel :D

Pour le Formulaire de saisie en effet ça marche mieux avec "Userform_Initialize".
Aussi, pour les homonymes je n'y avais pas pensé c'est bien vu merci!
Cependant, après avoir saisi le nom d'un destinataire dans la CombBox1, les informations qui lui correspondent ne s'affichent pas dans les bons TextBox (ex: l'adresse mail d'un contact se retrouve avec le libellé "appétance").

J'ai aussi pensé qu'il était préférable de mettre des ComboBox pour les libellés "Région", "Spécialité" et "Importance" afin de faciliter la saisie de nouveaux contact pour les usagers.
J'ai donc rajouter une ligne dans le code :
VB:
' Liste déroulante nom médecin 

Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "C")
    For I = 1 To 5
        Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
        Me.Controls("ComboBox" & I) = Ws.Cells(Ligne, I + 2) 'Rajout ligne
    Next I
End Sub

Mais le problème reste le même, une fois le nom saisi dans le formulaire, les libellés ne correspondent pas aux TextBox et ComboBox (sauf pour le libellé nom qui correspond à sa ComboBox).
 

fanch55

XLDnaute Barbatruc
Bonjour, pour vous faire avancer :
VB:
Private Sub ComboBox1_Change()
    Dim Ligne As Long

    If Me.ComboBox1.ListIndex > -1 Then
        Ligne = Me.ComboBox1.ListIndex + 1
        ComboBox2 = [tableau_Remi27[Civilité médecin]].Rows(Ligne).Value
        TextBox1 = [tableau_Remi27[Prénom médecin]].Rows(Ligne).Value
        TextBox2 = [tableau_Remi27[Adresse mail médecin]].Rows(Ligne).Value
        TextBox3 = [tableau_Remi27[Spécialité]].Rows(Ligne).Value
        TextBox4 = [tableau_Remi27[Région]].Rows(Ligne).Value
        TextBox5 = [tableau_Remi27[Délégués référents]].Rows(Ligne).Value
        TextBox6 = [tableau_Remi27[Importance médecin]].Rows(Ligne).Value
        TextBox7 = [tableau_Remi27[Appétance]].Rows(Ligne).Value
        TextBox8 = [tableau_Remi27[Nom RMA]].Rows(Ligne).Value
    End If
End Sub

A vous de corriger les ajouts et modifications ...
 

Statistiques des forums

Discussions
312 194
Messages
2 086 066
Membres
103 110
dernier inscrit
Privé