Alerte Mail sous conditions

Bonjour,

J'essaye d'écrire une macro qui génère un mail si une condition de durée et une condition sur les cellules de la colonne S sont vérifiées. Le mail doit être généré par Outlook. Comme mon fichier se remplit au fur et à mesure j'ai mis une boucle for pour que ma macro aille de la première ligne remplit à la première ligne vide, mais j'ai un message d'erreur : Next without For. Auriez-vous des pistes ? Merci d'avance

Sub AlerteMail()

'Alerte demande de ligne

Dim duree As Integer
Dim Ligdeb, Ligfin As Integer
Dim sDates As String 'dates à tester

'initialisation constantes
Ligdeb = 2
sDates = Range("A")
Ligfin = Val(Range(sDates & CStr(Ligdedb)).End(xlDown).Row) 'première cellule non vide

For i = Ligdeb To Ligfin
Range(sDates & CStr(i)).Select
duree = Now - ActiveCell.Value

If duree > 0 & Range("S" & i) <> "" Then

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
ListeDestinataire = ""
ListeCopie = ""
On Error Resume Next
        With OutMail
            .To = ListeDestinataire
            .CC = ListeCopie
            .Subject = "REQUEST FOR MISSING DOCUMENTS"
            .Body = ""
            .Display
        End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing

Next i

End If

End Sub

Bonjour,

inverse endif avec next i

Un bon truc: dès que tu mets if, places un endif juste en dessous et puis tu insères les lignes de code

P.

pour indenter et voir plus clair, ça permet de mieux voir les boucles

Bonjour,

Merci de votre rapidité, en effet ça marche. Je retiens la leçon ! Apparemment, j'ai un autre problème dans mon code j'essaye de l'exécuter mais : "Application or object defined error". Je passe mon code en revu mais je ne trouve pas mon/mes erreurs, si vous avez aussi une idée. Je continue mes recherches, merci encore.

Bonjour,

Là.... je ne sais pas, je n'utilise pas outlook avec excel, d'autres sauront t'aider je pense

P.

Bjr,

pour outlook, voici une trame de macro

Sub envoi()
Dim messagerie As Object
Dim email As Object

        Set messagerie = CreateObject("Outlook.Application")
        Set email = messagerie.CreateItem(0)

        With email
            .to = "destinataire"
            .Subject = "mettre ici le titre du mail"
            .body = "texte"
            .ReadReceiptRequested = True
            .display ' à remplacer par .send si ok
        End With

        Set email = Nothing
        Set messagerie = Nothing

End Sub

Bonjour, merci pour la trame ! Mais ma trame marche aussi je crois que j'ai un problème plutôt au niveau de l'écriture de ma condition...merci quand même !

OK, j'ai été influencé par la remarque de Patrick

Poste un bout de fichier dans ce cas

12testmail.xlsm (16.30 Ko)

Voilà un fichier test, ce que je cherche à faire c'est générer un mail via Outlook si une date est dépassée et que la cellule correspondante en colonne I est vide et cela pour toutes les lignes non vide de mon tableau, sachant que mon tableau se remplit au fur et à mesure..

Si vous avez une idée. Merci. Bonne journée

Bonjour,

je vois juste une ou 2 erreurs déjà :

Dim Ligdeb, Ligfin As Long ' pas integer

Dim sDates ' pas string c'est une colonne

sDates = Range("A:A") ' et pas range ("A")

Ligfin = Range("A65000").End(xlUp).Row 'première cellule vide on part du bas et on remonte pour trouver la dernière occupée

For i = Ligdeb To Ligfin

Pas testé , pas le temps mais ceci est déjà une petite correction

P.

Merci, je me penches dessus.

J'ai essayé de revoir ma macro, j'ai tenté quelque chose mais j'ai toujours un problème d'objet/application non défini pourtant j'ai l'impression de pas être loin du code qui run correctement...si vous avez des idées je suis preneur...

Merci. VOilà ce que j'ai tenté :

Sub test()

'défintion plage de cellules
Dim duree As Integer
Dim lCol As Long, lRow As Long, lastRow As Long, I As Long
Dim xlCount As Double
    '9 = I
    lCol = 9: lRow = 2
    lastRow = Cells(lRow, lCol).End(xlDown).Row

'test de la condition
For I = lRow To lastRow
duree = Now - Cells(I, A)
xlCount = WorksheetFunction.CountA(Cells(I, 19))
    If duree > 0 & xlCount = 0 Then
    Dim OutApp As Object
    Dim OutMail As Object
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    ListeDestinataire = ""
    ListeCopie = ""
    On Error Resume Next
        With OutMail
            .To = ListeDestinataire
            .CC = ListeCopie
            .Subject = "REQUEST FOR MISSING DOCUMENTS"
            .Body = ""
            .Display
        End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing

    End If
Next

End Sub

J'ai travaillé sur ton fichier, pas sur ton dernier post !

je propose de mettre plutôt

Dim sDates As String 'dates à tester

et

sDates = "A"

sinon cela va boguer ici :

Range(sDates & CStr(i)).Select

ce qui donne :

Sub AlerteMail()

'Alerte demande de ligne

Dim duree As Integer
Dim Ligdeb, Ligfin As Integer
Dim sDates As String 'dates à tester

'initialisation constantes
Ligdeb = 2
sDates = "A"
Ligfin = Range("A65000").End(xlUp).Row

For i = Ligdeb To Ligfin
Range(sDates & CStr(i)).Select
duree = Now - ActiveCell.Value

If duree > 0 & Range("S" & i) <> "" Then

' ici l'envoi du mail

End If

Next i

End Sub

Bonjour, merci ça tourne super bien, les mails sont générés ! Par contre ça ne prend pas du tout en compte mes conditions, pâr exemple sur le fichier que je joins je teste la macro sur 5 lignes et à chaque 5 mails sont générés...je n'ose pas imaginer sur un fichier à 100, 200 lignes voir plus...

Merci encore

13testmail.xlsm (16.66 Ko)

Je pense que c'est au niveau de la condition sur les cellules vides...

Rechercher des sujets similaires à "alerte mail conditions"