Mister alex
XLDnaute Nouveau
Bonjour à tous,
Je suis débutant en macro. J'ai mis en place un fichier permettant de gérer le stock de mon entreprise. Il est constitué de 3 feuilles, une feuille "reste en stock", une feuille "entrée en stock", et une feuille "sortie de stock". Le calcul du solde restant (compris dans la feuille "reste en stock"en colonne D) reprend les valeurs inscrites dans les feuilles "entrées" et "sorties de stock". Le calcul du solde est donc automatisé.
Toujours dans la feuille "reste en stock", on trouvera le point de commande, c'est à dire la quantité en stock où il faudra passer commande. Donc pour résumer, si le solde (colonne D) est inférieur ou égale au point de commande (colonne E) il faut passer commande
Je fais donc appel à vous car je cherche une macro qui m'alerterai avec une alerte msgbox que le point de commande a été atteint (la question serait: voulez vous commander: oui ou non). Par la suite un Clique sur oui déclencherait l'envoi d'un mail.
J'ai trouvé un code qui répondait à peu près à cette problématique sauf que la msgbox ne s'affiche seulement quand les valeurs comprises dans la colonne D étaient entrées manuellement. Je cherche donc une macro qui se lancerait dès que le résultat de la formule située en colonne D change et serait inférieure ou égale au point de commande en colonne E.
Je vous laisse le code (qui ne marche pas)
Code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Then
GoTo endsub
End If
k = Target.Row
If Range("F" & k).Value <> "envoi mail" Then
GoTo endsub
End If
If Range("F" & k).Value = "envoi mail" Then
GoTo EnvoiMail
End If
EnvoiMail:
MsgBox "voulez-vous commander ?", vbYesNo, "Stock critique"
If MsgBoxResult = vbYes Then
P = ThisWorkbook.Path
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=P & "\Commande.pdf" 'From:=1, To:=2
Dim oCDO
Set oCDO = CreateObject("CDO.Message")
With oCDO
With .Configuration.Fields ' Configuration du compte mail SMTP
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = "2"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Adresse smtp du serveur"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "numéro de port du serveur"
'----- Dans le cas ou le serveur de mail demande une authentification
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "adresse sur le serveur utilisée pour l'envoi"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mot de passe pour cette adresse "
'----------------
.Update
End With
.From = "adresse sur le serveur"
.To = "misteralex@XLS.com"
.TextBody = "Texte du mail"
.AddAttachment P & "\Commande.pdf"
.Send
End With
Kill (P & "\Commande.pdf")
MsgBox "Une alerte mail a été envoyé au responsable des commandes"
GoTo endsub
End If
If MsgBoxResult = vbNo Then
GoTo endsub
End If
endsub:
End Sub
Voila, j'espère que mes explications sont compréhensibles...
Je vous laisse mon fichier en pièce jointe, ce sera peut etre plus clair?
Merci d'avance,
Alex
Je suis débutant en macro. J'ai mis en place un fichier permettant de gérer le stock de mon entreprise. Il est constitué de 3 feuilles, une feuille "reste en stock", une feuille "entrée en stock", et une feuille "sortie de stock". Le calcul du solde restant (compris dans la feuille "reste en stock"en colonne D) reprend les valeurs inscrites dans les feuilles "entrées" et "sorties de stock". Le calcul du solde est donc automatisé.
Toujours dans la feuille "reste en stock", on trouvera le point de commande, c'est à dire la quantité en stock où il faudra passer commande. Donc pour résumer, si le solde (colonne D) est inférieur ou égale au point de commande (colonne E) il faut passer commande
Je fais donc appel à vous car je cherche une macro qui m'alerterai avec une alerte msgbox que le point de commande a été atteint (la question serait: voulez vous commander: oui ou non). Par la suite un Clique sur oui déclencherait l'envoi d'un mail.
J'ai trouvé un code qui répondait à peu près à cette problématique sauf que la msgbox ne s'affiche seulement quand les valeurs comprises dans la colonne D étaient entrées manuellement. Je cherche donc une macro qui se lancerait dès que le résultat de la formule située en colonne D change et serait inférieure ou égale au point de commande en colonne E.
Je vous laisse le code (qui ne marche pas)
Code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Then
GoTo endsub
End If
k = Target.Row
If Range("F" & k).Value <> "envoi mail" Then
GoTo endsub
End If
If Range("F" & k).Value = "envoi mail" Then
GoTo EnvoiMail
End If
EnvoiMail:
MsgBox "voulez-vous commander ?", vbYesNo, "Stock critique"
If MsgBoxResult = vbYes Then
P = ThisWorkbook.Path
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=P & "\Commande.pdf" 'From:=1, To:=2
Dim oCDO
Set oCDO = CreateObject("CDO.Message")
With oCDO
With .Configuration.Fields ' Configuration du compte mail SMTP
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = "2"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Adresse smtp du serveur"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "numéro de port du serveur"
'----- Dans le cas ou le serveur de mail demande une authentification
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "adresse sur le serveur utilisée pour l'envoi"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mot de passe pour cette adresse "
'----------------
.Update
End With
.From = "adresse sur le serveur"
.To = "misteralex@XLS.com"
.TextBody = "Texte du mail"
.AddAttachment P & "\Commande.pdf"
.Send
End With
Kill (P & "\Commande.pdf")
MsgBox "Une alerte mail a été envoyé au responsable des commandes"
GoTo endsub
End If
If MsgBoxResult = vbNo Then
GoTo endsub
End If
endsub:
End Sub
Voila, j'espère que mes explications sont compréhensibles...
Je vous laisse mon fichier en pièce jointe, ce sera peut etre plus clair?
Merci d'avance,
Alex