Microsoft 365 Macro pour alerte à date butoirs

armorik75

XLDnaute Nouveau
Bonjour à tous

Comme je l'ai identifié dans mon post de présentation je développe un outil de gestion de suivi client.

Cet outil je vais l’améliorer au fur et à mesure mais pour le moment je bloque sur une partie du codage. Ma macro se lance bien automatiquement pour vérifier les dates dans la colonne P et m’alerte avec un messagBox qu’il reste 15 jours avant la date d’échéance.

Toutefois l’alerte s’affiche même lorsque que la cellule est vide (pas de date), je voudrais donc coder et exclure de l’alerte les cellules vides.

De même je voudrais qu’il n’y ai pas d’alerte si dans la colonne R, la mise en forme conditionnelle indique le drapeau vert (cela sous entends que la condition donc l’émission des offres a été faite).

Je ne sais pas si j’ai été assez précis dans mon énoncé donc je vous joins le code ainsi que mon fichier .xlsm de travail pour le codage.

Pour le code soyez indulgent car c’est mon tout premier et je suis conscient que ce n’est pas forcément le plus sexy des codes macro.

Merci pour votre aide.

Armorik75

Sub Workbook_Open()
derlig = Sheets("Tableau suivi clients").Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each c In Sheets("Tableau suivi clients").Range("P2:p" & derlig)
ecart = c - Date
c.Interior.ColorIndex = -4142
If ecart <= 15 Then
MsgBox "Alerte présentation des offres pour dossier " & c.Offset(0, -15) & " est définie dans " & ecart & " jours" & vbLf & _
"Merci de faire le nécessaire "
c.Interior.Color = RGB(255, 0, 0)
End If
Next
End Sub
 

Pièces jointes

  • Base travail 1.xlsm
    17.7 KB · Affichages: 32

sousou

XLDnaute Barbatruc
bonjour
quelque choses comme ceci
Sub Workbook_Open()
derlig = Sheets("Tableau suivi clients").Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each c In Sheets("Tableau suivi clients").Range("P2:p" & derlig)
ecart = c - Date
c.Interior.ColorIndex = -4142
If ecart <= 15 And c.Offset(0, 2) < 2 And c <> "" Then
MsgBox "Alerte présentation des offres pour dossier " & c.Offset(0, -15) & " est définie dans " & ecart & " jours" & vbLf & _
"Merci de faire le nécessaire "
c.Interior.Color = RGB(255, 0, 0)
End If
Next
End Sub
 

armorik75

XLDnaute Nouveau
Yes merci Sousou pour cette contribution (et désolé pour l’émoticône je viens de m'en rendre compte)...pfff.

Il me vient un doute par rapport à la MsgBox...si je lance une ouverture du fichier par le planificateur de tâche windows (car à terme j'aimerais coder pour qu'une analyse du fichier se fasse une fois par jour sans que l'on soit obligé de l'ouvrir manuellement et qu'un mail d'alerte parte sur une boite gmail) les MsgBox vont bloquer le processus non ? puisqu'il faut cliquer sur ok à chaque fois ?

Si vous avez un éclairage sur le sujet ou quelqu'un d'autre ? Ou dites moi si je dois marqué mon sujet ici présent comme résolu pour ouvrir un autre post ?

Encore une fois merci pour votre retour.

Armotik75
 

sousou

XLDnaute Barbatruc
Bonjour.
Pour la petite histoire, j'ai déjà fait ce travail, il y à quelques années, pour un suivi de sécurité incendie.
1/un fichier vbs, lancé par windows
2/ ce dernier lance en tache masquée excel
3/ excel fait son boulot, contrôle, envoi de mail....
4/ et tout se referme.
Je regarde ce qui me reste comme code...
 

sousou

XLDnaute Barbatruc
Juste pour te donner une piste
Regarde le fichier vbs(notepad)
Il te suffit de remplacer les messages par l'envoi de mail, et pour cela tout dépend de la messagerie utilisée.
Mon fichier est trop spécifique pour qu'il te serve vraiment.
Mais tu peux avancer dans se sens
 

Pièces jointes

  • basetravail.zip
    12.4 KB · Affichages: 18

armorik75

XLDnaute Nouveau
Bonjour Sousou

Merci pour le coup de main. Mais dès lors si je vire les MsgBox il n'y a plus de problème d'ouverture automatique du fichier par le planificateur de tâche windows donc pas besoin d'un VBS, je me trompe ? Je vais poser une question certainement bête mais est ce que le système peut différencier une ouverture automatique du fichier xls d'une ouverture manuelle ?
 

armorik75

XLDnaute Nouveau
Excuse moi je pose des questions de débutant (ce que je suis d'ailleurs) mais rendre l'appli invisible c'est à dire ? Pour ouvrir le VBS il faut tout de même faire une programmation du planificateur de tache windows ou je n'ai pas compris ?
 

sousou

XLDnaute Barbatruc
Bonjour
Le fichier excel pourrait être utilisé normalement pour y saisir des données, par exemple, et pourrait être lancé automatiquement pour y faire des controles, les deux opérations ne faisant pas appel aux même macro.
Et pas nécessairement à l'ouverture du fichier
Le lancement automatique n' a peut-être pas besoin d'être visible et peut se passer en tâche de fond, si un utilisateur est sur le pc à ce moment. En tous cas c'est à peu près les besoins que nous avions à l'époque
Ci-joint un exemple mélangeant un peu tout cela
 

Pièces jointes

  • basetravail.zip
    15.4 KB · Affichages: 18

armorik75

XLDnaute Nouveau
Ah ok je comprends mieux ton idée.
Mais l'idée de l'ouverture automatique vient du fait que le tableau de suivi client ne sera pas ouvert tous les jours par mes associés et que surtout ce n'est pas un fichier mutualisé (chaque associés aura son propre tableau). Par ailleurs on ne travaille pas forcément énormément sur ce fichier.

Je viens de tenter une adaptation pour changer les MsgBox en envoi de mail sur gmail c'est une catastrophe . Tu as déjà fait ce type de macro ? D'autant que je cherche à ce qu'un mail soit envoyé s'il répond aux conditions déjà déterminées ensemble pour chaque dossier sans corps de texte mais juste en objet mail "Alerte dossier client Untel"

Armorik75

VB:
Sub EnvoiSmtp()
 
    Dim iMsg As Object
    Dim iConf As Object
    Dim strbody As String
    Dim Flds As Variant
    Dim cell As Range
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")

        iConf.Load -1
        Set Flds = iConf.fields
        With Flds
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Mon adresse mail@gmail.com"
            .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Mon password"
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "465"
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
            .Update
        End With
    With Sheets("Tableau suivi clients")
derlig = Sheets("Tableau suivi clients").Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each c In Sheets("Tableau suivi clients").Range("P2:P" & derlig)
 ecart = c - Date
c.Interior.ColorIndex = -4142
If ecart <= 15 And c.Offset(0, 2) < 2 And c <> "" Then
                    Subject = "ALERTE DOSSIER" & cell.Offset(, -15) & cell.Value
                    
            End If
        Next
        With iMsg
                Set .Configuration = iConf
                .To = "Mon adresse mail@gmail.com"
                .CC = ""
                .BCC = ""
                .From = "Mon adresse mail@gmail.com"
                .Subject = ""
                .Send
            End With
    End With
    Set iMsg = Nothing
    Set iConf = Nothing
    Set Flds = Nothing
End Sub
 

sousou

XLDnaute Barbatruc
Bonjour
Pour ma part j'avais jamais utilisé cdo mais une messagerie d'entreprise.
Mais j'ai essayé comme ceci et ca fonctionne.
Sub Workbook_Open()
nbalert = 0
derlig = Sheets("Tableau suivi clients").Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each c In Sheets("Tableau suivi clients").Range("P2:p" & derlig)
ecart = c - Date
c.Interior.ColorIndex = -4142
If ecart <= 15 And c.Offset(0, 2) < 2 And c <> "" Then
Call envoi(c.Offset(0, -15) & " est définie dans " & ecart & " jours")

nbalert = nbalert + 1
c.Interior.Color = RGB(255, 0, 0)
End If
Next
End Sub



Sub envoi(mess)
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
With iConf.Fields
.Item("") = 1
.Item("") = "ton adresse mail"
.Item("") = "ton mot de passe"
.Item("") = 2
.Item("") = "le serveur smtp"
smtp.gmail.com pour gmail il me semble mais pas sur.
.Item("") = 25
.Update
End With
With iMsg
Set .Configuration = iConf
.To = "adresse destinataire"
.CC = ""
.BCC = ""
.From = ""
.Subject = "Alert"
.textbody = mess
.Send

End With
End Sub
 

armorik75

XLDnaute Nouveau
Bonjour Sousou

Chez moi ça ne fonctionne pas.

J'ai essayé avec cela mais ca ne fonctionne pas non plus :

VB:
Sub Workbook_Open()
nbalert = 0
derlig = Sheets("Tableau suivi clients").Cells(Cells.Rows.Count, "A").End(xlUp).Row
For Each c In Sheets("Tableau suivi clients").Range("P2:p" & derlig)
ecart = c - Date
c.Interior.ColorIndex = -4142
If ecart <= 15 And c.Offset(0, 2) < 2 And c <> "" Then
Call envoi(c.Offset(0, -15) & " est définie dans " & ecart & " jours")

nbalert = nbalert + 1
c.Interior.Color = RGB(255, 0, 0)
End If
Next
End Sub



Sub envoi(mess)
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
With iConf.fields
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxxxxxxxx@gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxx"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
.Update
End With
With iMsg
Set .Configuration = iConf
.To = "xxxxxxxxxxxxxxxxxxxxxxx.com"
.CC = ""
.BCC = ""
.From = "xxxxxxxxxxxxxx@gmail.com"
.Subject = "Alert"
.textbody = mess
.Send

End With
End Sub



mais pareil il me dit
Annotation 1.jpg
 

armorik75

XLDnaute Nouveau
J'avais coché dans outil/référence Microsoft CDO for windows 2000 library mais il ne s'était pas enregistré.

Néanmoins j'ai refais un essai et cette fois çi cela me renvoi un autre code d'erreur :

Annotation 2.jpg


J'ai pourtant vérifier tous les paramètres de connexion et il me semble bon (j'ai même réduit la sécurité dans les paramètres de ma boite gmail)

Je ne comprends pas
 

sousou

XLDnaute Barbatruc
Bonjour
J'ai essayé comme toi même problème.
J'ai parcouru le web, il semble qu'il faille mettre le serveur smptp du FAI sur lequel tu es raccordé
C'est pour cela que ca marche chez moi avec free,
En tout cas c'est pas très clair pour moi,?
 

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 016
Membres
103 093
dernier inscrit
Molinari