Faire tourner une macro en automatique sans ouvrir le fichier excel

Winniechips

XLDnaute Nouveau
Bonjour,

J'ai créé un fichier de suivi des dates d'habilitation avec une mise en forme conditionnelle suivant le délai restant avant fin de validité. Mes cellules passent du vert, au jaune, au orange puis au rouge.
Cette mise en forme fonctionne.

Ce que je souhaitais arriver à faire, c'est que le fichier excel s'ouvre en off lors du démarrage de ma session (sans ouverture du fichier de ma part) et qu'une macro tourne et m'envoie un mail pour me prévenir qu'une échéance arrive.

J'ai donc créé un fichier en VBS que j'ai mis dans le dossier démarrage de ma session. Je pense que le fichier vbs fonctionne car je vois le raccourci temporaire de mon fichier excel sur le bureau :

Fichier VBS :

Dim xlapp, classeur, feuille
Set xlapp = CreateObject("Excel.Application")
Set classeur = xlapp.Workbooks.Open("C:\Documents and Settings\Bureau\Test Tableau de Suivi des Habilitations avec macro.xlsm")
Set feuille = xlapp.ActiveSheet

WScript.Sleep(180*1000)
classeur.close
set feuille = nothing
set classeur = nothing




J'ai créé une macro avec la méthode Auto Open que j'ai placé dans le Workbook :

Sub Auto_Open()
Envoi_Mail_Alerte_Habilitation
End Sub

Sub Envoi_Mail_Alerte_Habilitation()

Dim i As Integer
Dim j As Integer

Dim l_bool_condition1 As Boolean
Dim l_bool_condition2 As Boolean
Dim l_bool_condition3 As Boolean

l_bool_condition1 = False
l_bool_condition2 = False
l_bool_condition3 = False

For i = 3 To 12
For j = 5 To 35

If Worksheets("Suivi").Cells(i, j).Interior.Color = RGB(255, 255, 0) And l_bool_condition1 = False Then
Envoi_Mail_entre_3_et_6_Mois
l_bool_condition1 = True

ElseIf Worksheets("Suivi").Cells(i, j).Interior.Color = RGB(255, 192, 0) And l_bool_condition2 = False Then
Envoi_Mail_inf_3_Mois
l_bool_condition2 = True

ElseIf Worksheets("Suivi").Cells(i, j).Interior.Color = RGB(255, 0, 0) And l_bool_condition3 = False Then
Envoi_Mail_Dépassement
l_bool_condition3 = True

End If

l_bool_condition1 = False
l_bool_condition2 = False
l_bool_condition3 = False

Next j
Next i

End Sub



Ensuite, j'ai créé 3 modules :
Le 1er Module :

Sub Envoi_Mail_inf_3_Mois()

Dim ObjOutlook As New Outlook.Application
Dim oBjMail


Set ObjOutlook = New Outlook.Application
Set oBjMail = ObjOutlook.CreateItem(olMailItem)

With oBjMail
.To = "mon adresse email"
.Subject = "Echéance Habilitations du Personnel"
.Body = "Attention, la date de validité d'une formation ou habilitation d'un salarié est inférieure à 3 Mois."
.Send
End With
ObjOutlook.Quit
Set oBjMail = Nothing
Set ObjOutlook = Nothing

End Sub


Le 2nd Module :

Sub Envoi_Mail_entre_3_et_6_Mois()

Dim ObjOutlook As New Outlook.Application
Dim oBjMail


Set ObjOutlook = New Outlook.Application
Set oBjMail = ObjOutlook.CreateItem(olMailItem)

With oBjMail
.To = "mon adresse email"
.Subject = "Echéance Habilitations du Personnel"
.Body = "Attention, la date de validité d'une formation ou habilitation d'un salarié est comprise entre 3 et 6 Mois."
.Send
End With
ObjOutlook.Quit
Set oBjMail = Nothing
Set ObjOutlook = Nothing

End Sub


Le 3ème Module :

Sub Envoi_Mail_Dépassement()

Dim ObjOutlook As New Outlook.Application
Dim oBjMail


Set ObjOutlook = New Outlook.Application
Set oBjMail = ObjOutlook.CreateItem(olMailItem)

With oBjMail
.To = "mon adresse email"
.Subject = "Echéance Habilitations du Personnel"
.Body = "Attention, la date de validité d'une formation ou habilitation d'un salarié est dépassée."
.Send
End With
ObjOutlook.Quit
Set oBjMail = Nothing
Set ObjOutlook = Nothing

End Sub

Voilà la totalité de mon code sur lequel je travaille depuis plusieurs mois (j'ai des connaissances limitées en programmation mais je me suis débrouillée avec les tutos). Si quelqu'un pourrait m'expliquer pourquoi je ne reçois aucun mail...

Merci du temps que vous prendrez à étudier mon problème.
 

Winniechips

XLDnaute Nouveau
Re : Faire tourner une macro en automatique sans ouvrir le fichier excel

Re-Bonjour,

J'ai de nouveau un message d'erreur ; celui-ci est "Erreur de compilation : tableau attendu" et xlBetween en surbrillance.
Pourriez-vous m'aider, svp ?

Merci par avance.



VB:
Public Sub Envoi_Mail_Alerte_Habilitation()
Dim i As Integer, j As Integer, objOutlook As Outlook.Application
Dim resultat
Set objOutlook = CreateObject("Outlook.Application")

For i = 3 To 12
        For j = 5 To 35
            
            If IsEmpty(ActiveCell) Then
            Else
                resultat = ActiveCell.Value - Range("B14").Value
                
                Select Case Worksheets("Suivi").Cells(i, j).resultat
            
                Case xlBetween(89, 181)
                  EnvoiMail objOutlook, "Attention, la date de validité d'une formation ou habilitation d'un salarié est comprise entre 3 et 6 Mois."
                
                Case xlBetween(0, 91)
                 EnvoiMail objOutlook, "Attention, la date de validité d'une formation ou habilitation d'un salarié est inférieure à 3 Mois."
           
                Case xlLess(1)
                 EnvoiMail objOutlook, "Attention, la date de validité d'une formation ou habilitation d'un salarié est dépassée."
                End Select
        Next j
Next i

objOutlook.Quit
Set objOutlook = Nothing

End Sub
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Faire tourner une macro en automatique sans ouvrir le fichier excel

Re,

Pour coder, il ne suffit pas d'écrire des choses qui semblent logiques...
L'utilisation de xlBetween et xlLess n'a rien à voir avec celle que tu en as faite.
Regarde le premier résultat de cette recherche, tu ne devrais pas avoir de mal à l'adapter :)

Bon courage.

A+
 

Discussions similaires

Statistiques des forums

Discussions
314 630
Messages
2 111 369
Membres
111 115
dernier inscrit
mermo