cs_ju3979
Messages postés8Date d'inscriptionsamedi 8 mai 2004StatutMembreDernière intervention24 juin 2009
-
10 déc. 2007 à 10:04
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
12 déc. 2007 à 22:48
Bonjour à tous,
J'ai créé sous Excel un tableau de gestion de stock
Je souhaiterais que dés qu'il y a un stock inférieur à 1 il envoit automatiquement un mail.
J'ai donc créé une marco mais qui ne fonctionne pas comme je veux
Actuellement si un stock est < à 1 ça m'envoit un mail mais la prochaine fois quand il y aura 2 choses < à 1 il m'enverra 2 mails etc .......
Moi je veux qu'il m'envoit une fois un mail dés qu'une chose est < à 1 et une fois qu'il me l'a envoyé pour cet élément là il ne me le renvoit plus
Voici ma macro que j'ai mis dans module:
<!-- BEGIN TEMPLATE: bbcode_code -->
Sub EnvoiClasseurAd()
Dim myadress(1To2)
Set mylst = ActiveSheet.Range("a200:a201")
Count = 1
ForEach Envoi In mylstIf Len(Envoi)Then myadress(Count) Envoi: Count Count + 1
Next
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 10 déc. 2007 à 23:18
Il faudrait que tu te crées une variable String, disons, ou un tableau qui cumule les données. Une fois que les données ont toutes été lues, là tu envoies le mail si la variable ou le tableau n'est pas vide.
Peut-être quelque chose comme
PrivateSub Worksheet_Calculate()
Dim Message as String
If Cells(8, 3).Value < 2Or Cells(9, 3).Value < 2Or Cells(10, 3)Then
Message = Message & "ce que tu veux envoyer" & vbcrlf
End If
EnvoiClasseurAd Message
EndSub
Et tu déclares ton autre Sub comme ceci
Sub EnvoiClasseurAd(LeMessage As String)
et tu utilises la variable LeMessage dans ton mail
cs_ju3979
Messages postés8Date d'inscriptionsamedi 8 mai 2004StatutMembreDernière intervention24 juin 2009 11 déc. 2007 à 09:53
bonjour et merci pour ta réponse
Comme je l'ai dit c'est ma premieère macro donc j'ai un peu de mal à comprendre ta réponse
Peux tu m'expliquer davantage ou me dire exactement ce qu'il faut que je mette dans mes macros
Car je ne comprend pas la ligne Message = Message & "ce que tu veux envoyer" & vbcrlf
Et l'autre sub à déclaré il faut mettre quoi dedans ? que veux tu dire par "et tu utilises la variable LeMessage dans ton mail"
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 11 déc. 2007 à 11:23
Désolé, mais je pense que j'ai mal saisi le problème...
Je croyais que tu entrais des données dans le corps du message et que pour chaque message différent un nouveau mail s'envoyait... Mais je vois que tu n'envoies qu'un message avec sujet, sans corps (?)
Que contiennent ces cellules ?
Range("a200:a201")
2 adresses différentes ?
ForEach Envoi In mylstIfLen(Envoi)Then myadress(Count) Envoi: Count Count + 1
Next
Pourquoi utiliser Len(Envoi) si, de toutes façons, tu l'utilises dans l'envoi ?
Mais ça ne change rien au problème... Tu es certain que tu n'utilises pas EnvoiClasseurAd à quelque part ailleurs que dans _Calculate ? dans _Change, peut-être ?
cs_ju3979
Messages postés8Date d'inscriptionsamedi 8 mai 2004StatutMembreDernière intervention24 juin 2009 11 déc. 2007 à 13:49
les cellules a200 et a201 contiennent 2 adresses mails différentes
J'ai aussi rémarqué que dans les cellules si je met pas un égal devant la valeur, ma macro ne se déclenche pas!!!
sinon pour utilisé le Len(envoi) je ne sais pas c'est un bout de macro que j'ai récupéré sur le net
Si tu peux m'aider à créer une macro qui fonctionne, je te rappel la problèmatique:
C'est un tableau de stock de cartouche
Si une valeur est inférieur ou égal à 1 alors la macro se déclenche
ensuite prenons un exemple si le stock de rouge est inférieur à 1 alors il m'envoit un mail. Si 3 jours plus tard je vais de nouveau dans le tableau et je met que le stock de noir est inférieur à 1 alors il ne m'envoit qu'un seul mail (et pas 2 car il y 2 valeurs inférieur à 1)
Merci pour ton aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 déc. 2007 à 11:14
C'est plus simple à gérer quand tu utilises un contrôle quelconque.
Tu pourrais utiliser un UserForm qui apporte les modifications à ta feuille de données. Quand tu fermes le UserForm, tu fais alors les vérifications et tu envoies le mail si nécessaire.
Si tu tiens à continuer seulement avec les cellules, tu pourrais utiliser l'événement _Change() qui ne nécessiterait pas d'avoir de "=", mais ça demeure un peu complexe à gérer... À chaque changement de valeur d'une cellule, le programme va entrer en vérification. Un peu abusif à mon avis.
J'irais avec 2 méthodes. Un UserForm qui apporte le modifs à la feuille et qui vérifie tout de même si le stock minimum n'est pas atteint au fur et à mesure des changements, puis vérification finale lorsque les modifs sont terminées et là, envoi d'un mail si nécessaire.
PS: je n'attendrais pas d'être rendu à <=1 pour envoyer un mail... Ça peut être long avant de pouvoir remplir le stock...