VBA - Liste déroulante événementielle mail

Bonjour,

Je souhaite savoir comment je pourrai réaliser en VBA ceci : dès que, dans une liste déroulante d'une cellule je choisis "terminé", outlook s'allume avec un mail pré-rempli et une adresse déjà définie apparaissent.

Exemple : je suis dédé et je traite le dossier de jean NEYMAR. Une fois que le dossier est terminé je fais sur excel "Terminé" et cela génère un mail outlook à traitementdossier@outlook.com (par exemple) en disant "Dédé a terminé le dossier de Jean NEYMAR" comme texte et "Fin Dossier" comme sujet.

Croyez vous que c'est possible en VBA ? Je n'ai malheureusement aucune connaissance dans cette programmation.

Merci beaucoup !

6test-vba.xlsx (12.60 Ko)

Bonne journée,

Bonjour,

Voici un premier jet :

private sub worksheet_change(byval target as range)
dim r as range
set r = intersect(target, columns(1))
if not r is nothing then
    if r.cells.count = 1 and r(1, 1).value = "Terminé" then
        with createobject("Outlook.Application")
            with .createitem(olmailitem)
                .to = "traitementdossier@outlook.com"
                .bcc = "dede@dede.com"
                .subject = "Fin Dossier"
                .body = "Dédé blabla"
                .display
            end with
        end with
    end if
end if
end sub

à améliorer en rendant variable ce qui peut l'être et qui dépend de la cellule modifiée.

Ce code est à placer dans le module de la feuille concernée et à adapter (pour l'instant, on suppose que la colonne cible est la colonne 1).

Cdlt,

Bonjour,

Malheureusement, rien ne se passe quand je fais "Terminé", Outlook ne s'enclenche pas, peut-être un paramètre quelque part qui n'est pas présent ?

Pour éviter de faire 50.000 demandes, voici le cas concret que je souhaite avoir:

1) Dès que l'état (col A) est indique quelque part dans une cellule "Terminé", une page de mail outlook s'ouvre avec comme données :

"Bonjour,

[Agent traitant, col B] a terminé le dossier de [Nom, col C] [Prénom, col D][N°, col E].

Cordialement,"

Le message doit être envoyé selon la colonne "F" "à prévenir".

-2) Les mêmes données avec "En cours" :

"[Agent traitant, col B] a entame l'analyse du dossier de[Nom, col C] [Prénom, col D][N°, col E].

Cordialement"

Est-ce techniquement possible ?

Merciii

Excellente journée à vous

7test-vba.xlsm (18.40 Ko)

Bonjour

le code doit être sur la feuille et non pas dans un module...

ton fichier en retour pour la partie "Terminé" je te laisse développer tes compétences en te laissant adapter pour "en cours", mais si besoin... demande

Fred

12test-vba.xlsm (20.30 Ko)

Bonjour

un retour ???

Fred

Bonjour Fred,

Cela fonctionne et j’ai su adapter le code pour « en cours ». Je te remercie vivement.

Cependant, petite demande d’info : quelle est la variable à changer si par exemple, « terminé » (ou « en cours ») est en colonne B, C, D…. Etc.

Pour le moment la donnée se trouvait en colonne A.

Merci beaucoup et excellent week-end

Bonjour

la modification est à apporter sur :

Set r = Intersect(target, Columns(1))

en l'occurrence sur columns(1) = colonne A

si il faut mettre colonne B = > columns(2), c'est la 2e colonne

si il faut mettre colonne C = > columns(3), c'est la 3e colonne

Et ainsi de suite...

dans ce cas

Fred

Bonjour,

Comment faire si c'est selon deux conditions réunies sur deux colonnes différentes ?

Merci par avance,

Bonjour

Avec un peu plus d'explications.

Fred

Bonjour,

J'ai rajouté une colonne 6 dans le document test-vba dans la discussion en pièce jointe. J'ai simplement rajouté OUI / NON en colonne 6 (colonne I)

Je souhaite tout simplement que quand je fais le mail, cela regarde en colonne 6 et s'il y a un OUI, le mail ne s'affiche pas et m'averti d'une MSXBOX "le message ne peut s'envoyer".

Voici le code que j'utilise, malheureusement sans succès :

Private Sub worksheet_change(ByVal target As Range)
Dim r As Range
Dim s As Range
Set r = Intersect(target, Columns(1))
Set s = Intersect(target, Columns(6))
If Not r Is Nothing Then

    If s.Cells.Count = 1 And s(1, 1).Value = "OUI" Then
        MsgBox ("Le mail ne peut se générer")
    End If

            If r.Cells.Count = 1 And r(1, 1).Value = "Terminé" Then
                    lg = r.Cells.Row
                    Set OutlookApp = CreateObject("outlook.application")
                    Set OutlookMail = OutlookApp.createitem(0)
                        With OutlookMail
                            .to = Cells(lg, "F")
                            .bcc = "luc.rob@blablabla.be"
                            .Subject = "Fin Dossier"
                            .body = "Bonjour" & vbCr & Cells(lg, "B") & " a terminé le dossier de " & Cells(lg, "C") & " " & Cells(lg, "D") & " " & Cells(lg, "E") & vbCr & "Cordialement"
                            .display
                        End With
             End If
End If
End Sub

Excel me souligner le s.cells.count, sans que je comprenne pourquoi, ce qui est plutôt embêtant.

Merci d'avance

Bonjour Fred,

Je souhaite en fait faire via une liste déroulante la génération d'un mail mais avec des conditions restrictives.

Je m'explique :

En colonne 18, j'ai une liste déroulante avec "ENVOI_CONT" , "DECISION_CONT", "DECISION_STAT".

Quand il y a "ENVOI_CONT" + "CONTRACTUEL" (col 13) + NON (avis médical) - Cela génère un mail.

Quand il y a "ENVOI_CONT" + CONTRACTUEL (col 13) + OUI (avis médical) - Cela génère un autre mail.

L'idée est que soit aussi purement restrictif :

DECISION_CONT ne doit fonctionner que si au préalable, on a fait ENVOI_CONT.

ENVOI_CONT et DECISION_CONT ne doivent pas fonctionner si en col 13, il y a "Statutaire".

Est-ce que quelqu'un saurait m'aider dans ce code ?

Merciiii

4classeur2.xlsm (21.40 Ko)

Bonsoir...

je viens de regarder rapidement...

Pour ceci :

Quand il y a "ENVOI_CONT" + "CONTRACTUEL" (col 13) + NON (avis médical) - Cela génère un mail.

Quand il y a "ENVOI_CONT" + CONTRACTUEL (col 13) + OUI (avis médical) - Cela génère un autre mail.

C'est OK voir fichier joint..

par contre pour cela....

DECISION_CONT ne doit fonctionner que si au préalable, on a fait ENVOI_CONT.

ENVOI_CONT et DECISION_CONT ne doivent pas fonctionner si en col 13, il y a "Statutaire".

Comprend pas très bien... cela supposerait qu'il y ait une sauvegarde quelque part sur la ligne comme quoi l'envoi_CONT a été effectué au préalable pour faire DECISION_CONT mais comme tu ne fais qu'un display du mail.. si tu fait annulé le code ne pourra pas le savoir... il faudrait me dire quelle colonne on peut utiliser pour la sauvegarde de l'envoi du mail...

mais surtout pour : ENVOI_CONT et DECISION_CONT ne doivent pas fonctionner si en col 13, il y a "Statutaire". c'est exactement le contraire de ce que tu marque jusque au dessus... "ENVOI_CONT" + "CONTRACTUEL" (col 13) + NON (avis médical) - Cela génère un mail

Merci de préciser

Fred

10classeur2.xlsm (23.58 Ko)

Bonjour Fred,

J’ouvre ton code tôt ce matin et je te tiens au courant.

Je vais regarder le code et faire le test justement avec « statutaire »

Pour la sauvegarde, on peut assez finalement créer une colonne supplémentaire, si cela peut aider.

Grand merci pour ton aide.

Sinon je vais changer en .send sur mon fichier de travail (qui n’est pas celui joint). Comme ça, dès que c’est fait en principe via un MSF ça change de couleur. Le hic, c’est que parfois en allant trop rapidement, je peux vite faire « DECISION_CONT » sans avoir au préalable fait « ENVOI_CONT »

Bonjour Fred,

Finalement, j'ai fait comme ceci :

Deux possibilité "envoi" et "décision".

Pour envoi, j'ai qu'un corps de texte à faire, et l'unique condition dont je dois tenir compte est que l'agent soit contractuel et dont si il est mis statutaire, y'a une msgbox qui annule le tout (c'est fait).

Pour la décision, c'est donc 4 partie, en fonction de s'il est contractuel + oui/non pour l'avis médical et idem pour statutaire.

Il m'a fallu la journée pour combiner mon code d'origine et le tien, ce qui fonctionne maintenant plus ou moins, je suis satisfait pour le faible niveau que j'ai en VBA.

Il ne manque plus maintenant qu'une MSGBOX quand j'ai déjà fait "ENVOI", si je refais "ENVOI" ça me met une msg box pour me demander si je suis sur de renvoyer le mail (vbnyesnocancel je crois?). Yes= il s'envoie , No MSGBOX pour me dire de faire alors dans ce cas la "décision".

Rechercher des sujets similaires à "vba liste deroulante evenementielle mail"