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 :

Détecter changement valeur booléenne dans cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut Détecter changement valeur booléenne dans cellule
    Bonjour,

    Dans la cellule A6, j'ai la formule {=SI(SOMMEPROD((champ<>"")*(A8:A19<>"")*(A8:A19<champ));FAUX;VRAI)}

    champ correspond à la plage A7:A18

    Dans champ, j'ai actuellement 9 valeurs (noms) donc de A7 à A15, triées par ordre alphabétique

    Si j'ajoute un nouveau nom en A16, la cellule A6 affiche FAUX si la liste n'est plus triée.

    Je pensais pouvoir détecter le changement de TRUE à FALSE (et vis versa) avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$A$6" Then (ma procédure de tri)
    End Sub
    ... mais ça ne détecte rien ! Cela vient-il du fait que la valeur est booléenne ?

    En vous remerciant par avance pour vos lumières,
    Cordialement,
    jp

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    J'ai même essayé avec ceci : If Not Intersect(Target, Range("A6")) Is Nothing Then MsgBox "ma procédure de tri..."

    ... mais en vain !

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Sur ce lien : https://silkyroad.developpez.com/VBA/EvenementsFeuille/

    je lis :

    II-E. Worksheet_Change▲
    Private Sub Worksheet_Change(ByVal Target As Range)

    Cet évènement est déclenché lorsque le contenu d'une cellule est modifiée dans la feuille.
    La procédure ne prend pas en compte la modification des mises en forme dans la cellule. Consultez l'exemple proposé dans le chapitre Worksheet_SelectionChange pour identifier la modification d'une mise en forme.

    Nota:
    Cet événement ne se produit pas si la feuille vient d'être recalculée (Utilisation de la touche F9 en mode calcul sur ordre).
    Sauf erreur, mon code ne correspond pas à ces deux exclusions !

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    L'évènement _Change ne détecte que les changements de valeurs ou de formule dans la feuille, par le changement du résultat d'un calcul de formule.
    Ce changement de résultat ne peut intervenir que lorsqu'il y a changement des antécédents primaires : c'est la modifications de ces antécédents qu'il faut surveiller pour détecter le changement du résultat de la formule.
    Un exemple simple avec la formule suivante feuille 1 :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBVAL(Feuil2!B4:B8)
    Il faut utiliser l'évènement de la feuille 2 dans la plage B4:B8, à condition bien sûr que ces cellules ne soient pas aussi des formules ..;
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour et merci Patrice,

    L'évènement _Change ne détecte que les changements de valeurs ou de formule dans la feuille, par le changement du résultat d'un calcul de formule.
    Je n'avais pas trouvé cette info sur le site que j'ai cité en référence ; sans doute ai-je mal lu.

    Donc, dans ce cas précis, c'est sans espoir... Je vais réfléchir à une autre piste. L'idée de déclencher automatiquement le tri de ma plage à l'ajout d'un nom, me plaisait bien...
    j'espère que personne ne me répondra avant que j'y aie réfléchi !!

    Cdt

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Merci de ne pas avoir répondu avant moi

    Je viens de retrouver un vieux code dans une de mes applis et en prim', les noms seront en majuscules ! Et ça m'évite une formule matricielle sur la feuille de calcul !

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range
    Dim i&
    Dim plage_noms As Range
     
        Set plage_noms = Range("A7:A18")
     
        If Not plage_noms Is Nothing Then
            Application.EnableEvents = False
            For Each C In plage_noms.Cells
                C = UCase(C)
            Next
     
            For i = 2 To plage_noms.Count
                If plage_noms(i) <> "" Then
                    If plage_noms(i - 1) > plage_noms(i) Or plage_noms(i - 1) = "" Then
                        Range("A7:B18").Sort Key1:=[a1]
                    End If
                End If
            Next
            Application.EnableEvents = True
        End If
    End Sub
    Tout semble bien fonctionner maintenant.

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

Discussions similaires

  1. Détecter changement valeur cellule calculée
    Par matou88 dans le forum Excel
    Réponses: 5
    Dernier message: 04/09/2017, 14h10
  2. [Toutes versions] Détecter changement valeur retournée par une formule
    Par Jean-Philippe André dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/08/2012, 09h17
  3. [XL-97] Changement valeur d'une cellule en fonction de valeurs d'autres cellules
    Par chubak62 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/01/2011, 10h21
  4. [XL-2003] listbox: Plage de donnee SOURCE variable selon valeur contenue dans cellule
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/09/2010, 22h26
  5. Réponses: 2
    Dernier message: 19/05/2009, 13h00

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