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

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 Sub

2- 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 Sub

SUPER 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

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 MsoEnvelope

Son 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.MailEnvelope

qui est appelée dans votre procédure par :

Call ThisWorkbook.activer_evts(ActiveSheet)
Rechercher des sujets similaires à "attendre que envoie mail"