Envoyer un mail en VBA parfois avec et parfois sans pièce jointe
Bonjour à tous.
J'ai (grâce à ce site) une super macro qui me permet d'envoyer des mails.
J'aimerai cependant une petite adaptation si possible :
1) Il faudrait que la macro "change" en fonction de la valeur dans la cellule A1 où j'ai une liste déroulante :
Si la valeur dans la cellule A1 est "test1" alors elle doit faire exactement ce qu'elle fait déjà maintenant (aucun changement).
Si la valeur dans la cellule A1 est "test2" alors elle doit faire la même chose mais sans me rajouter une pièce jointe.
Car dans le cas où la valeur est "test2", comme il ne faut pas envoyer de pièces jointes (il n'y a pas d'adresse qui localise un fichier dans mon ordinateur), il me rajoute une pièce jointe qui se nomme "noname".
Merci à quiconque pourra m'aider.
Bonjour,
Je n'ai pas regardé le fichier mais je pense qu'inclure une simple condition avant d'ajouter la PJ devrait suffire :
'début du code
with omail
'...
if sheets("nomfeuille").range("A1") = "test1" then 'adapter nom de la feuille
.attachments.add PJ
end if
'...
end with
Cdlt,
Merci pour ta réponse 3GB mais malheureusement je ne sais pas comment exploiter ta réponse.
Je ne sais pas comment intégrer ton code à la macro.
J'ai essayé et le débogage me dit qu'il y a des erreurs... que je n'arrive pas à corriger vu que je ne comprends rien au VBA.
Si tu sais me donner plus de détail ce serait gentil, mais je ne veux pas abuser de ton temps, tu m'as déjà trouvé une super macro pour sauvegarder en pdf !
Salut DJICI,
Voici la partie du code avec la condition rajoutée :
With ActiveSheet
dl = .Cells(.Rows.Count, 2).End(xlUp).Row
For i = 5 To dl 'liste commence en ligne 5
If .Cells(i, 1) <> "" Then
Set ml = CreateObject("CDO.Message")
ml.Configuration = mConfig
ml.To = .Cells(i, 5) 'destinataire
ml.from = expediteur
ml.Subject = .Range("B2") 'sujet
ml.textbody = .Range("C2") 'message
If .Cells(i, 1) = "test1" Then '<<<< A ADAPTER POSSIBLEMENT
ml.addattachment rep & .Cells(i, 6).Value 'fichier joint
End If
ml.send 'envoyer le mail
End If
Next i
MsgBox "Mails envoyés"
End With
J'ai mis .cells(i,1) = "test1" dans la condition car j'ai supposé que le texte conditionnant l'envoi de pièce jointe se trouverait sur chaque ligne de la colonne A. S'il s'avère qu'il se trouve invariablement en A1, alors il faudra modifier par if .cells(1,1) = "test1" then
Voici le fichier :
Si jamais il y a des erreurs, dis-moi sur quelles lignes elles se trouvent (les lignes de bugs sont surlignées en jaune lorsqu'on ouvre l'éditeur).
Cdlt,
Merci pour ton aide.
Le code ne semble pas fonctionner correctement.
J'ai testé la macro et seul le premier destinataire a reçu sa pièce jointe. Tous les autres ne reçoivent rien alors que la cellule A1 est bien mise sur "Test1".
Par contre la macro fonctionne bien dans sa deuxième partie (lorsque la cellule A1 n'est pas égale à "Test1") je n'envois plus de pièce jointe "noname".
Salut Djici,
Il faut faire attention aux majuscules. Dans ce cas, essaie ainsi :
If lcase(trim(.Cells(i, 1))) = "test1" Then
pour voir si c'est bien une question de majuscule. Je supprime aussi les espaces indésirables (qu'on trouve souvent en fin de chaine)
Cdlt,
Je suis navré de t'embêter. C'est plus que probablement moi qui fait n'importe quoi... mais maintenant je n'ai plus de pièces jointes, quelle que soit la valeur dans A1, même pour le premier destinataire.
C'est compliqué pour moi de bien te répondre car ce serait trop chronophage de tester l'envoi via CDO.
Pour effectuer tous les contrôles, il faut que :
- la variable rep soit correctement affectée (je pense que c'est bon),
- chaque ligne en colonne 6 ("F") contienne un nom de fichier existant dans le répertoire rep, du moins celles avec "test1" en colonne A,
- chaque ligne (de la boucle) en colonne A contienne soit "test1" (pour envoi de PJ), soit autre chose (pour envoi sans PJ).
Par exemple, si A9 vaut test1, le mail aura une PJ, si A10 vaut test2, le mail n'aura pas de PJ, etc...
Si tu veux que tous les mails soient munis ou démunis d'une PJ, il faut remplacer .cells(i,1) par .cells(1,1) (resp. équivalents de .range("A" & i) et .range("A1")).
Tu sais, il n'y a pas de secret, il faut examiner tous les éléments qui rentrent en compte et comme les envois avec PJ ont marché auparavant et que les mails sont correctement envoyés, c'est donc forcément un de ces aspects qui bloque et je suppose que c'est le fait que tu aies probablement saisi test1 en A1 alors que le code porte sur Ai (chaque ligne de la boucle).
Par ailleurs, il faut bien s'assurer que le code est exécuté avec comme feuille active la feuille contenant les infos utiles, sinon, ça bloquera. Si besoin, tu peux remplacer with activesheet par with sheets("nomdelafeuille").
Cdlt,
Je suis vraiment navré de t'avoir fait perdre du temps.
Je te remercie pour le code mais surtout pour ta pédagogie. Avoir un code qui fonctionne c'est bien mais que je commence à comprendre comment ça fonctionne c'est encore mieux. Maintenant je peux adapter ce code et rajouter des conditions en fonction de la cellule A1.
TOUT fonctionne parfaitement !
Un grand merci.
Salut DJICI,
Super, je suis content !
Oui, au début, on est un peu impressionné par les lignes de code mais en fait, en général, ce sont des actions qui suivent une logique. Il faut juste arriver à comprendre la logique, retenir les petites subtilités qui provoquent des blocages (c'est le plus dur) et se renseigner dès que possible sur les objets, leurs propriétés et leurs méthodes.
Bon courage pour la suite et bonne fin d'année !
Cdlt,