XL 2019 Envoyer mails, n’envoie pas toutes les lignes

Sellig

XLDnaute Junior
Bonjour,

Est-ce que quelqu’un pourrait m’aider à résoudre mon problème sur le tableau joint ?

Lorsque je clique sur ‘’envoyer’’ uniquement les 3 premières lignes sont envoyées, alors que j’ai 5 adresses mails. Et pourtant la ligne « To last_row » est bien présente.

Évidement, j’ai besoin des 2 lignes vides au dessus, Lignes 1 et 2.

Merci par avance pour votre aide.

Cordialement
 

Pièces jointes

  • Envoi de mails.xlsm
    29.6 KB · Affichages: 5
Solution
@Sellig

Je te propose ceci :

VB:
Option Explicit

Sub Envoi_mails()
Dim Ws As Worksheet, OutApp As Object, OutMail As Object, DerLig&, i&

Set Ws = Worksheets("Envoi mails")
DerLig = Ws.Range("A" & Rows.Count).End(xlUp).Row

For i = 4 To DerLig
    If Ws.Range("H" & i).Value <> "NON" Then
        On Error Resume Next
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = Ws.Range("A" & i).Value
            .CC = Ws.Range("B" & i).Value
            .BCC = Ws.Range("C" & i).Value
            .Subject = Ws.Range("D" & i).Value
            .Body = Ws.Range("E" & i).Value
            
            If Ws.Range("F" & i).Value <> "" Then...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

C'est le calcul de ton LastRow qui n'est pas bon : ça retourne 6, donc soit il faut ajouter 2 puisque le tableau commence en ligne 3, soit il faut utiliser une autre méthode pour faire le calcul (en supposant qu'un calcul soit nécessaire). ;)
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous


@Sellig

Je te propose

VB:
Option Explicit

Sub Envoi_mails()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Envoi mails")
Dim i As Integer
Dim OA As Object
Dim msg As Object
Set OA = CreateObject("outlook.application")
Dim last_row As Integer

last_row = sh.Range("A" & Rows.Count).End(xlUp).Row

For i = 4 To last_row
    If sh.Range("H" & i).Value <> "NON" Then
        Set msg = OA.CreateItem(0)
        msg.To = sh.Range("A" & i).Value
        msg.CC = sh.Range("B" & i).Value
        msg.BCC = sh.Range("C" & i).Value
        msg.Subject = sh.Range("D" & i).Value
        msg.Body = sh.Range("E" & i).Value
       
        If sh.Range("F" & i).Value <> "" Then
            msg.Attachments.Add sh.Range("F" & i).Value
        End If
        If sh.Range("G" & i).Value <> "" Then
            msg.Attachments.Add sh.Range("G" & i).Value
        End If
       
        msg.Display
        'msg.Send
        sh.Range("I" & i).Value = "Envoyé"
    End If
Next i

'MsgBox "Messages Envoyés"
End Sub

En espérant que tu n'aies pas plus de 32 768 lignes sinon surprise..... :oops:
 

Phil69970

XLDnaute Barbatruc
@Sellig

La logique est de valider le post contenant la réponse que tu as choisi et non pas ton propre post car tu n'as rien trouvé du tout sinon tu ne serais pas venu demander de l'aide o_O ;)

Donc le post# 2 ou le post# 3 ou le post# 4
==> mais pas le post# 5 qui est le tien !!
 

Sellig

XLDnaute Junior
Pour la validation des posts Ok, je pensais que le dernier validait tout.

Ce sera fait.



Du coup, je me permets de revenir vers vous

J’ai un bogage sur msg.send

Ai-je fait une connerie ?
 

Pièces jointes

  • Envoi de mails.xlsm
    57.3 KB · Affichages: 0
  • erreur.PNG
    erreur.PNG
    29.1 KB · Affichages: 11

Sellig

XLDnaute Junior
Bonjour à tous


@Sellig

Je te propose

VB:
Option Explicit

Sub Envoi_mails()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Envoi mails")
Dim i As Integer
Dim OA As Object
Dim msg As Object
Set OA = CreateObject("outlook.application")
Dim last_row As Integer

last_row = sh.Range("A" & Rows.Count).End(xlUp).Row

For i = 4 To last_row
    If sh.Range("H" & i).Value <> "NON" Then
        Set msg = OA.CreateItem(0)
        msg.To = sh.Range("A" & i).Value
        msg.CC = sh.Range("B" & i).Value
        msg.BCC = sh.Range("C" & i).Value
        msg.Subject = sh.Range("D" & i).Value
        msg.Body = sh.Range("E" & i).Value
      
        If sh.Range("F" & i).Value <> "" Then
            msg.Attachments.Add sh.Range("F" & i).Value
        End If
        If sh.Range("G" & i).Value <> "" Then
            msg.Attachments.Add sh.Range("G" & i).Value
        End If
      
        msg.Display
        'msg.Send
        sh.Range("I" & i).Value = "Envoyé"
    End If
Next i

'MsgBox "Messages Envoyés"
End Sub

En espérant que tu n'aies pas plus de 32 768 lignes sinon surprise..... :oops:
Pour la validation des posts Ok, je pensais que le dernier validait tout.

Ce sera fait.



Du coup, je me permets de revenir vers vous

J’ai un bogage sur msg.send

Ai-je fait une connerie ?

Pièces jointes​

 

Pièces jointes

  • Envoi de mails.xlsm
    57.3 KB · Affichages: 2
  • erreur.PNG
    erreur.PNG
    29.1 KB · Affichages: 12

Sellig

XLDnaute Junior
Bonjour TFB

En principe :
Display permet de visualiser le mail un peu comme PrintPreview qui permet la visu de l'impression
Send envoie le mail sans visualisation
Merci pour votre réponse.

Display je ne l’utilise pas, d’ailleurs je viens de le supprimer.

Le problèmes est que ça beug sur msg.send, comme illustré sur la photo jointe à mon premier message.

Je ne me rappelle pas avoir touché à la macro et ce matin tout fonctionnait bien.

Je ne trouve pas l’erreur.
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri