Macro s’exécutant par changement valeur d'une plage cellules par formule

bonjour à tous ...

vous êtes déjà nombreux sur ce forum à m'avoir aidé dans mon projet d'application et vous en remercie 1000 fois.

je ne suis pas loin de toucher au but mais je rencontre un dernier problème.

c'est assez difficile à exposé ... je vais essayer d'être le plus clair possible mais l'exemple ci-joint est beaucoup plus explicite je pense.

l’événement déclenchant la macro:

je souhaiterais qu'une macro se déclenche à un changement de valeur d'une plage cellules.

le changement de valeur se ferait via une formule (aucune action manuelle de saisie).

la plage de cellules est très longue (impossible de saisir un code par cellule, il va falloir donc affecter la macro à une plage de cellule).

la macro:

je souhaiterais que si une des valeurs de la plage passe à "vrai" que la forme (aillant le même nom que le numéro de la ligne déclenchant la macro) se colore en vert. je pense que je vous ai perdu mais une fois de plus l'exemple ci-joint est beaucoup plus explicite.

mes idées:

  • pour l’événement déclencheur : une macro de type change (mais pas à la modifications d'une saisies mais à la modification de la réponse d'une formule, c est là où je bloque).
  • une variable récupérant le numéro de la ligne d'ou c'est produit le changement.
  • pour la macro : sélectionner la forme : ("variable")(contenant le numéro de la ligne) puis colore la en vert.

Mais je ne suis pas sur que mes idées soient bonnes.

En tout cas je vous remercie par avance de l'attention que vous portez et avez déjà portez à mon sujet.

9test.xlsx (13.33 Ko)

Bonjour,

essai avec l'événement Private Sub Worksheet_Calculate()

Bonjour Samuel, bonjour le forum,

Peut-être comme ça :

Private Sub Worksheet_Calculate()
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim F As Shape 'déclare la variable F (Forme)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
DL = Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C
For Each O In Worksheets 'boucle sur tous les onglets O du classeur
    If Not O.Name = "BDD" Then 'condition 1 : si le le nom de l'onglet n'est pas "BDD"
        O.Activate 'active l'onglet de la boucle 1
        For Each F In O.Shapes 'boucle 2 : sur toutes les formes F de l'onglet O
            For I = 1 To DL 'boucle 3 : sur toutes les lignes I de 1 à DL
                If UBound(Split(Cells(I, "A"), " ")) > 0 Then 'condition 2 : si la valeur de la cellule ligne I colonne A contient un espace
                    If F.Name = Split(Cells(I, "A"), " ")(1) Then 'condition 3 : si le texte après le premier espace est égal au nom de la forme F
                        O.Shapes.Range(Array(Split(Cells(I, "A"), " ")(1))).Select 'sélectionne la forme F
                        With Selection.ShapeRange.Fill 'prend en compte le remplissage de la forme sélectionnée
                            If Cells(I, "C").Value = True Then 'condition 4 : si la valeur de la cellule ligne I colonne C est [vrai]
                                .ForeColor.RGB = RGB(146, 208, 80) 'couleur verte
                            Else 'sinon (condition 4)
                                .ForeColor.RGB = RGB(255, 0, 0) 'couleur rouge
                            End If 'fin de la condition 4
                        End With 'fin de la prise en compte du remplissage de la forme sélectionnée
                    End If 'fin de la condition 3
                End If 'fin de la condition 2
            Next I 'prochaine ligne de la boucle 3
        Next F 'prochaine forme de la boucle 2
    End If 'fin de la condition 1
    ActiveCell.Select 'désélectionne une éventuelle forme
Next O 'prochaine onglet de la boucle 1
Me.Activate 'acticve l'onglet en cours
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Une fois de plus un grand merci ...

Je vais adapter ça à mon fichier et essayer de comprendre tout ca. Merci aussi pour les nombreux commentaires qui vont me faciliter la chose.

Si j arrive a y comprendre chaque ligne j en sortirais bien grandit.

Encore merci.

C'est génial ! j'ai réussi à l'adapter à mon fichier et ça marche à merveille.

encore merci!

Salut ThauThème,

ta macro fonctionne très bien et m' a permis de beaucoup avancer dans mon projet et je t'en remercie encore.

cependant, pour des raisons diverses, je dois renommer le nom de mes formes dans BDD (colonne A).

au lieu qu'elles s'appellent "forme 1" , je souhaiterais les appeler "1" tout simplement.

j'ai tout essayé ... mais rien ni fait. je n'arrive pas à comprendre la ligne de code demandant de chercher après le texte ...

peux-tu m' aider de nouveau ?

merci d'avance.

Rechercher des sujets similaires à "macro executant changement valeur plage formule"