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 alerte MsgBox qu'une seul fois..


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Afficher une alerte MsgBox qu'une seul fois..
    Bonjour,

    désolé si le titre n'est pas très clair mais ce n'est pas facile a dire en une phrase ^^

    voila mon code

    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)
    Dim cells As Range
    For Each Cel In Range("f152:aj152")
        If Cel > 10 Then
        MsgBox "Seuil critique atteint", vbOKOnly, 48
    Exit For
        End If
    Next
    End Sub
    Je souhaite afficher un MsgBox en fonction d'une valeur d'une cellule d'une plage donnée, ( si une valeur dans (f152:aj152) passe supérieur à 10 le message s'affiche.

    Mais je voudrais que quand je clique sur ok, et que je modifie une autre donnée, tant que une autre valeur ne passe pas au dessus de 10, le message ne s'affiche plus...

    En vous remerciant par avance.

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    Une simple variable booléenne générale --->> False (par défaut) au départ, la mettre à True la 1ère fois et n'afficher la msgbox que si encore False. Non ?

    Ceci dit : il y a une petite contradiction avec :
    tant que une autre valeur ne passe pas au dessus de 10
    A moins que tu n'aies pas donné les précisions nécessaires, voire indispensables, sur beaucoup de choses ...

    EDIT (et quand même) : et si tu t'intéressais un peu à ce qu'est la validation des données ? (Ce ne serait pas du temps perdu).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette réponse rapide,

    la premiere chose que j'aurais peut être du préciser est que je débute le VBA,

    -Mes valeurs contenues dans (f152:aj152) sont des résultat de fonction "somme", j'ai essayer les validations de données et ca ne marche pas,

    qu'entend tu par "Une simple variable booléenne générale --->> False (par défaut) au départ, la mettre à True la 1ère fois et n'afficher la msgbox que si encore False."

    je ne connais pas.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    la premiere chose que j'aurais peut être du préciser est que je débute le VBA
    Non ! La précision espérée n'a rien à voir avec le développement et tout à voir avec l'exposé des tenants et aboutissants.
    Commence par cela. On verra le reste ENSUITE (lorsqu'au moins les aboutissants seront exprimés sans la moindre ambiguïté).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je gère un fichier RH qui se presente comme suit

    Agents Postes 1 2 3 4 5 Jusqua 31 Janvier

    A Vendeur
    B Caissier
    C commercial
    D Vendeur
    E Livreur
    F Commercial

    Je coche des qu'un agent est absent, ca me fait un total en bas grace a un NBVAL, si le 3 janvier j'ai 10 absent ou plus, je suis déclencher l'alerte, une fois l'alerte déclenchée le total du 3 janvier reste le même mais si je coche une absence le 5 Janvier, étant donnée que le total du 3 Janvier est superieur à 10 le message apparait, je veut qu'il réapparaisse si par exemple le 9 Janvier jai plus de 10 absent,

    J'espère avoir été clair,

    Merci

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Veux-tu s'il te plait mettre ici une copie d'écran (pas ton fichier, mais une copie d'écran) montrant :
    - la disposition de tes données (entêtes incluses)
    - la/les cellule(s) où est ta formule NBVAL
    On y verra alors probablement plus clair.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre actif
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 144
    Points : 223
    Points
    223
    Par défaut
    Allez, pour te donner un coup de pouce :

    En admettant que ta ligne des totaux se situe en 20ème ligne de la même feuille, tu peux essayer ça (code écrit avec les pieds, je sais... )

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Row >= 20 Then Exit Sub       ' Pour éviter de boucler lors d'une mise à jour des totaux
     
    If Cells(20, Target.Column) > 10 Then               ' Si le total (en ligne 20) dépasse 10
        If Cells(21, Target.Column) <> "A" Then         ' et que l'alerte n'a pas déjà été donnée (en ligne 21)
            MsgBox "alerte"                             ' on affiche l'alerte
            Cells(21, Target.Column) = "A"              ' et on la marque comme signalée (en ligne 21)
        End If
    Else
        Cells(21, Target.Column).Clear                  ' on redescend en dessous de 10, on supprime la marque d'alerte
    End If
     
    End Sub
    En gros, à chaque fois que tu vas modifier une cellule "avant" de la ligne 20, l'évènement se déclenche. On vérifie si ta valeur auto-calculée (en ligne 20) dépasse 10, si c'est le cas et qu'on n'a pas émis d'alerte, on affiche le message et on met un "A" en ligne 21 pour flager l'alerte comme déjà effectuée.
    "Rien ne sert de dire ce qu'on fait, si on ne fait pas ce qu'on dit" (Moi)

  8. #8
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    C'est parfait, ca marche nikel, merci beaucoup,

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Matdenice Voir le message
    Je souhaite afficher un MsgBox en fonction d'une valeur d'une cellule d'une plage donnée, ( si une valeur dans (f152:aj152) passe supérieur à 10 le message s'affiche.
    A ta place, je ferais une simple mise en forme conditionnelle qui passe la cellule en rouge (par exemple).
    Ce serait 10 fois plus rapide et plus pratique qu'un MsgBox dans un Worksheet_Change.

    Citation Envoyé par Phil'oche Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Row >= 20 Then Exit Sub       ' Pour éviter de boucler lors d'une mise à jour des totaux
     
    If Cells(20, Target.Column) > 10 Then               ' Si le total (en ligne 20) dépasse 10
        If Cells(21, Target.Column) <> "A" Then         ' et que l'alerte n'a pas déjà été donnée (en ligne 21)
            MsgBox "alerte"                             ' on affiche l'alerte
            Cells(21, Target.Column) = "A"              ' et on la marque comme signalée (en ligne 21)
        End If
    Else
        Cells(21, Target.Column).Clear                  ' on redescend en dessous de 10, on supprime la marque d'alerte
    End If
     
    End Sub
    A ta place, plutôt qu'un "A", j'aurais mis Cells(20, Target.Column).
    Ca aurait permis de tester une éventuelle variation sur sa valeur.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/05/2013, 15h02
  2. Réponses: 2
    Dernier message: 27/07/2012, 15h15
  3. Créer une alerte à partir d'une date donnée
    Par Skumps dans le forum Access
    Réponses: 4
    Dernier message: 13/04/2006, 16h12
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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