Alertes mail sous Excel / VBA "Je suis une quiche"

01001101 Messages postés 17 Statut Membre -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je me torture le cerveau depuis ce matin à lire dans tout le web comment ajouter un code VBA pour faire ce qui suit :

Je dispose d'un classeur Excel 2007.

La première feuille; "Base A"; possède un tableau avec des données et un résultat (conforme ou arrive à échéance).

La seconde feuille; "mails"; possède les mails pour destinataire.

J'ai besoin d'un code qui soit en mesure de contrôler le résultat des cellules sus-mentionnées.

Dans le cas ou le résultat ce nomme : arrive à échéance, envoyer un mail automatiquement aux destinataires.
Avec un Objet : exemple : Attention un produit arrive à échéance, merci de contrôler le fichier Excel

En corps de message : "ajouter le lien de fichier dans le corps du message".

j'ajoute en PJ le fichier test pour que cela soit plus claire.

lien : https://www.fichier-xls.fr/2015/03/30/classeur-test-alertes/



--
Errare humanum est, perseverare diabolicum

3 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Que connaissez-vous reelement en VBA excel ??

    L'envoi doit-il se faire a l'ouverture du classeur et si le classeur reste ouvert (mise a jour des infos qui permettent de declancher l'alerte) ou seulement classeur ouvert ??

    Envoi via Outlook ou ......????

    A+
    0
    1. 01001101 Messages postés 17 Statut Membre 2
       
      Bonjour,

      L'envoi ce fera seulement à l'ouverture du classeur.
      oui passage via outlook.

      J'ai commencer à ajouter un peu de macro, celle d'envoi de mail fonctionne correctement.

      Mais sur la seconde je fait un contrôle de cellule qui marche parfaitement, mais je voudrais pouvoir contrôler la colonne complète (erreur de syntaxe).

      voici ou j'en suis :

      le module de contrôle qui appel le module envoi_mail (selon le résultat)

      Sub controle()

      If Range("i2").Value = 0 Then
      On Error Resume Next
      Application.EnableEvents = False
      Envoi_mail
      Application.EnableEvents = True
      End If
      End Sub



      le module Envoi_mail :

      Sub Envoi_mail()
      Dim Maille As String
      Dim Sujet As String

      Maille = "papi@resistance.org; toto@titi.fr"
      Sujet = "Blablabla"
      Message = "Un ou plusieurs blablabla arrivent à échéance !t"
      Set OL = CreateObject("Outlook.Application")
      Set MyItem = OL.CreateItem(olMailItem)
      With MyItem
      .To = Maille
      .Subject = Sujet
      .Body = Message
      .Categories = "Banking-Info"
      .OriginatorDeliveryReportRequested = False
      .ReadReceiptRequested = False
      .Send
      End With

      MsgBox "Alerte transmise", vbInformation, "Envoi des alertes"
      End Sub




      tout cela fonctionne très bien (en dehors de la sélection de colonne pour le contrôle).

      Mais actuellement je doit démarrer la macro "controle" manuellement, et mon intérêt étant qu'elle ce lance à l'ouverture du classeur :)

      Merci de ton temps
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > 01001101 Messages postés 17 Statut Membre
         
        Re,

        code a mettre dans le VBA de ThiWorbook:

        se lance a l'ouverture du classeur avec boucle sur la colonne I

        Private Sub Workbook_Open()
            Dim Plage As Range, cel As Range
            
            With Worksheet("baseA")
                derlig = .Range("I" & Rows.Count).End(xlUp).Row
                Set Plage = .Range("I2:I" & derlig)
                For Each cel In Plage
                    If cel.Value <= 0 Then
                        Call Envoi_mail
                    End If
                Next cel
            End With
        End Sub
        


        A+
        0
    2. 01001101 Messages postés 17 Statut Membre 2
       
      Je viens de faire l'essai.

      A l'ouverture du classeur j'ai une erreur :

      Erreur de compilation:
      Sub ou Function non définie

      Private Sub Workbook_Open() <<<< Ceci est surligner en jaune
      Dim Plage As Range, cel As Range

      With Worksheet("baseA") Worksheet Surligner en Bleu
      derlig = .Range("I" & Rows.Count).End(xlUp).Row
      Set Plage = .Range("I2:I" & derlig)
      For Each cel In Plage
      If cel.Value <= 0 Then
      Call Envoi_Mail
      End If
      Next cel
      End With
      End Sub


      Donc il ce lance bien, mais erreur dans le potage :)
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Teste ce code en CDO plus rapide et qui utilise simplement ton SMTP, pour tester, feuille "baseA" cellule P2 saisi l'adresse mail expéditeur, en P3 ton SMTP exemple si ton fournisseur d'accès est orange saisir SMTP.orange.fr ou SMTP.free.fr si free etc ...
    colle ce code dans un module

    Option Explicit
    '--------------- Avec l'Option Explicit est en entête de module déclaration de toutes les variables
    Dim messageHTML, objMessage As Variant
    Dim ol As Object, myItem As Object
    Dim x As Integer

    Sub Envoi_Mail()
    For x = 2 To 100 ' Concerne les lignes de 2 à 100
    If Cells(x, 10).Value = "arrive à échéance" And Cells(x, 11).Value = "" Then
    Call Mail
    End If
    Next x
    End Sub

    Sub Mail()
    On Error GoTo errorHandler
    Set objMessage = CreateObject("CDO.Message")
    objMessage.Subject = "Attention un produit arrive à échéance"
    objMessage.From = [P2] '"xxx.xxxxxx@free.fr" 'Adresse mail de l'expéditeur ou cellule le contenant (facultatif)
    objMessage.To = Sheets("mails").[A2] & ";" & Sheets("mails").[A3] & ";" & Sheets("mails").[A4] & ";" & Sheets("mails").[A5] & ";" & Sheets("mails").[A6] & ";" & Sheets("mails").[A6]
    'ou
    'objMessage.CC = "xxxx.xxxxxxxx@free.fr" 'Adresse mail du destinataire ou cellule le contenant
    'ou
    'objMessage.BCC = "xxxx.xxxxxxxx@free.fr" 'Cci ou Bci devient BCC en Englais (mode adresse destinataire masquée), adresse mail de l'expéditeur ou cellule le contenant
    '--------------- Corps du message fait référence à des cellules ou saisir dans le code
    objMessage.TextBody = "Bonjour," & vbCrLf & vbCrLf & "Attention un produit arrive à échéance, merci de contrôler le fichier Excel " & vbCrLf & vbCrLf & "fichier classeur-test-alertes-2.xlsm"
    'objMessage.TextBody = "Bonjour," & vbCrLf & vbCrLf & "Comment pourais-je oublier ce jour " & vbCrLf & vbCrLf & "Bon anniversaire " & Cells(x, 2) & vbCrLf & vbCrLf & "Les Lagouanère"
    messageHTML = "Ceci est un message en HTML"
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = [P3] 'ou saisir "smtp.free.fr" 'SMTP du fournisseur d'accés (smtp.orange.fr ou smtp.sfr.fr etc ...)
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objMessage.Configuration.Fields.Update
    objMessage.Send
    '--------------- Confirmation de l'envoi (facultatif)
    MsgBox "Un mail a été bien envoyé à "
    Cells(x, 11) = "Envoyé"
    '--------------- si erreur on sort de la procédure
    Exit Sub
    errorHandler:
    '--------------- description de l'erreur survenue
    MsgBox Err.Description
    End Sub

    et associe la macro "Envoi_Mail" à un bouton
    clic sur ce bouton créé
    j'ai ajouté un détecteur d'envoi en colonne K pour que le fichier ne soit envoyé qu'une fois, pour retester, effacer "Envoyé" de la colonne K
    0
    1. 01001101 Messages postés 17 Statut Membre 2
       
      Je test tout cela , je vous tiens au courant.


      je ne connait pas CDO (apparemment c'est un terme pour la suite microsoft),
      Je test le code
      Merci
      0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    récupère ton fichier, feuille "baseA" cellule P2 comme dit précédemment saisir l'adresse mail de l'expéditeur, en P3 le SMTP
    sur ta feuille "mails" cellule A2 à A7 des adresses mails valides
    et clic sur le bouton

    on verra plus tard l'automatisation d'envoi à l'ouverture
    https://www.cjoint.com/c/ECFoTsQK7Ej
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0