Afficher un cercle si

Bonjour, au pire on regarde si la sélection prend F5 ou R7 :

Dim forme As Shape
    Dim cel As Range

If Not Intersect(Target, activesheet.Range("F5"), activesheet.Range("R7")) Is Nothing Then
    For Each cel in Target.cells
        If cel.value = "a" then
            nom = ""
            On Error Resume Next 'on passe à la ligne suivante en cas d'erreur
            nom = activesheet.Shapes.Range(Array("Forme" & cel.Address)).Name 'on regarde si la forme existe en tentant
            'de récupérer son nom, pour éviter de la recréer
            On Error GoTo 0

            If nom = "" Then
                'ajout d'une forme stockée dans forme
                Set forme = activesheet.Shapes.AddShape(msoShapeRoundedRectangle, cel.MergeArea.Left + 10, cel.MergeArea.Top + 47, _
                cel.MergeArea.Width - 20, cel.MergeArea.Height - 90)
                With forme
                    .Name = "Forme" & cel.Address 'afin de donner un nom unique à chaque forme on y met l'adresse de la cellule traitée
                    .Adjustments.Item(1) = 0.5
                    .Fill.Visible = msoFalse
                    .Line.ForeColor.RGB = RGB(0, 0, 0)
                    .Line.Weight = 2
                End With
                Set forme = Nothing 'on vide l'objet forme
            End If
        ElseIf cel.value <> "a" And Not Intersect(Target, activesheet.Range("F5"), activesheet.Range("R7")) Is Nothing Then 'si on vide la cellule ou qu'elle n'est pas égale à a
            On Error Resume Next
            activesheet.Shapes.Range(Array("Forme" & cel.Address)).Delete
            On Error GoTo 0
        End If
    Next cel
End If

Sauf que cel est dans Target... si Target ne contient pas F5 c'est pareil...

Rien de diff....

Rebonjour, à essayer :

Dim forme As Shape
    Dim cel As Range, cellule as Range, Plage as Range
    set Plage = Target
    Goto debut

if Target.dependents.cells.count > 0 then
    for each cellule in target.dependents.cells
        Set Plage = cellule
        goto debut
    next cellule
End If 

debut:  
If Not Intersect(Plage , activesheet.Range("F5") Is Nothing Then
    For Each cel in Plage .cells
        If cel.value = "a" then
            nom = ""
            On Error Resume Next 'on passe à la ligne suivante en cas d'erreur
            nom = activesheet.Shapes.Range(Array("Forme" & cel.Address)).Name 'on regarde si la forme existe en tentant
            'de récupérer son nom, pour éviter de la recréer
            On Error GoTo 0

            If nom = "" Then
                'ajout d'une forme stockée dans forme
                Set forme = activesheet.Shapes.AddShape(msoShapeRoundedRectangle, cel.MergeArea.Left + 10, cel.MergeArea.Top + 47, _
                cel.MergeArea.Width - 20, cel.MergeArea.Height - 90)
                With forme
                    .Name = "Forme" & cel.Address 'afin de donner un nom unique à chaque forme on y met l'adresse de la cellule traitée
                    .Adjustments.Item(1) = 0.5
                    .Fill.Visible = msoFalse
                    .Line.ForeColor.RGB = RGB(0, 0, 0)
                    .Line.Weight = 2
                End With
                Set forme = Nothing 'on vide l'objet forme
            End If
        ElseIf cel.value <> "a" And Not Intersect(Plage , activesheet.Range("F5")) Is Nothing Then 'si on vide la cellule ou qu'elle n'est pas égale à a
            On Error Resume Next
            activesheet.Shapes.Range(Array("Forme" & cel.Address)).Delete
            On Error GoTo 0
        End If
    Next cel
return

La différence ici c'est qu'on va aussi regarder les dépendants directs de la cellule que l'on va modifier, du coup on va aussi passer par F5 normalement, merci de me confirmer

Il y a une erreur de compilation :

If Not Intersect(Plage , activesheet.Range("F5") Is Nothing Then

For Each cel in Plage .cells

Bonjour,

cette formule fonctionne bien, cependant uniquement si on change directement la valeur de F5 et appuyer ENTER.

Le soucis est que F5 = R7 et le code ne marche pas si on modifie la valeur de R7.

Dim forme As Shape
    Dim cel As Range

If Not Intersect(Target, activesheet.Range("F5")) Is Nothing Then
    For Each cel in Target.cells
        If cel.value = "a" then
            nom = ""
            On Error Resume Next 'on passe à la ligne suivante en cas d'erreur
            nom = activesheet.Shapes.Range(Array("Forme" & cel.Address)).Name 'on regarde si la forme existe en tentant
            'de récupérer son nom, pour éviter de la recréer
            On Error GoTo 0

            If nom = "" Then
                'ajout d'une forme stockée dans forme
                Set forme = activesheet.Shapes.AddShape(msoShapeRoundedRectangle, cel.MergeArea.Left + 10, cel.MergeArea.Top + 47, _
                cel.MergeArea.Width - 20, cel.MergeArea.Height - 90)
                With forme
                    .Name = "Forme" & cel.Address 'afin de donner un nom unique à chaque forme on y met l'adresse de la cellule traitée
                    .Adjustments.Item(1) = 0.5
                    .Fill.Visible = msoFalse
                    .Line.ForeColor.RGB = RGB(0, 0, 0)
                    .Line.Weight = 2
                End With
                Set forme = Nothing 'on vide l'objet forme
            End If
        ElseIf cel.value <> "a" And Not Intersect(cel, Range("F5")) Is Nothing Then 'si on vide la cellule ou qu'elle n'est pas égale à a
            On Error Resume Next
            activesheet.Shapes.Range(Array("Forme" & cel.Address)).Delete
            On Error GoTo 0
        End If
    Next cel
End If

Bonjour

Les modifications de cellules lors du recalcul ne ont pas des changements pour Excel.

On peut intercepter le recalcul pour agir mais cela risque de ralentir le fonctionnement...

Dacc, merci pour votre réponse.

Du coup je crois que ce je cherche à faire n'est pas possible

Bonjour,

C'est pour ça que j'étais passé par la collection cells de dependents mais il faut croire que ça bug encore...

Dur de savoir pourquoi avec seulement les codes...

Bonjour,

>j'aimerai que excel m'affiche un cercle autour d'une cellule (B6, par exemple) seulement si la cellule B6 continent la lettre "a".

Si la cellule B6 est vide alors le cercle disparaît.

cf PJ

Ceuzin

Re

cf PJ

Ce n'est pas vraiment la problématique qui est de tracer le changement de valeurs de cellules se référant à d'autre par calcul...

Rechercher des sujets similaires à "afficher cercle"