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.
 

Pièces jointes

  • douchette.xlsm
    44.6 KB · Affichages: 16

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
 

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

 

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 Accro
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
 

Flo26

XLDnaute Nouveau
non cela ne fonctionne pas encore, pas email envoyer quand état faux est dans la colonne M. Pouvez vous me confirmer que je suis déjà bien réglé au niveaux des outils références ?
Sans titre.jpg
 

Flo26

XLDnaute Nouveau
Bonjour,

Après un de petit contre temps, je me suis remis sur mon projet d'alerte par Email de mon stock.
Donc la bonne nouvelle c'est que j'arrive a déclencher le lancement de l'email.
Deux problème se pose :
- le premier est que l'email ce lance uniquement à la fermeture de fichier excel, alors que je voudrais qu'il ce lance juste au changement d’état de la colonne M (passage en FAUX).
- le second est qu'il m'envoie autant de mail que de ligne au dessus de celle qui comporte "FAUX"
(exemple : si a la ligne 28, "FAUX" apparaît dans la colonne M, alors 28 email vont être envoyés)
Hors je voudrais uniquement les infos de la ligne concerné.

Un grand merci d'avance de m'aider, je sens que le but n'est pas loin.
 

Pièces jointes

  • Stock Magasin.xlsm
    57.7 KB · Affichages: 19

Discussions similaires

Réponses
17
Affichages
1 K
Réponses
22
Affichages
2 K

Statistiques des forums

Discussions
311 722
Messages
2 081 930
Membres
101 843
dernier inscrit
Thaly