XL 2016 Enoyer un email automatique par rapport a un stock

Flo26

XLDnaute Nouveau
Bonjour,

Mon fichier de gestion de stock fonctionne bien grasse à vous.
il manque cependant d'une fonction indispensable, un rappel par mail des stocks bas.

Je voudrais que lorsque la colonne M affiche le mot "FAUX" un email soit envoyé qu'une fois afin de prévenir du stock bas (dans le mail quantité de la colonne I avec le code barre de la colonne A) .
J'ai une ligne de code VBA pour cela, malheureusement rien ne se passe.
J'ai encore une fois besoin de votre aide pour me sortir de se problème.

dans VBA, jai activé "microsft office 16.0 object library.

Un grand merci d'avance.
 

Fichiers joints

Flo26

XLDnaute Nouveau
Sub mail_auto_fin_procédure()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim L As Long

With Worksheets("feuil1") 'adaptez le nom de feuille
derlig = .Range("M" & Rows.Count).End(xlUp).Row
For L = 1 To derlig
strbody = ""
If .Range("M" & L) = "FAUX" And .Range("D" & L) = Date Then
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = .Range("A" & L) & " et " & .Range("I" & L) & " sont disponibles"
'On Error Resume Next
With OutMail
.To = "*****@****.com"
.CC = ""
.BCC = ""
.Subject = "A vérifier"
.Body = strbody
.Display 'visu @MAIL
'.Send ' pour l'envoi du @MAIL
End With
.Range("M" & L) = "FAUX" & " Ok" 'modification pour eviter x envoi
On Error GoTo 0
End If
Set OutMail = Nothing
Set OutApp = Nothing
Next L
End With
End Sub
 

danielco

XLDnaute Occasionnel
Dans le module "ThisWorkbook", mets :

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Mail_auto_fin_procédure
End Sub
Daniel
 

Flo26

XLDnaute Nouveau
Merci Daniel de tas réponse mais je n'est toujour pas email envoyer ?

Est ce que j'ai bien fais se que tu voulais ?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim derlig As Variant

Dim L As Long

With Worksheets("feuil1") 'adaptez le nom de feuille
derlig = .Range("M" & Rows.Count).End(xlUp).Row
For L = 1 To derlig
strbody = ""
If .Range("M" & L) = "FAUX" And .Range("D" & L) = Date Then
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = .Range("A" & L) & " et " & .Range("I" & L) & " sont disponibles"
'On Error Resume Next
With OutMail
.To = "*****@****.com"
.CC = ""
.BCC = ""
.Subject = "A vérifier"
.Body = strbody
.Display 'visu @MAIL
'.Send ' pour l'envoi du @MAIL
End With
.Range("M" & L) = "FAUX" & " Ok" 'modification pour eviter x envoi
On Error GoTo 0
End If
Set OutMail = Nothing
Set OutApp = Nothing
Next L
End With
End Sub

 

danielco

XLDnaute Occasionnel
Oui. Mais pour déclencher un mail, il faut que la colonne D soit égale à la date d'aujourd'hui. Or il n'y a pas de date en colonne D ?

Daniel
 

Flo26

XLDnaute Nouveau
Effectivement, bien-vue Daniel. j'ai donc supprimer cette fonction.
Mais toujours pas de mail envoyé.
Je précise je suis novice en VBA et j'ai récupéré cette macro en essayant de l'adapté à mon fichier de stock.
Une chose que je ne comprend pas c'est la partie Dim L as long. quelle est la fonction du L ?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim L As Long
Dim derlig As Variant


With Worksheets("feuil1") 'adaptez le nom de feuille
derlig = .Range("M" & Rows.Count).End(xlUp).Row
For L = 1 To derlig
strbody = ""
If .Range("M" & L) = "FAUX" Then
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = .Range("A" & L) & " et " & .Range("I" & L) & " sont disponibles"
'On Error Resume Next
With OutMail
.To = "*****@****.com"
.CC = ""
.BCC = ""
.Subject = "A vérifier"
.Body = strbody
.Display 'visu @MAIL
'.Send ' pour l'envoi du @MAIL
End With
.Range("M" & L) = "FAUX" & " Ok" 'modification pour eviter x envoi
On Error GoTo 0
End If
Set OutMail = Nothing
Set OutApp = Nothing
Next L
End With
End Sub
 

danielco

XLDnaute Occasionnel
Comme FAUX résulte d'une condition, c'est une valeur booléenne. Il ne faut pas la mettre entre guillemets.

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim OutApp As Object
  Dim OutMail As Object
  Dim strbody As String
  Dim L As Long, DerLig As Long
  Set OutApp = CreateObject("Outlook.Application")
  With Worksheets("feuil1") 'adaptez le nom de feuille
    DerLig = .Range("M" & Rows.Count).End(xlUp).Row
    For L = 1 To DerLig
      'If L = 27 Then Stop
      strbody = ""
      If .Range("M" & L) = FAUX Then
      Set OutMail = OutApp.CreateItem(0)
      strbody = .Range("A" & L) & " et " & .Range("I" & L) & " sont disponibles"
      With OutMail
        .To = "*****@****.com"
        .CC = ""
        .BCC = ""
        .Subject = "A vérifier"
        .Body = strbody
        .Display 'visu @MAIL
        '.Send ' pour l'envoi du @MAIL
      End With
      .Range("M" & L) = "FAUX" & " Ok" 'modification pour eviter x envoi
      End If
    Next L
  End With
  Set OutApp = Nothing
End Sub
Daniel
 
Haut Bas