Attendre que j'envoie le mail
Bonjour, j'ai écrie un code qui me prépare un mail: je filtre mes colonnes pour envoyer qu'une certaine partie de mes cellules puis j'ouvre l'enveloppe visible afin que je saisies manuellement l'adresse mail puis je clique sur Envoyer et je souhaiterais qu’après le code finisse par s’exécuter (supprimer les filtres et revenir a la page accueil), alors que pour l'instant le code s’exécute alors que j'ai pas encore cliqué sur Envoyer du coup j'envoie ma feuille sans le filtre et surtout j'envoie la page Accueil vue que je suis revenu dessus a la fin de mon code
J'ai voulu attendre ou tester si enveloppe visible était vrai mais je reste bloqué dans ma boucle
pourriez vous me dire comment faire pour que mon code attende que je clique sur envoyé et que enveloppe visible devienne false pour executer la fin de mon code svp?
Private Sub CommandButtonOui_Click()
Unload Me
Dim Client As String
Client = ComboBoxMail.Value
'Supprime les alertes
Application.DisplayAlerts = False
'Rend visible la feuille Mail
ThisWorkbook.Worksheets("Mail").Visible = True
'MAIL CasParCas
'Verifie si il faut envoyer le mail
ThisWorkbook.Worksheets("Mail").Select
Set Cellule = Columns("B:B").Find("Client")
If Not Cellule Is Nothing Then
'Réactive les filtres
With Worksheets("Mail")
If Not .AutoFilterMode Then
.Cells.AutoFilter
End If
End With
'Mise en place d'un filtres sur le fichier Mail
'Choix du Client
ThisWorkbook.Worksheets("Mail").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$100").AutoFilter Field:=2, Criteria1:=ComboBoxMail.Value
'Remplace le tonnage globale par OBSERVATION
ThisWorkbook.Worksheets("Mail").Select
Range("F1").FormulaLocal = "OBSERVATION"
'Selectionne la plage de cellules à envoyer
ThisWorkbook.Worksheets("Mail").Select
ActiveSheet.Range("A1:F49").Select
'Envoie seulement la feuille visible
ActiveWorkbook.EnvelopeVisible = True
'Supprime les anciens destinataire
For CP = ActiveSheet.MailEnvelope.Item.Recipients.Count To 1 Step -1
ActiveSheet.MailEnvelope.Item.Recipients(CP).Delete
Next CP
'Envoie le mail
With ActiveSheet.MailEnvelope
.Introduction = ("Veuillez trouver ci dessous" & Chr(13) & "A communiquer aux personnes concernées" & Chr(13) & "Cordialement")
.Item.Subject = "Retour planning Macamix"
.Item.display
' .Item.Send 'permet de rentrer l'adresse mail
End With
'Supprime les eventuels filtres
ThisWorkbook.Worksheets("Mail").Select
With Worksheets("Mail")
If .AutoFilterMode Then
.Cells.AutoFilter
End If
End With
'Permet de revenir à la page PlanningJournalier à la fin de la macro
Sheets("PlanningJournalier").Select
'Rend invisible la feuille Mail
ThisWorkbook.Worksheets("Mail").Visible = False
'Réactive les alertes
Application.DisplayAlerts = True
'Désactive l'affichage
Application.ScreenUpdating = True
Application.EnableEvents = True
End If
End Sub- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Vous devez utiliser les procédures événementielles liées à mailenveloppe.
1- insérer ce code dans ThisWorkBook
Dim WithEvents evts_envelope As MsoEnvelope
Public attente_envoi As Boolean
Public Sub activer_evts(sh)
Set evts_envelope = sh.MailEnvelope
End Sub
Private Sub evts_envelope_EnvelopeShow()
attente_envoi = True
End Sub
Private Sub evts_envelope_EnvelopeHide()
attente_envoi = False
End Sub2- modifier votre code ainsi :
Private Sub CommandButtonOui_Click()
Unload Me
Dim Client As String
Client = ComboBoxMail.Value
'Supprime les alertes
Application.DisplayAlerts = False
'Rend visible la feuille Mail
ThisWorkbook.Worksheets("Mail").Visible = True
'MAIL CasParCas
'Verifie si il faut envoyer le mail
ThisWorkbook.Worksheets("Mail").Select
Set Cellule = Columns("B:B").Find("Client")
If Not Cellule Is Nothing Then
'R?active les filtres
With Worksheets("Mail")
If Not .AutoFilterMode Then
.Cells.AutoFilter
End If
End With
'Mise en place d'un filtres sur le fichier Mail
'Choix du Client
ThisWorkbook.Worksheets("Mail").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$100").AutoFilter Field:=2, Criteria1:=ComboBoxMail.Value
'Remplace le tonnage globale par OBSERVATION
ThisWorkbook.Worksheets("Mail").Select
Range("F1").FormulaLocal = "OBSERVATION"
'Selectionne la plage de cellules ? envoyer
ThisWorkbook.Worksheets("Mail").Select
ActiveSheet.Range("A1:F49").Select
'Envoie seulement la feuille visible
'ActiveWorkbook.EnvelopeVisible = True A déplacer ...........................
'Supprime les anciens destinataire
For CP = ActiveSheet.MailEnvelope.Item.Recipients.Count To 1 Step -1
ActiveSheet.MailEnvelope.Item.Recipients(CP).Delete
Next CP
'Envoie le mail
With ActiveSheet.MailEnvelope
.Introduction = ("Veuillez trouver ci dessous" & Chr(13) & "A communiquer aux personnes concernées" & Chr(13) & "Cordialement")
.Item.Subject = "Retour planning Macamix"
End With
Call ThisWorkbook.activer_evts(ActiveSheet) 'activation événements mailenveloppe dans Thisworbook
ThisWorkbook.EnvelopeVisible = True 'affichage envoi mailenveloppe
While ThisWorkbook.attente_envoi 'boucle d'attente pour envoi mail
DoEvents
Wend
'Supprime les eventuels filtres
ThisWorkbook.Worksheets("Mail").Select
With Worksheets("Mail")
If .AutoFilterMode Then
.Cells.AutoFilter
End If
End With
'Permet de revenir à la page PlanningJournalier ? la fin de la macro
Sheets("PlanningJournalier").Select
'Rend invisible la feuille Mail
ThisWorkbook.Worksheets("Mail").Visible = False
'Réactive les alertes
Application.DisplayAlerts = True
'Désactive l'affichage
Application.ScreenUpdating = True
Application.EnableEvents = True
End If
End SubSUPER merci thev, ça marche!!!
Par contre je n'ai pas bien compris le premier code qui est a mettre dans le classeur peux tu m'expliquer stp
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Par contre je n'ai pas bien compris le premier code qui est a mettre dans le classeur peux tu m'expliquer stp
Les 2 événements relatifs à la classe mailenveloppe sont présents dans VBA mais ne sont pas directement disponibles dans le classeur.
La première étape est donc de les définir dans un module objet (ThisWorkBook ou un objet feuille) via cette instruction :
Dim WithEvents evts_envelope As MsoEnvelopeSon effet est de définir une variable événementielle = evts_enveloppe qui donne accès aux différentes procédures associées aux événements de MsoEnvloppe.
La deuxième étape est d'initialiser cette variable événementielle pour l'associer à la feuille concernée. C'est l'objet de cette instruction :
Set evts_envelope = sh.MailEnvelopequi est appelée dans votre procédure par :
Call ThisWorkbook.activer_evts(ActiveSheet)