Note: The other languages of the website are Google-translated. Back to English

Comment envoyer un e-mail si une certaine cellule est modifiée dans Excel?

Cet article parle d'envoyer un e-mail via Outlook lorsqu'une cellule d'une certaine plage est modifiée dans Excel.

Envoyer un e-mail si la cellule dans une certaine plage est modifiée avec le code VBA


Envoyer un e-mail si la cellule dans une certaine plage est modifiée avec le code VBA

Si vous devez créer automatiquement un nouvel e-mail avec un classeur actif joint lorsqu'une cellule de la plage A2: E11 est modifiée dans une certaine feuille de calcul, le code VBA suivant peut vous aider.

1. Dans la feuille de calcul dont vous avez besoin pour envoyer un e-mail en fonction de sa cellule modifiée dans une certaine plage, cliquez avec le bouton droit sur l'onglet de la feuille, puis cliquez sur le bouton Voir le code dans le menu contextuel. Voir la capture d'écran:

2. Dans le pop-up Microsoft Visual Basic pour applications , veuillez copier et coller ci-dessous le code VBA dans la fenêtre Code.

Code VBA: envoyer un e-mail si la cellule d'une plage spécifiée est modifiée dans Excel

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("A2:E11")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."

        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Notes:

1). Dans le code, A2: E11 est la plage sur laquelle vous enverrez un e-mail.
2). Veuillez modifier le corps de l'e-mail selon vos besoins dans xMailCorps ligne dans le code.
3). Remplace le Adresse courriel avec l'adresse e-mail du destinataire en ligne .To = "Adresse e-mail".
4). Changer l'objet de l'e-mail en ligne .Subject = "Feuille de travail modifiée dans" & ThisWorkbook.FullName.

3. appuie sur le autre + Q touches simultanément pour fermer le Microsoft Visual Basic pour applications fenêtre.

À partir de maintenant, toute cellule de la plage A2: E11 est modifiée, un nouvel e-mail sera créé avec le classeur mis à jour en pièce jointe. Et tous les champs spécifiés tels que l'objet, le destinataire et le corps de l'e-mail seront répertoriés dans l'e-mail. Merci d'envoyer l'e-mail.

Notes: Le code VBA ne fonctionne que si vous utilisez Outlook comme programme de messagerie.


Articles Liés:


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2021 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Fonctionnalités complètes Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (37)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Je suis coincé dans le code VB ci-dessous. J'essaie d'obtenir une notification par e-mail à l'utilisateur où les données ont été modifiées. Le courrier électronique fonctionne, mais lorsque j'apporte un changement, un courrier électronique est lancé immédiatement, mais je veux un courrier électronique lorsque la feuille Excel est enregistrée et fermée après avoir apporté toutes les modifications à tous les utilisateurs qui ont eu un impact. Cela devrait également fonctionner pour l'une des feuilles de l'ensemble du classeur Excel.

S'il vous plaît aider ...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI en tant que booléen, Cancel As Boolean)

'****Déclaration d'objets et de variables******

Dim xRgSel As Range Dim xOutApp As Object Dim xMailItem As Object Dim xMailBody As String Dim mailTo As String

On Error Resume Next

Sheets("TargetSheet").Range("TargetRange").Select

Application.ScreenUpdating=Faux Application.DisplayAlerts=Faux

'Set xRg = Range("A" & Rows.Count).End(xlUp).Row

Définir xRg = Plage("A2:DA1000")
Définir xRgSel = Intersection(Cible, xRg)


ActiveWorkbook.Sauvegarder
'***********Ouverture de l'application Outlook***********

Si non xRgSel n'est rien alors

Set xOutApp = CreateObject("Outlook.Application")
Définir xMailItem = xOutApp.CreateItem(0)

xMailBody = "Cellule(s) " & xRgSel.Address(False, False) & _
" dans la feuille de calcul '" & Me.Name & "' ont été modifiés le " & _
Format$(Maintenant, "mm/jj/aaaa") & " à " & Format$(Maintenant, "hh:mm:ss") & _
" par " & Environ$("nom d'utilisateur") & "."
'***********Trouver la liste des destinataires************

If Cells(xRgSel.Row, "A").Value = "Pankaj" Then

mailTo = "pank12***@gmail.com"

Si fin

Si Cells(xRgSel.Row, "A").Value = "Nitin" Alors

mailTo = "pank****@gmail.com"

Si fin

If Cells(xRgSel.Row, "A").Value = "Chandan" Then

mailTo = "pakxro**@gmail.com"

Si fin
'****************Rédaction d'email*************

Avec xMailItem

.To = mailTo
.Subject = "Feuille de travail modifiée dans" & ThisWorkbook.FullName
.Body = xMailBody
'.Attachments.Add (ThisWorkbook.FullName)
.Afficher

Terminer par

Définir xRgSel = Rien
Définir xOutApp = Rien
Définir xMailItem = Rien

Si fin

Application.DisplayAlerts = Vrai
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Cher Pankaj Shukla,
Postez votre question Excel sur notre forum : https://www.extendoffice.com/forum.html pour obtenir plus d'assistance sur Excel de la part de notre professionnel Excel.
Ce commentaire a été minimisé par le modérateur sur le site
J'ai pu créer la macro, mais j'ai un problème. Je souhaite envoyer automatiquement un email lorsqu'une cellule atteint un certain seuil. La cellule est une formule. Lorsque la somme de calcul passe en dessous dudit seuil, cela ne fait rien ; cependant, si je tape directement dans la cellule, la macro sera traitée comme prévu. La formule gâche-t-elle la macro?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Sissy Jones,
La méthode dans cet article : Comment envoyer automatiquement un e-mail en fonction de la valeur de la cellule dans Excel ?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html peut vous aider à résoudre le problème.
Ce commentaire a été minimisé par le modérateur sur le site
Cher Admin,


J'ai besoin de ton aide,



J'ai un excel pour surveiller les détails du travail quotidien effectué par notre travailleur sur le terrain, il est donc possible de déclencher un courrier à partir d'une feuille excel si ce type n'a pas mis à jour les données dans cette feuille excel à un moment donné.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Je ne peux pas aider avec ça.
Ce commentaire a été minimisé par le modérateur sur le site
Si je veux envoyer la valeur de la cellule au lieu de l'adresse, alors que dois-je changer dans le code ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Vous pouvez essayer le code VBA ci-dessous.

Private Sub Worksheet_Change (Cible ByVal en tant que plage)
Dim xRgSel As Range
Dim xOutApp en tant qu'objet
Estomper xMailItem en tant qu'objet
Estomper xMailBody en tant que chaîne
On Error Resume Next
Application.ScreenUpdating = Faux
Application.DisplayAlerts = Faux
Définir xRg = Plage("A2:E11")
Définir xRgSel = Intersection(Cible, xRg)
ActiveWorkbook.Sauvegarder
Si non xRgSel n'est rien alors
Set xOutApp = CreateObject("Outlook.Application")
Définir xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cellule(s) " & xRgSel.Address(False, False) & _
xRgSel.Valeur & _
" dans la feuille de calcul '" & Me.Name & "' ont été modifiés le " & _
Format$(Maintenant, "mm/jj/aaaa") & " à " & Format$(Maintenant, "hh:mm:ss") & _
" par " & Environ$("nom d'utilisateur") & "."

Avec xMailItem
.To = "Adresse e-mail"
.Subject = "Feuille de travail modifiée dans" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Afficher
Terminer par
Définir xRgSel = Rien
Définir xOutApp = Rien
Définir xMailItem = Rien
Si fin
Application.DisplayAlerts = Vrai
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Que se passe-t-il si nous ne voulons que les commentaires mis à jour dans cette cellule et non la valeur entière de la cellule ? Il ne devrait afficher que les derniers commentaires ajoutés dans la cellule
Ce commentaire a été minimisé par le modérateur sur le site
Avez-vous compris cela?
Ce commentaire a été minimisé par le modérateur sur le site
Excellente information.
Question concernant les informations qui peuvent être ajoutées à l'e-mail.
En utilisant votre exemple ci-dessus ....

Si vous aviez une valeur dans F4, comment incluriez-vous la valeur F4 dans l'e-mail généré lors de la modification de D4 ? ?
Ce commentaire a été minimisé par le modérateur sur le site
si je dois envoyer cette ligne entière alors?
Ce commentaire a été minimisé par le modérateur sur le site
J'ai essayé le code VBA ci-dessus : envoyer un e-mail si la cellule d'une plage spécifiée est modifiée dans Excel. Ce VBA fonctionne pour moi sauf l'envoi d'e-mails. Lorsque les données sont modifiées dans la plage donnée, un e-mail est automatiquement généré avec les détails de la cellule modifiée. Cependant, l'e-mail n'est pas automatiquement envoyé au destinataire et l'utilisateur doit cliquer sur le bouton d'envoi dans l'e-mail. Ce que je cherche ici, c'est que l'e-mail doit être envoyé automatiquement aux destinataires lorsqu'il est généré. S'il vous plaît aidez-moi à fournir un code pour cela. Merci beaucoup
Ce commentaire a été minimisé par le modérateur sur le site
Salut Jimmy Joseph,
Veuillez remplacer la ligne ".Display" par ".Send". J'espère que je peux aider. Merci d'avoir commenté.
Ce commentaire a été minimisé par le modérateur sur le site
salut; existe-t-il un moyen de modifier le texte affiché à l'aide des informations d'autres cellules (de la première ligne et de la première colonne) ? par exemple, si je change la cellule K15, je souhaite inclure dans le message des informations sur les cellules A15 et K1 ? que dois-je changer dans le code ? merci beaucoup
Ce commentaire a été minimisé par le modérateur sur le site
salut Laona. savez-vous comment faire cela?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour. Comment modifier le code pour qu'un e-mail soit envoyé à une autre adresse e-mail si une autre plage de cellules est modifiée ?
Ce commentaire a été minimisé par le modérateur sur le site
Une aide sur cette demande ? J'ai le même problème. Je souhaite ajouter plusieurs adresses e-mail par ligne, mais lorsque je modifie une ligne, toute la feuille de calcul change. Comment puis-je limiter les modifications à une seule ligne ?
Ce commentaire a été minimisé par le modérateur sur le site
Modifier la ligne :
1). Dans le code, A2:E11 est la plage sur laquelle vous enverrez des e-mails.
et
3). Remplacez l'adresse e-mail par l'adresse e-mail du destinataire dans la ligne .To = "Adresse e-mail".

Fonctionne bien.
Ce commentaire a été minimisé par le modérateur sur le site
Pouvez-vous s'il vous plaît expliquer cela davantage. Comment répétez-vous le code à envoyer à un e-mail différent en fonction d'une autre plage en cours de modification. J'ai essayé de copier et coller le code ci-dessous et de le modifier selon votre commentaire, mais seule la première plage semble exécuter la commande et écrire l'e-mail.
Ce commentaire a été minimisé par le modérateur sur le site
Est-ce que quelqu'un a une réponse à ça?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'essayais d'envoyer des e-mails sur ma feuille en utilisant une valeur modifiée sur la feuille. Si dans la colonne H, le statut sera changé en ="4", l'ID de commande à gauche doit être envoyé à un utilisateur. La feuille fonctionne de manière dynamique, j'ai donc une plage de D9: D140 où les identifiants de commande sont stockés et les changements de statut sont effectués dans la même plage sur H9: H140. Comment puis-je atteindre l'objectif de le faire et envoyer l'ID de commande à mon client lorsque le statut a été changé en ="4" ?
Ce commentaire a été minimisé par le modérateur sur le site
Serait-il possible d'afficher une cellule de référence différente dans xMailBody dans la même colonne au lieu de l'adresse de cellule modifiée ??
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Sam,Voulez-vous sélectionner une cellule de référence au hasard dans la même colonne de l'adresse de cellule modifiée ? Ou tapez manuellement une cellule de référence dans la ligne xMailBody du code ? Il est facile de taper manuellement une cellule de référence dans le code, entourez simplement la cellule de référence de guillemets comme indiqué ci-dessous : xMailBody = "Cellule(s) " & «D3» & ", " & «D8» & _

Ce commentaire a été minimisé par le modérateur sur le site
Est-il possible de changer cela pour qu'il n'affiche l'e-mail que si une cellule d'une plage a été modifiée pour dire "Oui". J'aimerais qu'il ne fasse rien s'il s'agit d'une autre valeur.
Ce commentaire a été minimisé par le modérateur sur le site
Merci pour le code, ce code fonctionne lorsque je saisis la valeur et que j'appuie sur Entrée. Mais dans mon cas, la cellule se remplit automatiquement avec la formule, et lorsque la valeur est atteinte, elle n'ouvre pas l'e-mail, donc le code ne fonctionne pas dans ce cas. Merci d'avance!
Ce commentaire a été minimisé par le modérateur sur le site
Salut hakana,
Le code VBA suivant peut vous aider à résoudre le problème. Veuillez essayer. Merci pour votre avis.

Sous-feuille de calcul privée_Change (ByVal Target As Range)
'Mis à jour par Extendoffice 2022/04/15
Dim xRgSel As Range
Dim xOutApp en tant qu'objet
Estomper xMailItem en tant qu'objet
Estomper xMailBody en tant que chaîne
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = Faux
Application.DisplayAlerts = Faux
xBooléen = Faux
Définir xRg = Plage("E2:E13")

Définir xItsRG = Intersection(Cible, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
Si non (xItsRG n'est rien), alors
Définir xRgSel = xItsRG
xBooléen = Vrai
ElseIf Not (xDDs Is Nothing) Alors
Définir xRgSel = xDDs
xBooléen = Vrai
ElseIf Not (xDs n'est rien) Alors
Définir xRgSel = xDs
xBooléen = Vrai
Si fin


ActiveWorkbook.Sauvegarder
Si xBooléen Alors
Debug.Print xRgSel.Address


Set xOutApp = CreateObject("Outlook.Application")
Définir xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cellule(s) " & xRgSel.Address(False, False) & _
" dans la feuille de calcul '" & Me.Name & "' ont été modifiés le " & _
Format$(Maintenant, "mm/jj/aaaa") & " à " & Format$(Maintenant, "hh:mm:ss") & _
" par " & Environ$("nom d'utilisateur") & "."

Avec xMailItem
.To = "Adresse e-mail"
.Subject = "Feuille de travail modifiée dans" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Afficher
Terminer par
Définir xRgSel = Rien
Définir xOutApp = Rien
Définir xMailItem = Rien
Si fin
Application.DisplayAlerts = Vrai
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'ai créé un code similaire mais je voudrais *** une condition dans laquelle si une valeur de cellule est supprimée, elle n'enverra pas d'e-mail lorsqu'elle sera enregistrée/fermée. Il n'enverra un e-mail que lorsqu'une valeur de cellule aura été saisie. Sais-tu comment faire cela? C'est mon code:

CODE POUR L'E-MAIL AUTOMATIQUE À QUELQU'UN LORSQUE LE CLASSEUR EXCEL EST MIS À JOUR

FICHE CODE :

Option Explicit 'Événement de changement de feuille de calcul Excel
Private Sub Worksheet_Change (Cible ByVal en tant que plage)
Si ce n'est pas l'intersection (cible, plage ("C3: D62")) n'est rien alors
'Target.EntireRow.Interior.ColorIndex = 15
Plage("XFD1048576").Valeur = 15
Si fin
Si non intersection(cible, plage("I3:J21")) n'est rien alors
'Target.EntireRow.Interior.ColorIndex = 15
Plage("XFD1048576").Valeur = 15
Si fin
End Sub


CODE DU CAHIER D'EXERCICES :

Classeur de sous-classement privé_AvantFermer (Annuler en tant que booléen)
Si Me.Saved = False Alors Me.Save

Dim xOutApp en tant qu'objet
Estomper xMailItem en tant qu'objet
Dim xName As String

Si Plage("XFD1048576").Valeur = 15 Alors
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Définir xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
Avec xMailItem
.À = "courriel"
.CC = ""
.Sujet = "message"
.Corps = "message !"
.Pièces jointes.*** xName
.Afficher
'.envoyer
Terminer par
Si fin
Définir xMailItem = Rien
Définir xOutApp = Rien



End Sub

Sous-carnet de travail privé_Open ()
Plage("XFD1048576").Effacer
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Salut à tous,

der Code würde gut für mein Vorhaben passen, aber gibt es die Möglichkeit, dass er eine E-Mail beim speichern schreibt mit allen Zellen die geändert wurden? So wie es jetzt ist ,würde er jede geänderte Zelle einzeln senden. Dies ist dann problematisch wenn zB 10 Zellen angepasst werden was 10 E-Mails bedeuten würde. Und gibt es die Möglichkeit, die gesamte geänderte Zelle bei mir von A bis Y in einer E-Mail zu senden? Bisher haut der ja die Zellnummer in die E-Mail, wenn aber jemand anders Filtert wird er die Änderung nicht mehr finden.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Esser123,
Les codes VBA suivants peuvent vous aider. Après avoir modifié les cellules dans la plage spécifiée et enregistré le classeur, un e-mail apparaîtra pour répertorier toutes les cellules modifiées dans le corps de l'e-mail, et le classeur sera également inséré en tant que pièce jointe dans l'e-mail. Veuillez suivre les étapes suivantes :
1. Ouvrez la feuille de calcul contenant les cellules sur lesquelles vous souhaitez envoyer des e-mails, cliquez avec le bouton droit sur l'onglet de la feuille et cliquez sur Voir le code dans le menu contextuel. Ensuite, copiez le code suivant dans la fenêtre feuille (code).
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220921
Dim xAddress As String
Dim xDRg, xRgSel, xRg As Range

xAddress = "A1:A8"
Set xDRg = Range(xAddress)
Set xRgSel = Intersect(Target, xDRg)
On Error GoTo Err1
If Not xRgSel Is Nothing Then
If ThisWorkbook.gChangeRange = "" Then
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Else
Set xRg = Range(ThisWorkbook.gChangeRange)
Set xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Err1:
      ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub

2. Dans l'éditeur Visual Basic, double-cliquez sur Ce classeur dans le volet de gauche, puis copiez le code VBA suivant dans le Ce classeur (code) fenêtre.
Option Explicit
Public gChangeRange As String
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
'On Error Resume Next
On Error GoTo Err1
Set xRg = Range(gChangeRange)
If Not xRg Is Nothing Then
   Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Email Body: " & vbCrLf & "The following cells were modified:" & xRg.Address(False, False)
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
End If
Err1:
gChangeRange = ""
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
J'ai besoin d'aide pour déclencher un e-mail avec un léger changement. Au lieu d'une valeur numérique ou d'entrer manuellement les informations dans la cellule, les cellules de la colonne B passeront à "Y" déclenchées à partir d'une formule dans d'autres cellules de cette ligne. La formule pour la colonne B est =IF([@[Quantité en stock]]>[@[Niveau de réapprovisionnement]],"Y"), indiquant que l'inventaire est faible en stock et nécessite une nouvelle commande. Je dois déclencher un e-mail automatisé lorsqu'une valeur de cellule change dans la colonne B en 'Y', donc je suis automatiquement averti par e-mail du faible stock. J'ai essayé tout ce que je peux penser pour modifier les codes déjà fournis, mais rien ne semble fonctionner pour moi... s'il vous plaît, aidez-moi !
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Catherine F,
Le code VBA suivant peut vous aider à résoudre le problème. Veuillez essayer. Merci pour votre commentaire.
Dim xRg As Range
'Update by Extendoffice 20221019
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("B:B"), Target)
If xRg Is Nothing Then Exit Sub
If Target.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi there" & vbNewLine & vbNewLine & _
"This is line 1" & vbNewLine & _
"This is line 2"
On Error Resume Next
With xOutMail
.To = "Email Address"
.CC = ""
.BCC = ""
.Subject = "send by cell value test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub

Private Sub Worksheet_Calculate()
Dim xTarget As String
Dim xRg As Range
'Set xRg = Application.Range("B:B")
Set xRg = Intersect(Range("B:B"), Selection.EntireRow)
On Error GoTo Err01
If xRg.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour et merci pour ce tuto.
J'ai cependant une difficulté pour l'application de la plage de recherche.
Dans le code, j'ai demandé à vérifier la plage C2:C4.
Tout fonctionne bien si je modifie uniquement C2, C3 ou C4. Cela fonctionne aussi si je modifie C2+C3+C4 ou C2+C3 ou C3+C4 mais cela ne fonctionne pas si j'ai un saut dans la plage. Par exemple, si je modifie C2 et C4 sans modifier C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Merci d'avance.

Private Sub Worksheet_Change (Cible ByVal en tant que plage)
'Mis à jour par Extendoffice 20220921
Dim xAddress As String
Dim xDRg, xRgSel, xRg As Range

xAdresse = "C2:C4"
Définir xDRg = Plage(xAdresse)
Définir xRgSel = Intersection(Cible, xDRg)
En cas d'erreur GoTo Err1
Si non xRgSel n'est rien alors
Si ThisWorkbook.gChangeRange = "" alors
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
autre
Définir xRg = plage (ThisWorkbook.gChangeRange)
Définir xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
Si fin
Si fin
Exit Sub
Err1 :
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Option explicite
Public gChangeRange en tant que chaîne
Private Sub Workbook_AfterSave (ByVal Success As Boolean)
'Mis à jour par Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp en tant qu'objet
Estomper xMailItem en tant qu'objet
Estomper xMailBody en tant que chaîne
'En cas d'erreur, reprendre le suivant
En cas d'erreur GoTo Err1
Set xRg = Range(gChangeRange)
Si non xRg n'est rien alors
Set xOutApp = CreateObject("Outlook.Application")
Définir xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cher Jean-Marie, " & vbCrLf & vbCrLf & "Dans le fichier : " & ThisWorkbook.FullName & vbCrLf & "La plage de cellules a été modifiée :" & xRg.Address(False, False) & vbCrLf & vbCrLf & "Cordialement"
Avec xMailItem
.À = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées " & ThisWorkbook.Name
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Afficher
Terminer par
Définir xRgSel = Rien
Définir xOutApp = Rien
Définir xMailItem = Rien
Si fin
Err1 :
gChangePlage = ""
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Je voudrais envoyer l'e-mail à 5 ​​personnes. Quel délinéateur est utilisé entre chaque adresse e-mail ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Joe,
Veuillez utiliser un point-virgule pour séparer les adresses e-mail.
Ce commentaire a été minimisé par le modérateur sur le site
Voici une autre question. Si une cellule change, elle envoie un e-mail. si 3 cellules changent, il envoie 3 e-mails. Comment arrêter cela pour qu'il n'envoie qu'un seul e-mail lorsque les modifications sont terminées ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Joe,
Supposons que vous ayez spécifié la plage comme "A2: E11" dans le code. Comment puis-je vérifier que toutes les modifications sont terminées ?
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés

Nous suivre

Copyright © 2009 - www.extendoffice.com. | Tous les droits sont réservés. Alimenté par ExtendOffice. | | Plan du site
Microsoft et le logo Office sont des marques commerciales ou des marques déposées de Microsoft Corporation aux États-Unis et / ou dans d'autres pays.
Protégé par Sectigo SSL