IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Envoi mail à échéance sous condition avec lecture de plusieurs colonnes (taches) [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2023
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2023
    Messages : 32
    Par défaut Envoi mail à échéance sous condition avec lecture de plusieurs colonnes (taches)
    Bonjour à tous,
    J'ai un tableau avec plusieurs échéances relatives à des taches qui apparaissent sous forme de colonnes, avec pour chaque tache :
    Intitulé de la tache (en en-tête)
    Échéance
    Message envoyé (Oui/Non)
    En ligne les projets
    Et en fin de tableau les mails des chefs de projet
    Les taches sont récurrentes pour chacun des projets, ce qui explique cette organisation en tableau.
    Je souhaite envoyer un mail au différents chef de projet avec l'intitulé du projet et la tache en question à une échéance de 30j.
    J'ai réussi à le faire dans le cas d'une seule tache mais j'ai un nombre de tache conséquent, donc beaucoup de colonne.
    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Sub EnvoiMail()
        Dim olApp As Object, M As Object, c As Range
        Set olApp = CreateObject("Outlook.application")
        With Sheets("Feuil1")
          For Each c In .Range("B3", .Cells(.Rows.Count, 1).End(xlUp))
            If IsDate(c.Value) Then
              If c > 0 And c.Offset(, 1) = "Non" Then
                If c - Date < 30 And c > Date Then
                                  Set M = olApp.CreateItem(olMailItem)
                  M.Subject = "Echéance " & Range("B1") & " " & c.Offset(, -1)
                  M.Bcc = "Mailcopie@fr"
                  M.body = "Bonjour," & vbCrLf & vbCrLf & "La " & Range("B1") & " du " & c.Offset(, -1) & _
                    " arrive à échéance le " & c.Offset(, 0)
                  M.Recipients.Add c.Offset(, 6)
                  M.display
                  c.Offset(, 1) = "Oui"
                End If
              End If
            End If
           Next c
        End With
    End Sub
    Une fois le mail envoyé la cellule message envoyé passe à oui.
    Je suis bloqué pour le traitement des autres colonnes et je ne sais pas faire référence à l'intitulé de la tache.
    Est-ce qu'il vous serait possible de me venir en aide?
    Je vous joins le tableau en question, anonymisé.


    Bonne journée.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Toro74

    Essayez avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Const olMailItem As Long = 0
     
    Sub EnvoiMail()
      Dim olApp As Object, M As Object, c As Range
      Dim dLig As Long, dCol As Long, Col As Long, Lig As Long
      Dim Cel As Range
      ' Créer une instance Outlook
      Set olApp = CreateObject("Outlook.application")
      With Sheets("Feuil1")
        dLig = .Range("A" & Rows.Count).End(xlUp).Row
        dCol = .Cells(2, Columns.Count).End(xlToLeft).Column
        For Lig = 3 To dLig
          For Col = 2 To dCol - 1 Step 2
            ' Définir sur quelle cellule on travaille
            Set Cel = .Cells(Lig, Col)
            '
            If IsDate(Cel) And Cel.Offset(, 1) = "Non" Then
              If Cel - Date < 30 And Cel > Date Then
                Set M = olApp.CreateItem(olMailItem)
                M.Subject = "Echéance " & .Cells(1, Col) & " " & Cel.Offset(, -1)
                M.Bcc = "Mailcopie@fr"
                M.body = "Bonjour," & vbCrLf & vbCrLf & "La " & .Cells(1, Col) & " du " & Cel.Offset(, -1) & _
                         " arrive à échéance le " & Cel
                M.Recipients.Add .Cells(Lig, dCol)
                M.display
                Cel.Offset(, 1) = "Oui"
              End If
            End If
          Next Col
        Next Lig
      End With
    End Sub
    A+
    Dernière modification par Invité ; 04/03/2023 à 03h15.

  3. #3
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2023
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2023
    Messages : 32
    Par défaut
    Bonjour Bruno,
    Je vous remercie d'avoir pris le temps de regarder ma demande, et ce, aussi rapidement .
    J'ai essayé avec le code et celui-ci ne produit pas d'effet. J'ai essayé de voir d'où vient le problème mais il n'y a pas de message d'erreur.
    En faisant des essais et en supprimant le et en le remplaçant par 7, j'ai bien les mails qui sont créés, y compris pour la tache 3, mais la référence au projet n'est pas bonne pour les taches 2 et 3, cela renvoie oui, Cel.Offset(, -1) n'est visiblement plus valide car le projet n'est plus situé dans la cellule attenante.
    Et forcement la référence au destinataire ne marche pas .
    Cordialement.

  4. #4
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2023
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2023
    Messages : 32
    Par défaut
    Bonjour,
    J'ai trouvé la solution en corrigeant le code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    Const olMailItem As Long = 0
     
    Sub EnvoiMail()
      Dim olApp As Object, M As Object, c As Range
      Dim dLig As Long, dCol As Long, Col As Long, Lig As Long
      Dim Cel As Range
      ' Créer une instance Outlook
      Set olApp = CreateObject("Outlook.application")
      With Sheets("Feuil1")
     
        dLig = .Range("A" & Rows.Count).End(xlUp).Row
        dCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For Lig = 3 To dLig
          For Col = 2 To dCol - 2 Step 1
            ' Définir sur quelle cellule on travaille
            Set Cel = .Cells(Lig, Col)
            '
            If IsDate(Cel) And Cel.Offset(, 1) = "Non" Then
              If Cel - Date < 30 And Cel > Date Then
                Set M = olApp.CreateItem(olMailItem)
                M.Subject = "Echéance " & .Cells(1, Col) & " " & .Cells(Lig, 1)
                M.Bcc = "Mailcopie@fr"
                M.body = "Bonjour," & vbCrLf & vbCrLf & "La " & .Cells(1, Col) & " du " & .Cells(Lig, 1) & _
                         " arrive à échéance le " & Cel
                M.Recipients.Add .Cells(Lig, dCol)
                M.display
                Cel.Offset(, 1) = "Oui"
              End If
            End If
          Next Col
        Next Lig
      End With
    End Sub
    C'est parfait merci bien BrunoM45

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Toro74

    Il y'a une erreur dans ce que vous avez indiqué 🤔

    La bonne ligne de code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Col = 2 To dCol - 1 Step 2
    C'est corrigé dans ce que j'avais donné

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Envoi mail à liste de destinataires avec pièce jointe et sans Outlook
    Par philippe.desrues dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/07/2013, 15h35
  2. [AC-2007] ERREUR 0 : Lancer une macro sous condition avec "ExecuterMacro"
    Par Octo LPO dans le forum Macros Access
    Réponses: 2
    Dernier message: 01/02/2013, 15h31
  3. Envoie d’un mail automatique sous condition
    Par pythfred dans le forum Excel
    Réponses: 8
    Dernier message: 19/03/2012, 09h13
  4. Envoi mail via GMail : interférence avec une servlet SSL
    Par inumerix dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 25/11/2011, 17h07
  5. selection et écriture de données sous condition avec boucle
    Par braquin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/08/2011, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo