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 :

message d'alerte en fonction de dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 386
    Par défaut message d'alerte en fonction de dates
    bonjouyr à tous.

    voila mon problême.

    j ai un parc de véhicules qui doivent subir une révision chacun à une date X.

    Je dois prendre les rendez vous 2 mois avant cette date et j aimerai un message d'alerte qui s'affiche à l ouverture de mon tableau si je suis 2 mois(60jours pour simplifier) avant la date d'un véicule.

    supposons 3 véhicules

    véhicule Date révision
    A 01/01/2010
    B 15/02/2010
    c 25/03/2010

    et une cellule à la date du jour avec =AUJOURDHUI()

    Est il possible d'avoir un petit message du style véhicule A à réviser si on est 60jours avant le 01/01/2010 par exemple.

    merci de vos lumières et de votre aide ou de pistes.

    steph

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut une solution
    Y a-t-il beaucoup beaucoup de voitures ?
    Il manque toujours des détails dans les questions.

    Enfin, un code pour quelques voitures par jour :
    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
    Sub TestVoiture()
        'Nom des véhicule dans la colonne "A" sauf entête en cellule A1
        'Date de passage du CT au format date dans la colonne "B" sauf entête en "B1"
     
        Dim Lst As String
        Const AvertissemmentPrecedantEnJour = 60
        Lst = ""
     
        'Cherche dans toutes les cellules de B2 à la fin
        For Each c In Range("B2:B" & Range("B1").End(xlDown).Row)
            'LA valeur doit être entière pour ne pas avoir l'influence des heures (la fraction du nombre)
            If Int(c.Value) = (Int(Now()) + AvertissemmentPrecedantEnJour) Then
                'Prend la valeur dans la colonne d'à coté dans la même ligne
                Lst = Lst & c.Offset(0, -1).Value & Chr$(13)
            End If
        Next c
     
        If Lst <> "" Then
            MsgBox " Contrôle technique dans 60 jours pour le(s) véhicule(s) suivant(s) :  " & Chr$(13) & Chr$(13) & Lst, vbInformation, "Contrôle technique à prévoir"
        End If
     
    End Sub
    Pour une vérification immédiate à l'ouverture du fichier à mettre dans "ThisWorkBook" dans la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Workbook_Open()
    End Sub

    ESVBA

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 386
    Par défaut
    salut ESVBA.

    non, il y a une vingtaine de véhicules.

    merci beaucoup.

    steph

    re

    ça marche impec , j ai fait un test sur une date fictive à 60jours mais par contre, ça ne s affiche pas quand j ouvre ma feuille excel.

    il faut que je lance la macro.

    pourtant, j ai bien mis Private Sub Workbook_Open()
    End Sub dans this workbook .

    steph

    oui je viens de voir aussi que si j ai 2 véhicules dont la date de révisions est la même. il m en affiche qu'un comme s'il scannait pas toute la colonne B.

    je vois pas.

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    j'ai fait un test de confirmation avec 3 cellules contenant la formule :
    Et dans la fenêtre, il s'affiche bien les 3 noms de véhicule.

    Le problème est certainement dans la saisie des dates.
    Si une des dates est au format texte, ca valeur numérique est nulle et donc jamais équivalente à un nombre (de jours).

    Une petite vérification s'il ne traine pas un espace, si la date est saisie avec les bons séparateurs de date.

    Au pire, puisqu'il y a peu de voitures une resaisie à la main ou une conversion par une formule avec excel en date.

    ESVBA

    j'aurais dû commencer par la bonne question !

    Dans le code la boucle se fait de la cellule "B1" à la dernière cellule d'une liste non vide rencontrée en descendant (xlDown).

    Y a-t-il des lignes vides dans la colonne des dates de CT ? Normalement, non, tout véhicule passera un jour le contrôle technique : il a une date.

    S'il y a des lignes vides c'est normal : la boucle s'arrête à la première ligne vide.

    Il faut donc changer la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Range("B2:B" & Range("B1").End(xlDown).Row)
    par la première cellule rencontrée en partant du bas de la colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Range("B1:B" & Range("B65362").End(xlup).Row)
    Attention:
    la valeur de 65362 change suivant qu'il s'agit des version Excel 2010-2007 et les autres. C'est le dernier numéro de ligne.

    ESVBA

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 386
    Par défaut
    Oui finalement ça fonctionne bein pour X vehicules mais j ai un pb a l ouverture de mon excel Xp :erreur de compilation dans le module caché:this workbook.

    c est ça qui doit bloquer l ouverture automatique de tes messages. je vais réinstaller le excel.

    2 petites questions.

    -je change quoi dans ton code si la colonne de mes dates est en F par ex.?

    -si je veux l alerte pendant par ex 5 jours c est a dire entre -60 et -55 ( car la je la vois qu' à -60 et plus après). tu vois pour que ça marque bien qu il faut la faire cette révision.

    si c est pas trop demander.

    en tout cas merci

    stephi

  6. #6
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Pourquoi ne pas tout dire immédiatement ?
    on veut bien aider en fonction ses moyens mais faut pas pousser.
    Je commence à comprendre les messages agressifs et directs de certains anciens.

    Passons.

    Alors, il faut changer :
    • les "B" en "F"
    • le décalage "c.Offset(0, -1)" par le nombre de colonne donc "c.Offset(0, -5)"
    • "If Int(c.Value) = (Int(Now()) + AvertissemmentPrecedantEnJour)"


    comme vous n'avez pas daigné répondre à mes précédantes interrogations, voici le code avec les nouvelles modifications à ma connaissance :

    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
     
    Sub TestVoiture()
        'Nom des véhicule dans la colonne "A" sauf entête en cellule A1
        'Date de passage du CT au format date dans la colonne "F" sauf entête en "F1"
     
        Dim Lst As String
        Lst = ""
     
        'Cherche dans toutes les cellules de F2 à la fin
        For Each c In Range("F2:F" & Range("F1").End(xlDown).Row)
            'La valeur doit être entière pour ne pas avoir l'influence des heures (la fraction du nombre)
            If Int(c.Value) <= Int(Now()) + 60 And Int(c.Value) >= Int(Now()) + 55 Then
                'Prend la valeur dans la colonne d'à coté dans la même ligne
                Lst = Lst & c.Offset(0, -5).Value & Chr$(13)
            End If
        Next c
     
        If Lst <> "" Then
            MsgBox " Contrôle technique a prévoir pour le(s) véhicule(s) suivant(s) :  " & Chr$(13) & Chr$(13) & Lst, vbInformation, "Contrôle technique à prévoir"
        End If
     
    End Sub
    ESVBA

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 386
    Par défaut
    merci esvba

    désolé je voulais pas vous embéter. c est souvent des idées qui viennent au fur et à mesure.

    et j apprécie votre aide.

    bonne soirée

    steph

  8. #8
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    je suis amateur, volontaire et limité dans mes conaissances et dans le temps.

    Alors le mieux est de présenter directement et clairement ce que l'on veut.

    Si certains veulent aider super, sinon...

    J'ai le même problème et de plus en plus souvent au travail.
    C'est énervant.

    ESVBA

Discussions similaires

  1. message d'alerte date
    Par moimemessssssssss dans le forum Excel
    Réponses: 2
    Dernier message: 27/02/2011, 15h09
  2. [AC-2007] message d'alerte pou champ date
    Par rachidalliance dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/07/2010, 22h10
  3. Réponses: 5
    Dernier message: 19/02/2009, 15h53
  4. fonction pour message d'alerte
    Par Alain_Aebischer dans le forum Général JavaScript
    Réponses: 23
    Dernier message: 10/06/2008, 16h04
  5. Formulaire message alerte en fonction d'un test
    Par arnogef dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2007, 10h38

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