Envoie mail automatique dans excel

Signaler
Messages postés
8
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
24 juin 2009
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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
 
ActiveWorkbook.SendMail Recipients:=Array(myadress(1), myadress(2)), Subject:=" Alerte Stock Cartouches"
 
EndSub

<!-- END TEMPLATE: bbcode_code -->Ensuite dans feuil1 j'ai mis:

<!-- BEGIN TEMPLATE: bbcode_code -->

PrivateSub Worksheet_Calculate()
 
    If Cells(8, 3).Value < 2Or Cells(9, 3).Value < 2Or Cells(10, 3)Then EnvoiClasseurAd
        
EndSub

<!-- END TEMPLATE: bbcode_code -->Je suis vraiment débutant en vb
Merci pour votre aide

9 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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

MPi²
Messages postés
8
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
24 juin 2009

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"

Encore merci pour ton aide
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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 ?

MPi²
Messages postés
8
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
24 juin 2009

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Peux-tu expliquer de quelle façon le stock est modifié ?

Est-ce que tu utilises un UserForm pour modifier les quantités ? ou est-ce que tu changes directement dans les cellules ?

MPi²
Messages postés
8
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
24 juin 2009

Je modifi les valeurs directement dans les cellules
Maintenant si tu as une autre solution qui fonctionne je suis preneur
Encore merci pour ton aide
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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...

MPi²
Messages postés
8
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
24 juin 2009

Oui très bonne solution avec le userform
Peux tu me mettre le code pour que je puisse mettre en place cela

D'avance un grans merci
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Si tu fais une recherche sur le site avec les mots
stock
excel
vba
tu devrais trouver des bouts de code sinon des applis complètes ...

Si tu rencontres un problème particulier, reviens nous voir avec des questons précises

MPi²