Bonjour,
J'essaie d'expliquer mon problème le plus clairement possible...
J'aimerais que mon fichier excel envoie un email lors de sa fermeture, à condition qu'une modification ait été effectuée dans un champ donné (feuille1, colonnes A à H).
- Pour cela, j'ai déclaré une variable booléenne globale "modif" qui est affectée à "false" à l'ouverture du fichier (dans module thisworkbook)
- Ensuite, dans module Sheet1, j'affecte la valeur "true" à "modif" si un changement est effectué dans le champ défini.
- Ensuite je reviens dans le module thisworkbook et demande d'envoyer le mail seulement si la condition modif=TRUE est remplie et que Outlook est ouvert.
Il y a un problème avec la variable "modif", car le mail n'est pas envoyé. Je je sais pas si c'est un problème d'accès à la variable ou si la valeur de celle-ci n'est pas correctement mise à jour..
Merci d'avance pour votre aide précieuse et salutations
J'essaie d'expliquer mon problème le plus clairement possible...
J'aimerais que mon fichier excel envoie un email lors de sa fermeture, à condition qu'une modification ait été effectuée dans un champ donné (feuille1, colonnes A à H).
- Pour cela, j'ai déclaré une variable booléenne globale "modif" qui est affectée à "false" à l'ouverture du fichier (dans module thisworkbook)
Code:
Public Modif As Boolean
Sub Workbook_Open()
Modif = False
End Sub
- Ensuite, dans module Sheet1, j'affecte la valeur "true" à "modif" si un changement est effectué dans le champ défini.
Code:
Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
' Détection de modifications
For Each Cel In Target
If Not Intersect(Cel, Range("A1:H1000")) Is Nothing Then ' Plage de cellules à contrôler
Modif = True
'Cel.Interior.Color = vbRed ' Mettre en évidence la cellule modifiée
End If
Next Cel
End Sub
- Ensuite je reviens dans le module thisworkbook et demande d'envoyer le mail seulement si la condition modif=TRUE est remplie et que Outlook est ouvert.
Code:
Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Utilisateur As String
Utilisateur = Application.UserName
Dim nom_fichier As String
nom_fichier = "O:\HG\ST" ' Adresse fichier
' Envoi email si outlook est ouvert
Dim Appli As Object
On Error Resume Next
Set Appli = GetObject(, "Outlook.Application")
'If ThisWorkbook.Worksheets("Liefertermine").Modif.Value = True Then
If Modif = True Then
If Appli Is Nothing Then
Else
' À la fermeture du fichier, envoyer un email
Dim ol As Object, monmail As Object
DisplayAlerts = False
Set ol = CreateObject("outlook.application")
Set monmail = ol.CreateItem(olMailItem)
monmail.To = "yy.xx@machin.com" ' Adresse email à entrer
monmail.Subject = "Installation GX - Modifications commandes"
monmail.Body = "Modifications effectuées dans le fichier de commandes par " & Utilisateur & Chr(10) & Chr(10) & _
"Le fichier se trouve à l'adresse suivante:" & Chr(10) & "file://" & nom_fichier
monmail.Send
Set ol = Nothing
End If
End If
End Sub
Il y a un problème avec la variable "modif", car le mail n'est pas envoyé. Je je sais pas si c'est un problème d'accès à la variable ou si la valeur de celle-ci n'est pas correctement mise à jour..
Merci d'avance pour votre aide précieuse et salutations
Pièces jointes
Dernière édition: