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 :

Afficher une fenêtre d'alerte à l'issue de 10 minutes


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Novembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Afficher une fenêtre d'alerte à l'issue de 10 minutes
    Bonjour,

    Malgré toutes mes recherches, je n'arrive pas à effectuer la tâche suivante :

    je souhaite qu'une alerte (fenêtre msgbox) s'affiche au bout de 10 mn après avoir rempli la cellule "sonnée" (format hh:mm:ss) si la cellule "présentée" n'est pas complétée...

    Nom : Capture.GIF
Affichages : 365
Taille : 13,4 Ko

    Exemple : Si je complète une cellule avec l'horaire de départ 11:25:32, je souhaite que l'alerte apparaisse automatiquement à 11:35:32.

    Bien sûr, si je la complète avant, je souhaiterai que rien ne s'affiche

    J'ai essayé de passer par la fonction MAINTENANT() et msgbox... mais cela ne marche pas...

    Je pense qu'il me faudrait une cellule qui donne la référence du temps en réel, un peu de fonction SI et une liaison à la macro msgbox.

    Après plusieurs heures et des recherches infructueuses sur le net, je bloque...

    Merci pour l'aide que quelqu'un pourra m'apporter.

    A+

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Bonjour
    J'ai eu un problème qui ressemble un peu à celui-ci. Je l'avais résolu en utilisant un chien de garde qui vérifie une feuille de façon périodique (au mieux toutes les secondes). Ce n'est sans doute pas la meilleure des solutions, mais c'est ce que j'avais trouvé!

    Dans ce je propose il y a deux durées: le délai de déclenchement de l'alerte, et le délai de vérification périodique.

    Si la durée de déclenchement de l'alerte (10 minutes) ne nécessite pas une extrême précision on peut effectuer la vérification avec une périodicité plus grande (par ex 5 secondes au lieu de 1 seconde ce qui donne moins de travail à Excel). En tout cas il faut que cette périodicité soit d'une durée supérieure au temps de traitement de la vérification. Le temps dépend des opérations à effectuer et de la taille du fichier.
    Il faut aussi que la période de vérification soit beaucoup plus courte que le délai d'alerte.

    Ces paramètres pourront bien sûr être cachés dans une autre feuille. Et la vérification doit être adaptée! J'avoue ne pas avoir tout compris.
    J'utilise Excel 2007. Je joins le fichier.
    Alerte.xls

    Dans la feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Cells(1, 1).Address = ThisWorkbook.Names("OnOff").RefersToRange.Address Then
            ChienDeGarde
        End If
        If ThisWorkbook.Names("HeureVerification").RefersToRange.Value <> "" And _
            ThisWorkbook.Names("HeureVerification").RefersToRange.Value < Time Then
            ChienDeGarde
        End If
    End Sub
    Dans module1
    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
    56
    57
    58
    59
    60
    Option Explicit
    Dim periodeJour As Single, heureVerification As Single, tempsAlerteJour As Single
    Dim nbLignes As Integer, iL As Integer
    Dim rD As Range, rS As Range
    Dim f As Worksheet
     
     
     
    Sub ChienDeGarde()
    'arret éventuel de la vérification
        If ThisWorkbook.Names("OnOff").RefersToRange.Value = "Off" Then
            If ThisWorkbook.Names("HeureVerification").RefersToRange.Value <> "" Then
               On Error Resume Next
                Application.OnTime _
                        ThisWorkbook.Names("HeureVerification").RefersToRange.Value, _
                        "ChienDeGarde", , False
                On Error GoTo 0
            End If
            ThisWorkbook.Names("HeureVerification").RefersToRange.ClearContents
            GoTo finChienDeGarde
        End If
     
    'vérifie la feuille
        Verifier
     
     
    'relance la garde
        periodeJour = ThisWorkbook.Names("periode").RefersToRange.Value / 84600 '1 jour= 84600 secondes
        heureVerification = Time + periodeJour
        ThisWorkbook.Names("HeureVerification").RefersToRange.Value = heureVerification
        Application.OnTime heureVerification, "ChienDeGarde", , True
     
    finChienDeGarde:
    End Sub
     
     
     
     
    Sub Verifier()
    'feuille à vérifier
    Set rD = ThisWorkbook.Names("heureDepart").RefersToRange
    Set rS = ThisWorkbook.Names("heureSonne").RefersToRange
    Set f = rD.Parent
    tempsAlerteJour = ThisWorkbook.Names("tempsAlerte").RefersToRange.Value / 1440 '1 jour=1440 minutes
     
    nbLignes = f.Cells(f.Rows.Count, ThisWorkbook.Names("heureDepart").RefersToRange.Column).End(xlUp).Row _
                    - ThisWorkbook.Names("heureDepart").RefersToRange.Row
    For iL = 1 To nbLignes
        'si on a rempli l'heure de départ
        If rD.Offset(iL, 0).Value <> "" Then
            'si on n'a pas rempli l'heure sonné
            If rS.Offset(iL, 0).Value = "" Then
                's'il s'est passé plus de temps que le délai d'alerte
                If Time > rD.Offset(iL, 0).Value + tempsAlerteJour Then
                    MsgBox "Ligne " & rD.Offset(iL, 0).Row & " non remplie!"
                End If
            End If
        End If
    Next iL
    End Sub

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Novembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci pour ta réponse. Je vais me pencher là-dessus à tête reposée...

    Ça promet quelques heures de bonheur...

    Merci encore.

Discussions similaires

  1. Affichage variable dans une fenêtre d'alerte
    Par undercrash dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/03/2006, 21h35
  2. afficher une fenêtre dans le thread
    Par LN(a) dans le forum Langage
    Réponses: 8
    Dernier message: 21/12/2005, 13h21
  3. Afficher une Fenêtre MDI à partir d'une DLL
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/12/2005, 16h58
  4. Afficher une fenêtre d'informations qui donne l'impression de se détâcher
    Par jean_bobi dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 25/09/2005, 15h31
  5. Réponses: 1
    Dernier message: 16/02/2005, 12h04

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