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,

Rechercher des sujets similaires à "envoyer mail vba parfois piece jointe"