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.
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."...
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
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 »
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
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
Pour le code des mails individuels ça marche nickel
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).
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).
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 ...