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 :

Recevoir une alerte par mail selon une date de péremption [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 15
    Points
    15
    Par défaut Recevoir une alerte par mail selon une date de péremption
    Bonjour à tous,

    J'aurais besoin de votre aide afin de trouver une macro qui puisse envoyer un mail en automatique d'alerte si la date de péremption est dépassée (en rouge).

    Le mieux serais d'avoir le mail une semaine avant cette date (en rouge) mais je ne sais pas si c'est jouable

    ATTENTION ce fichier risque de ne pas être ouvert régulièrement

    voir le jpeg ci joint:


    merci pour vos aides

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,

    Envoyer un mail en fonction d'une date reprise dans ton fichier n'est pas un problème, ce qui me gêne dans ta question est le fait que le fichier ne sera pas ouvert de manière régulière...

    Il faut peut-être attaquer le problème à partir d'une application ouverte tous les jours, par exemple Outlook ou utiliser les tâches plannifiées.
    Est-ce que les mails doivent partir de plusieurs PC ?

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse,

    Donc si j'ai bien compris, il faut que le fichier soit ouvert régulièrement pour activer les macros ?

    En effet le mieux serait que les mails puissent partir depuis plusieurs PC (suivant la personne qui ouvre le fichier)

    Dans ce cas je me demande s'il est possible d'envoyer un message automatique 30 jours avant la péremption, puis un second dès que la date de péremption est expirée ?

    En gros si le fichier n'est pas ouvert tous les jours, l'ouvrir 1 fois/mois suffirait

    je peux partir à partir de ce code ?? Et si oui comment je peux faire pour l'améliorer selon mes contraintes ?

    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
    <?php
    include"connexion.php";
    //* Envoi mail automatiquement //
    $date=date('y,m,d',time());  //date du serveur//
      //titre du mail
      $titre = 'remplacer s\'ecouler';
    $sql="select * from archivecde "; //requette
    $req=mysql_query($sql) or die("erreur sql". mysql_error());
     $compteur=1; // variable pour compter les mails
     while($l=mysql_fetch_array($req)){
     $email=$l['email_archcde']; //prend email de la table
     $nom=$l['nomclt_archcde']; //Prend nom de la table
     $date_expiration=$l['dureecde_archcde']; // prend date expiration de la table
     //contenu du l'email
       $contenu = 'Bonjour! <br />Mr : '.$nom.'<br />';
      $contenu .= 'Votre produit vient s ecoulé Voulez vous vraiment le remplacer ?:';
      $contenu .= 'Au revoir <br /><br />'; 
      // envoi du mail HTML
      $from = "From: hello <soprano@hotmail.fr>\nMime-Version:";
      $from .= " 1.0\nContent-Type: text/html; charset=ISO-8859-1\n";
     
      if($date >= $date_expiration){   // tester si la date du serveur = a date expiration
      // envoie du mail
      if(mail($email,$titre,$contenu,$from)){ 
      echo'N° '.$compteur.' - '.$email.' : envoyé avec succés!<br />';
            $compteur++; // ajoute 1 à la variale du compteur
    		}  // fin
     
    		else
    	{
    	echo'Echec d\'envoi Email :'.$email.'';
    	}
    	}
    	}
    	?>
    Merci pour votre aide

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,

    En effet, pour qu'une macro Excel fonctionne il faut ourvir le fichier, c'est là que les Tâches plannifées peuvent intervenir...

    En ce qui concerne le code, la syntaxe n'a pas grand chose à voir avec le VBA même si l'idée y est.

    Pour que la macro s'exécute à l'ouverture du fichier il faut mettre le code dans le module du classeur, voici une idée, j'ai pas testé (pas envie de recréer ton fichier ) donc dis moi si OK:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Private Sub Workbook_Open()
     
    ' !!! Pour l'envoi par CDO, il faut référencer "Microsoft CDO for Windows 2000 Library"
     
    Dim Ws As Worksheet 'Variable pour affecter le nom de ta feuille
    Dim DerLig As Long 'Variable pour déterminer la dernière ligne remplie de la colonne K
    Dim r As Long 'Variable pour la boucle
    Dim Mbody As String 'Variable pour récupérer le texte à mettre dans le corps du message
    Dim Cdo_Message As Object 'Variable pour la procédure d'envoi de mail
     
    Set Ws = Sheets("TaFeuille") 'Remplace ici le nom de ta feuille
    DerLig = Ws.Cells(Columns(11).Cells.Count, 11).End(xlUp).Row 'récupère le N° de la dernière ligne remplie de la colonne K
     
    For r = 9 To DerLig 'Boucle sur toutes les lignes comprisent entre la 9 et la dernière remplie
        If Ws.Cells(r, 11) <= Date Then 'Vérifie si le contenu de la cellule est <= que la date du jour
            Mbody = Mbody & " / " & Ws.Cells(r, 3) 'Adapte le texte avec l'intitulé du produit périmé, adapter éventuellement la mise en forme avec des retours chariots
        End If
    Next r
     
     
    Set Cdo_Message = CreateObject("CDO.Message")
    Set Cdo_Message.Configuration = GetSMTPServerConfig()
        With Cdo_Message
            .To = "LadresseDestinataire" & Chr(64) & "Extention.com" 'Adapter ici l'adresse du destinataire
            .From = "AdresseEnvoyeur" & Chr(64) & "Extention.com" 'Adapter ici l'adresse de l'envoyeur, possibilité de passer ça en variable
            .Subject = "Le Sujet" 'Adapter ici le sujet du mail, idem possible de la faire en variable
            .HTMLBody = Mbody & Cdo_Message.HTMLBody 'Récupère le texte pour le corps du message
            '.AddAttachment ("c:cheminfichier.ext") 'Pour éventuellement joindre un fichier
            '.Cc = "LeCC" & Chr(64) & "hotmail.com" 'Pour mettre quelqu'un en CC
            .Send
        End With
    Set Cdo_Message = Nothing
    End Sub
     
    Function GetSMTPServerConfig() As Object
    ' Microsoft CDO for Windows 2000 Library
        Const cdoSendUsingPickup = 1
        Const cdoSendUsingPort = 2
        Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing"
        Const cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"
        Const cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport"
     
        Dim Cdo_Config As Object
        Set Cdo_Config = CreateObject("CDO.Configuration")
        Dim Cdo_Fields As Object
        Set Cdo_Fields = Cdo_Config.Fields
     
        With Cdo_Fields
            .Item(cdoSendUsingMethod) = cdoSendUsingPort
            .Item(cdoSMTPServer) = "xxx-mail.xxxx.com" 'Adapter l'adresse SMTP
            .Item(cdoSMTPServerPort) = 25
            .Update
        End With
     
    End Function
    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse

    lorsque l'on ouvre le fichier il n'y a rien qui se passe voici l'endroit ou la macro est enregistrer en espérant que ce soit correct ...

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Non, ce n'est pas le bon endroit, tu dois le placer dans 'Thisworkbook' et pas Module 2.
    A+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Fvandermeulen Voir le message
    Salut,
    Non, ce n'est pas le bon endroit, tu dois le placer dans 'Thisworkbook' et pas Module 2.
    A+
    Autant pour moi

    la macro est active par contre j'ai l'impression qu'elle n'aime bien l'appellation ".Send" :pour effectuer l'envoie ?


    Pour être sur c'est correct la syntaxe de ce qui est en bleu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With Cdo_Message
            .To = "tatan" & Chr(64) & "blablamail.com" 'Adapter ici l'adresse du destinataire
            .From = "Toton" & Chr(64) & "blablamail.com" 'Adapter ici l'adresse de l'envoyeur, possibilité de passer ça en variable
            .Subject = "ATTENTION PEREMPTION" 'Adapter ici le sujet du mail, idem possible de la faire en variable
            .HTMLBody = Mbody & Cdo_Message.HTMLBody 'Récupère le texte pour le corps du message
            '.AddAttachment ("c:cheminfichier.ext") 'Pour éventuellement joindre un fichier
            '.Cc = "LeCC" & Chr(64) & "hotmail.com" 'Pour mettre quelqu'un en CC
            .Send

  8. #8
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,

    As tu bien adapté toutes les lignes, il y en a aussi dans la Function, comme l'adresse SMTP et éventuellement le port.

    Sinon essaie en mettant .display au lieu de .send, tu devrais avoir le mail qui s'affiche, sinon dis moi quoi

    A+

    P.S. Quelle messagerie utilises tu ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    ça ne change pas grand chose

    pour le smtp, c'est celui ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        With Cdo_Fields
            .Item(cdoSendUsingMethod) = cdoSendUsingPort
            .Item(cdoSMTPServer) = "smtp.orange.fr" 'Adapter l'adresse SMTP
            .Item(cdoSMTPServerPort) = 25
            .Update
        End With
    J'utilise outlook

  10. #10
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Dans ce cas, à part te demander de vérifier l'adresse SMTP je ne vois pas trop ce que ça peut être.

    Si tu ne veux pas afficher l'entièreté du code adapté pour des raisons de confidentialité, tu peux me l'envoyer à info@ExcelEtVous.be.

    A+

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Résolu un grand merci à Fvandermeulen

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 23/04/2012, 22h32
  2. Recevoir une alerte par mail
    Par JuniorBI dans le forum Webi
    Réponses: 3
    Dernier message: 02/11/2010, 14h47
  3. Comment recevoir des alertes par mail
    Par King_poussin dans le forum Administration-Migration
    Réponses: 3
    Dernier message: 21/10/2010, 21h30
  4. Réponses: 3
    Dernier message: 22/08/2010, 17h40
  5. [Mail] confirmer une inscription par mail
    Par przvl dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2007, 15h02

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