none
Recevoir un mail d'alerte sur outlook depuis une feuille de classeur excel RRS feed

  • Question

  • Bonjour. Je n'y connais rien en macro et VBA mais je voudrais de l'aide pour mon tableau excel. Help me please :-) Je voudrais recevoir un mail dès que la feuille de mon classeur est modifiée par quelqu'un (cette feuille correspond à des créneaux de rdv sur lesquels on peut se positionner et qui doivent être validés) pour éviter d'avoir à vérifier chaque jour si quelqu'un l'a rempli. Est-ce possible ? Et comment ?

    Merci par avance de votre aide et bonne journée

    lundi 25 janvier 2021 13:57

Réponses

  • J'ai modifié la code. La macro ne se déclenche que lorsque les 4 cellules sont remplies. Du coup, l'ordre de saisie n'a plus aucune importance :

    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim olApp As Object, M As Object, Txt As String
      If Not Intersect(Target, [A3:C35,E3:E35]) Is Nothing Then
        If Application.CountA(Union(Cells(Target.Row, 1).Resize(, 3), Cells(Target.Row, 5))) = 4 Then
          Set olApp = CreateObject("Outlook.application")
          Set M = olApp.CreateItem(olMailItem)
          With M
            .Subject = "Sujet"
            .Body = "Bonjour," & Chr(10) & Chr(10) & _
              "Le tableau des permanences vient d'être complété par " & _
              Cells(Target.Row, 3) & " pour un RDV le " & Cells(Target.Row, 1) & " à " & Format(Cells(Target.Row, 2), "hh:mm") & _
              " concernant le thème " & Cells(Target.Row, 5) & ". " & _
              Chr(10) & Chr(10) & "Merci de prendre connaissance du RDV demandé." & _
              Chr(10) & Chr(10) & "Bonne journée." & _
              Chr(10) & Chr(10) & "Merci Par avance de vos conseils et de votre aide précieuse ;-)"
            .Recipients.Add "test@test.com"
            .display
            .Send
          End With
        End If
      End If
    End Sub
    
    

    Daniel

    mercredi 27 janvier 2021 13:55

Toutes les réponses

  • Bonjour ChristelleD,

    J'ai trouvé un tutoriel qui peut vous aider:
    How To Send Email If A Certain Cell Is Modified In Excel?


    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 26 janvier 2021 07:16
    Modérateur
  • Bonjour,

    C'est possible. Il faudrait que tu donnes les plages de cellules dont les modifications provoquent l'envoi du mail. Communique aussi le texte du message envoyé.

    Cordialement.

    Daniel

    mardi 26 janvier 2021 12:48
  • Bonjour Nina.

    Merci pour ce lien, c'est super, j'ai réussi à insérer le code et créer un mail mais je voudrais que ce mail parte en automatique sans avoir à être validé par l'utilisateur.

    Cf mon message ci-dessous.

    Merci :-)

    mardi 26 janvier 2021 14:22
  • Bonjour Daniel et merci pour ce retour.

    Alors la plage de cellules concernée est A3:A35.

    Et comme indiqué plus haut, je voudrais qu'un email soit généré ET envoyé (sans validation par l'auteur de la modification) dès que cette plage est modifiée.

    Avec le lien envoyé par NINA plus haut, j'ai réussi à générer le mail automatique pas l'envoi et je n'ai pas réussi à modifier correctement le texte du mail, j'avais un message d'erreur.

    Voici le texte que j'aimerai intégrer au message d'envoi :

    "Bonjour,

    Le tableau des permanences vient d'être complété.

    Merci de prendre connaissance du RDV demandé.

    Bonne journée."

    Merci beaucoup pour votre aide précieuse...

    mardi 26 janvier 2021 14:27
  • Voici la macro :

    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim olApp As Object, M As Object, Txt As String
      If Not Intersect(Target, [A3:A35]) Is Nothing Then
        Set olApp = CreateObject("Outlook.application")
        Set M = olApp.CreateItem(olMailItem)
        With M
          .Subject = "Sujet"
          .Body = "Bonjour," & Chr(10) & Chr(10) & _
            "Le tableau des permanences vient d'être complété." & _
            Chr(10) & Chr(10) & "Merci de prendre connaissance du RDV demandé." & _
            Chr(10) & Chr(10) & "Bonne journée." & _
            Chr(10) & Chr(10) & "Merci beaucoup pour votre aide précieuse..."
          .Recipients.Add "test@test.com"
          .Send
        End With
      End If
    End Sub
    

    Pour l'installer, fais un clic droit sur l'onglet de la feuille RDV, clique sur "Visualiser le code". Colle le code dans la fenêtre qui vient de s'ouvrir. Ferme cette fenêtre, enregistre le classeur au format .XLSM.

    Quand tu changeras une cellule de la plage voulue, le mail partira automatiquement.

    Note: le titre du message est "Sujet" Modifie la ligne :

    .Subject = "Sujet"

    Daniel

    mardi 26 janvier 2021 15:50
  • Ah c'est merveilleux !!! Je viens d'installer la macro et ça fonctionne, c'est impeccable ! Merci beaucoup

    Mais comme je suis fan de votre magie, ai-je le droit d'abuser un peu ?

    Dans mon tableau excel, la plage renseignée pour l'alerte correspond à des dates. J'aimerai si c'est possible (et par gourmandise) que dans mon mail d'alerte outlook soient précisés les éléments des colonnes B (créneau horaire), C (personne demandant le RDV) et E (thème du RDV), correspondants à la date remplie dans les cellules de la colonne A (dates). Je vous joins une copie d'écran de mon tableau.

    Du coup, le corps du mail serait composé ainsi :

    "Bonjour,

    Le tableau des permanences vient d'être complété par (colonne C) pour un RDV le (colonne A) à (colonne B) concernant le thème (colonne E) .

    Merci de prendre connaissance du RDV demandé.

    Bonne journée."

    Merci Par avance de vos conseils et de votre aide précieuse ;-)

    mercredi 27 janvier 2021 07:58
  • Je ne parviens pas à vous transmettre la copie d'écran de mon tableau, le site me répond que mon compte n'est pas validé, c'est bizarre. Je vous l'adresser autrement ?

    mercredi 27 janvier 2021 08:04
  • Bonjour,

    Tu peux alors me l'envoyer par mail (clique sur mon profil pour trover mon adresse mail). Sinon, remplace le code comme suit

    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim olApp As Object, M As Object, Txt As String
      If Not Intersect(Target, [A3:A35]) Is Nothing Then
        Set olApp = CreateObject("Outlook.application")
        Set M = olApp.CreateItem(olMailItem)
        With M
          .Subject = "Sujet"
          .Body = "Bonjour," & Chr(10) & Chr(10) & _
            "Le tableau des permanences vient d'être complété par " & _
            Target.Offset(, 2) & " pour un RDV le " & Target & " à " & Format(Target.Offset(, 1), "hh:mm") & _
            " concernant le thème " & Target.Offset(, 4) & ". " & _
            Chr(10) & Chr(10) & "Merci de prendre connaissance du RDV demandé." & _
            Chr(10) & Chr(10) & "Bonne journée." & _
            Chr(10) & Chr(10) & "Merci Par avance de vos conseils et de votre aide précieuse ;-)"
          .Recipients.Add "test@test.com"
          .display
          .Send
        End With
      End If
    End Sub
    

    Daniel

    mercredi 27 janvier 2021 10:06
  • Je viens de faire le nécessaire et ça fonctionne.

    Petit bémol : le mail partant automatiquement au remplissage de ma colonne A, le mail ne peut pas contenir les éléments des autres colonnes puisque ces dernières sont remplies après la colonne A (donc remplies une fois que le mail est déjà parti).

    J'ai fait le test en remplissant la colonne A en dernier et là c'est parfait mais ça implique de remplir le tableau "à l'envers", ce qui n'est pas logique au remplissage.

    Je pense donc qu'il faut remplacer ma plage de cellules générant l'alerte par E3:E35. E étant la dernière colonne à remplir obligatoirement... Mais y a t il d'autres éléments à modifier dans ce cas ?

    Ou y a t il une autre méthode ?

    Je suis désolée de vous embêter mais vos réponses me sont précieuses. Merci

    mercredi 27 janvier 2021 12:23
  • J'ai modifié la code. La macro ne se déclenche que lorsque les 4 cellules sont remplies. Du coup, l'ordre de saisie n'a plus aucune importance :

    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim olApp As Object, M As Object, Txt As String
      If Not Intersect(Target, [A3:C35,E3:E35]) Is Nothing Then
        If Application.CountA(Union(Cells(Target.Row, 1).Resize(, 3), Cells(Target.Row, 5))) = 4 Then
          Set olApp = CreateObject("Outlook.application")
          Set M = olApp.CreateItem(olMailItem)
          With M
            .Subject = "Sujet"
            .Body = "Bonjour," & Chr(10) & Chr(10) & _
              "Le tableau des permanences vient d'être complété par " & _
              Cells(Target.Row, 3) & " pour un RDV le " & Cells(Target.Row, 1) & " à " & Format(Cells(Target.Row, 2), "hh:mm") & _
              " concernant le thème " & Cells(Target.Row, 5) & ". " & _
              Chr(10) & Chr(10) & "Merci de prendre connaissance du RDV demandé." & _
              Chr(10) & Chr(10) & "Bonne journée." & _
              Chr(10) & Chr(10) & "Merci Par avance de vos conseils et de votre aide précieuse ;-)"
            .Recipients.Add "test@test.com"
            .display
            .Send
          End With
        End If
      End If
    End Sub
    
    

    Daniel

    mercredi 27 janvier 2021 13:55
  • Alors là, je salue l'artiste ! C'est parfait... Tout fonctionne à merveille.

    MERCIIII

    mercredi 27 janvier 2021 14:41