XL 2016 Choix d'une adresse mail en fonction d'un nom

Pauliakov

XLDnaute Nouveau
Bonjour le forum,

Je suis en train de créer une macro pour envoyer un mail automatique à une personne. L'envoi fonctionne et voici la macro pour information si certains souhaitent connaître ça mais aussi pour situer le contexte :

VB:
Private Sub CommandButton5_Click()
Dim extension As String
Dim chemin As String, nomfichier As String
Dim style As Integer
'sauvegarde l'onglet souhaitant être envoyé
Sheets(ComboBox1.Text).Copy 'prend le nom dans ma liste
extension = ".xls"
chemin = " "  'chemin de l'emplacement de la sauvegarde du fichier
nomfichier = ActiveSheet.Range("F2").Value 'donne le nom au fichier en fonction du nom 
With ActiveWorkbook
    .SaveAs Filename:=nomfichier
    .Close
'pour la partie mail
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String
Dim strFichier As String
  
    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)
'---------------------------------------------------------
    Const strRepertoire = " " 'répertoire du fichier à récupérer
    strFichier = nomfichier & ".xlsx"
    strbody = " " corps de l'email en HTML
             
     With oBjMail
        .To = adresse   'le destinataire en fonction du nom ce que je cherche à faire 
       .Subject = "" 'l'objet du mail
       .HTMLBody = strbody & "<br>" & .HTMLBody  'le corps du mail en HTML
       .Attachments.Add strRepertoire & "\" & strFichier
       .Display  'Ici on peut supprimer pour l'envoyer sans vérification
       .Send
    End With
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End With
End Sub


Voilà donc tout fonctionne, mon problème et le choix de l'adresse mail. Je souhaite qu'en fonction du nom, ça envoie l'onglet à la bonne personne.

Exemple :
si je sélectionne l'onglet A, l'email s'envoie à a@mail.com
si je sélectionne l'onglet B, l'email s'envoie à b@mail.com

Je définie les adresses mail dans un onglet "Infos" avec le nom en colonne A3:A avec l'adresse en B3:B donc en face. En sachant que j'intègre moi même les adresse mails mais que la liste de nom se créer avec une macro.

J'ai cherché des pistes sur le forum et j'essaye d'adapter cette macro

VB:
Dim cel As Range 'déclare la variable cel (CELlule)
Dim r As Range 'déclare la variable r (Recherche)
With Sheets("Infos") 'prend en compte l'onglet "Infos" (à adapter à ton cas)
    'boucle sur toutes les cellules éditées cel de la colonne A (en partant de la ligne 2)
    For Each cel In .Range("A23:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row)
        'définit la recherche r (recherche la valeur de la cellule en partie dans la colonne A de l'onglet "BASE")
        Set r = ComboBox1.Text
      If VarType(r) = ComboBox1.Text Then
r = adresse 'qui est la variable dans WithoBjMail correspondant au destinataire du mail
End With 'fin de la prise en compte de l'onglet "Infos"

Mais ça ne fonctionne pas ... :(
J'ai encore à apprendre et c'est pourquoi je vous demande votre aide !

Merci par avance
 

ChTi160

XLDnaute Barbatruc
Bonsoir Pauliakov
Bonsoir le Fil ,Le Forum

Ne peux tu mettre un fichier avec la feuille Infos (sans donnes personnelles) et l'explication de ce que tu as et de ce que tu veux ,plus simple que de refaire un fichier!
car tu dis :
boucle sur toutes les cellules éditées cel de la colonne A (en partant de la ligne 2)
For Each cel In .Range("A23:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row)
puis
Dim r As Range 'déclare la variable r (Recherche)
et Set r = ComboBox1.Text ??? , c'est quoi ComboBox1.Text
etc etc
donc pas evident

merci du partage
dans l'attente
amicalement
Jean marie
 
Dernière édition:

Pauliakov

XLDnaute Nouveau
Bonjour à tous,

Je vous ai fait un petit classeur avec toutes les données utiles pour les étapes. J'ai juste aucuns chemins à mettre pour faire fonctionner l'envoi de mail mais il fonctionne sur mon fichier complet.

Quand vous cliquez l'Userform, vous pouvez choisir A, B ou C. Cette liste est mise à jour par SQL, donc elle est variable et se modifie seule.

Mon but est que quand je clique sur envoyer un mail, après avoir ouvert la fiche avec le bon nom cette dernière s'envoie à la bonne adresse en fonction du nom (dans la feuille Infos, nous avons les adresses en fonction des noms).

Pour faire plus simple, je n'arrive simplement pas à construire la variable Adresse en fonction du nom indiqué.

Merci pour la réactivité en tout cas !


Cordialement,
 

Pièces jointes

  • Classeur1.xlsm
    164.5 KB · Affichages: 31

Pauliakov

XLDnaute Nouveau
Bonjour à tous,

Après avoir remis la macro dans mon fichier d'origine, j'ai adapté quelques choses mais la ligne

VB:
For l = 1 To UBound(Tab_Infos, 1) 'pour chaque ligne du tableau des Infos

Ne fonctionne pas lorsque je sélectionne un nom mais je ne comprends pas pourquoi

Merci par avance
 

ChTi160

XLDnaute Barbatruc
Bonjour Pauliakov
Bonjour Le Fil,Le Forum
pas evident lol
As tu bien mis ceci dans le code du Userform ?
Afin de charger les données de la feuille "Infos"
VB:
Private Sub UserForm_Initialize()
Set Ws_Source = Worksheets("Infos")
With Ws_Source
DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
Tab_Infos = .Range(.Cells(3, 1), .Cells(DerLgn, 2)).Value
End With
With UserForm1
     .CommandButton5.Visible = False
End With
End Sub
Y a t'il des différences de configuration dans la Feuille Nommée "Infos" , par rapport au fichier que tu as joins ?
dans l'attente
bonne journée
Amicalement
Jean marie
 

Pauliakov

XLDnaute Nouveau
Bonjour,

L'erreur est la suivante "Erreur d'exécution 13 : Incompatibilité de type

J'ai bien mis votre macro à l'emplacement mais j'ai changé CommandButton5.Visible = False par True mais ça ne change rien. (mais je viens de comprendre pourquoi vous avez intégrer cette ligne, sans adresse, je ne peux pas envoyer haha)

Mais l'onglet "Infos" est identique, j'ai juste d'autres colonnes après B mais ça ne devrait pas changer la macro. J'ai d'autres noms qui peuvent s'y intégrer mais vous avez intégrer la dernière ligne donc ça fonctionne

Après j'ai remplacé le nom Userform1 par Choixfournisseur qui est le nom de mon Userform mais j'ai bien tout changé

PS : Je n'ai pas d'adresse mail devant chaque nom par contre mais ça change rien ?
 

ChTi160

XLDnaute Barbatruc
Re
pas evident de reproduire cela,
je vais voir si le fait qu il n y ai pas d adresse partout puisse etre la cause du bug.
ne peux tu pas debuguer pour voir ou dans les procedures ,ca bloque?
tu vas dans userform_initialise
tu selectionnes une ligne au niveau de la colonne de gauche ou faire F9 la ligne est ainsi selectionnee (pas evident depuis mon telephone lol)
ensuite tu fais F8 jusqu au moment ou ca bloque et ainsi tu sais d ou vient le message.
dans l attente
bonne fin de journee
Amicalement
Jean marie
 

Pauliakov

XLDnaute Nouveau
Bonsoir,

J'ai refait le fichier. Tout est nommé à l'identique de mon fichier de base sauf les liens vers mon ordinateur pour sauvegarder et ouvrir les classeurs et le ComboBox qui n'est pas ComboBox2 mais ComboBox1.

Je suis en train de voir de mon côté avec un collègue, si j'ai du nouveau dans la soirée je vous le dis.

Merci pour votre aide
 

Pièces jointes

  • Base Test Public.xlsm
    182 KB · Affichages: 29

Pauliakov

XLDnaute Nouveau
Bonsoir,

Je me permets de relancer le sujet.

J'ai essayé de modifier votre macro avec des codes que je connais. Pour trouver l'adresse, voici ce que j'ai essayé

VB:
With Sheets("Infos")
        Set trouvé = .Range("A3:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Find(Str_Search)
            If trouvé Is True Then 'si le nom est trouvé
                Str_Mail = Str_Seach.Offset(0, 1).Value
MsgBox (Str_Mail)

End With
End If

Mais ça ne fonctionne pas encore
 

Pauliakov

XLDnaute Nouveau
Bonsoir,

Merci bien pour le fichier. J'étais en train de tester autre chose qui fonctionne correctement après mes différents tests

VB:
Nom= ComboBox1.Text
MsgBox (Nom) 'pour vérifier pour le moment
With Sheets("Infos")
adresse = .Range("A3:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Find(Nom).Offset(0, 1).Value
MsgBox (adresse) 'toujours pour vérifier que cela fonctionne correctement
End With

Ensuite j'ai intégré adresse dans

VB:
     With oBjMail
        .To = adresse 'le destinataire en fonction du fournisseur
       .Subject = "TEST " 'l'objet du mail
       .HTMLBody = strbody & "<br>" & .HTMLBody  'le corps du mail
       .Attachments.Add strRepertoire & "\" & strFichier
       .Display  'Ici on peut supprimer pour l'envoyer sans vérification
       .Send

Peut-être que vous trouverez un défaut dans mon code. Je garde votre macro au cas où je rencontre un problème !

Merci beaucoup !
 

Discussions similaires

Réponses
17
Affichages
1 K