Envoi mail suite modification fichier Excel

Bonjour à tous et merci par avance de votre aide,

Je vous joins un petit fichier

https://www.cjoint.com/c/FIdjeDfP1dk

En fouillant sur le net, j'ai réussi à trouver et adapter un code pour que lorsque l'on modifie la colonne A, ça envoie un message par mail.

Je ne connais que peu de choses en VBA...

Mon soucis se situe dans les informations que je veux avoir dans le corps du mail.

J'aimerai que si on remplit la cellule A4, dans le mail apparaisse la valeur de la colonne B4, C4, D4 et F4 et aussi la colonne G4...

Voici mon code, ça sera certainement plus clair :

'------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range, Message As String

Dim Destinataire As String, Sujet As String

Dim CheminFichier As String

Set Rg = Intersect(Range("A4:A9999"), Target)

If Rg.Cells.Count > 1 Then Exit Sub

If Not Rg Is Nothing And Rg <> "" Then

Destinataire = "xxx@gmail.com"

'L'objet du message

objet = "ATTENTION PRODUCTION BLOQUÉE..."

'Le message à afficher dans le corps du courriel

Message = "Merci de ne pas expédier le produit" & vbCrLf & vbCrLf & _

"Le service qualité vous informe qu'il a décidé de bloquer le produit suivant : " & vbCrLf & vbCrLf & _

"renvoi les données des colonnes B, C, D, E et F" & vbCrLf & vbCrLf & _

"pour la raison suivante :" & vbCrLf & vbCrLf & _

"renvoi les données de la colonne G"

'Chemin et nom de fichier à expédier au besoin

fichier = ""

Envoi_Courriel Destinataire, objet, Message, fichier

End If

'------------------------------------------------------------

End Sub

Sub Envoi_Courriel(Destinataire, Sujet, Message, Optional Chemin_NomFichier)

Application.DisplayAlerts = False

With CreateObject("Outlook.Application")

With .CreateItem(0)

.To = Destinataire

.Subject = Sujet

.Body = Message

If Chemin_NomFichier <> "" Then

.Attachments.Add Chemin_NomFichier

End If

' .Display 'pour afficher le message avant l'envoi

.Send

End With

End With

Set objMail = Nothing

Set objOL = Nothing

End Sub

'------------------------------------------------------------

Merci de votre aide.

bonjour,

un proposition

Message = "Merci de ne pas expédier le produit" & vbCrLf & vbCrLf & _
"Le service qualité vous informe qu'il a décidé de bloquer le produit suivant : " & vbCrLf & vbCrLf & _
cells(target.row,"B") & ","  & cells(target.row,"C") & ","  & cells(target.row,"D") & ","  & cells(target.row,"E") & ","  & vbCrLf & vbCrLf & _
"pour la raison suivante :" & vbCrLf & vbCrLf & _
cells(target.row,"G")  

Merci.

Je vais tenter et vous dis si cela fonctionne comme je le souhaite


J'ai un message d'erreur !!!

Erreur d’exécution '91'

Variable d'objet non défini

Bonjour,

sur quelle instruction reçois-tu ce message d'erreur ?

h2so4 a écrit :

Bonjour,

sur quelle instruction reçois-tu ce message d'erreur ?

If Rg.Cells.Count > 1 Then Exit Sub

bonjour,

tu reçois ce message parce que l'objet rg est vide

proposition de correction

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, Message As String
Dim Destinataire As String, Sujet As String
Dim CheminFichier As String
if target.count<>1 then exit sub
if target="" then exit sub
Set Rg = Intersect(Range("A4:A9999"), Target)
If Not Rg Is Nothing Then
Destinataire = "xxx@gmail.com"
'L'objet du message
objet = "ATTENTION PRODUCTION BLOQUÉE..."
'Le message à afficher dans le corps du courriel
Message = "Merci de ne pas expédier le produit" & vbCrLf & vbCrLf & _
"Le service qualité vous informe qu'il a décidé de bloquer le produit suivant : " & vbCrLf & vbCrLf & _
cells(target.row,"B") & ","  & cells(target.row,"C") & ","  & cells(target.row,"D") & ","  & cells(target.row,"E") & ","  & vbCrLf & vbCrLf & _
"pour la raison suivante :" & vbCrLf & vbCrLf & _
cells(target.row,"G") 
'Chemin et nom de fichier à expédier au besoin
fichier = ""

Envoi_Courriel Destinataire, objet, Message, fichier
End If

Merci beaucoup !!!

Tout fonctionne niquel !!!

Génial.

Maintenant que tout fonctionne, j'aimerai rajouter quelques choses ....

J'aimerai que, si je mets OUI dans la colonne H, ça envoie un mail ...

Merci par avance.

Bonsoir,

ajout du test pour oui en colonne H

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, Message As String
Dim Destinataire As String, Sujet As String
Dim CheminFichier As String
if target.count<>1 then exit sub
if target="" then exit sub
Set Rg = Intersect(Range("A4:A9999"), Target)
If Not Rg Is Nothing Then
if ucase(cells(target.row,"H"))="OUI" then
Destinataire = "xxx@gmail.com"
'L'objet du message
objet = "ATTENTION PRODUCTION BLOQUÉE..."
'Le message à afficher dans le corps du courriel
Message = "Merci de ne pas expédier le produit" & vbCrLf & vbCrLf & _
"Le service qualité vous informe qu'il a décidé de bloquer le produit suivant : " & vbCrLf & vbCrLf & _
cells(target.row,"B") & ","  & cells(target.row,"C") & ","  & cells(target.row,"D") & ","  & cells(target.row,"E") & ","  & vbCrLf & vbCrLf & _
"pour la raison suivante :" & vbCrLf & vbCrLf & _
cells(target.row,"G") 
'Chemin et nom de fichier à expédier au besoin
fichier = ""

Envoi_Courriel Destinataire, objet, Message, fichier
End If
end if
 

Bonjour,

J'ai peut être mal expliqué mon soucis.

En fait, je souhaite que si on remplit le fichier comme nous l'avons vu précédemment, ça envoie un mail etc...

Ensuite, l'une des personnes qui recevra le mail aura une action à faire physiquement et aussi dans notre ERP puis remplira de nouveau le fichier et mettant que l'action a bien été effectuée (le "OUI" dans la colonne H).

Là, un nouveau mail sera envoyé avec d'autres destinataires que le 1er mail et un corps de message bien différent.

J'espère avoir été clair dans mon explication sinon n'hésitez pas à me demander.

En tout cas, merci de votre temps pour m'aider.

rebonjour,

en effet ton souci n'était pas clair.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rg As Range, Message As String
    Dim Destinataire As String, Sujet As String
    Dim CheminFichier As String
    If Target.Count <> 1 Then Exit Sub
    If Target = "" Then Exit Sub
    Set Rg = Intersect(Range("A4:A9999"), Target)
    If Not Rg Is Nothing Then
        If UCase(Cells(Target.Row, "H")) = "OUI" Then
            'action à prendre si oui en colonne H
        Else    'action à prendre si pas de OUI en colonne H
            Destinataire = "xxx@gmail.com"
            'L'objet du message
            objet = "ATTENTION PRODUCTION BLOQUÉE..."
            'Le message à afficher dans le corps du courriel
            Message = "Merci de ne pas expédier le produit" & vbCrLf & vbCrLf & _
                      "Le service qualité vous informe qu'il a décidé de bloquer le produit suivant : " & vbCrLf & vbCrLf & _
                      Cells(Target.Row, "B") & "," & Cells(Target.Row, "C") & "," & Cells(Target.Row, "D") & "," & Cells(Target.Row, "E") & "," & vbCrLf & vbCrLf & _
                      "pour la raison suivante :" & vbCrLf & vbCrLf & _
                      Cells(Target.Row, "G")
            'Chemin et nom de fichier à expédier au besoin
            fichier = ""

            Envoi_Courriel Destinataire, objet, Message, fichier
        End If
    End If
End Sub

Bonjour,

Cela ne fonctionne pas !!!

Je ne suis pas sûre que mon explication soit encore assez précise...

Je souhaite 2 étapes sur mon fichier :

  • Etape 1 : une production est bloquée pour X raisons et le service qualité rempli le fichier (colonne A, B, C, D, E, F et G) ce qui envoie un mail à plusieurs personnes (c'est le 1er code que tu m'as donné et qui fonctionne très bien)
  • Etape 2 : l'une des personnes qui a reçu le mail d'avertissement du problème qualité doit mettre l'article en stock non conforme dans notre ERP. Une fois qu'il a effectué la manipulation, il vient inscrire oui dans la colonne H ce qui pour moi, doit maintenant envoyer un nouveau mail avec des destinataires différents, un objet et un corps de message différent.

Voilà, j'espère que mon explication est plus claire cette fois-ci.

re-bonjour,

peux-tu nous mettre ton code adapté en fonction de ce que je t'ai suggéré ?

qu'as-tu mis comme code dans action à prendre si OUI en colonne H ?

Bonsoir,

Désolé de ma réponse tardive...

Finalement, je n'ai pas besoin de ma 2ème et la 1ère avec l'envoi du mail etc... me suffit amplement.

Merci de votre aide et d'avoir pris le temps de me répondre.

Rechercher des sujets similaires à "envoi mail suite modification fichier"