0
votes

Coloration d'une cellule référencée (Excel, VBA)

Si j'ai une colonne de numéros référencés et que je voudrais colorer la cellule référencée automatiquement après un clic droit, comment puis-je vous référer à la cellule de référence dans VBA. Dans l'exmaple, j'ai les valeurs référencées dans la colonne [O]. À [O4] J'ai la valeur [= $ G $ 12]. Si je clique sur [O4], je veux la coller avec la cellule de référence G12. Ce serait une étape supplémentaire que j'aimerais colorer la cellule au-dessus de [G12] aussi. J'ai essayé d'insérer ceci dans la formule:

Select Case Target.Address
        Case "$O$4" '<~ if cell A1 is clicked, highlight cells C5-C9 yellow
          Cancel = True
          If .Range("O4,G11:G12").Interior.Color = RGB(255, 153, 0) Then
             .Range("O4,G11:G12").Interior.Color = RGB(255, 255, 255)
             .Range("O4,G11:G12").Font.Bold = False
        Else: .Range("O4,G11:G12").Interior.Color = RGB(255, 153, 0)
              .Range("O4,G11:G12").Font.Bold = True
          End If
End Select


2 commentaires

Vos formules sont-elles toutes les formules "= A1" ou sont-elles plus compliquées?


A1 dans le commentaire est vieux mais j'ai eu la solution, merci :)


3 Réponses :


0
votes

Essayez cette approche, veuillez:

Dim strForm As String, newRng As Range
 Select Case Target.Address
        Case "$O$4" '<~ if cell A1 is clicked, highlight cells C5-C9 yellow
          Cancel = True
          strForm = Target.Formula
          'split string formula on "$" character and use the array obtained elements, to build the new address
          Set newRng = Range(Range(Split(strForm, "$")(1) & Split(strForm, "$")(2) - 1).Address & ":" & _
                                            Range(Split(strForm, "$")(1) & Split(strForm, "$")(2)).Address)
          If Range(Target.Address(0, 0) & "," & newRng.Address).Interior.Color = RGB(255, 153, 0) Then
             Range(Target.Address(0, 0) & "," & newRng.Address).Interior.Color = RGB(255, 255, 255)
             Range(Target.Address(0, 0) & "," & newRng.Address).Font.Bold = False
        Else: Range(Target.Address(0, 0) & "," & newRng.Address).Interior.Color = RGB(255, 153, 0)
              Range(Target.Address(0, 0) & "," & newRng.Address).Font.Bold = True
          End If
End Select


0 commentaires

0
votes

Vous pouvez utiliser précédents Code> Propriété de Plage Code> OBEJCT:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Address
        Case "$O$4"
            Cancel = True

            Dim rng As Range
            Set rng = Target.Precedents
            If rng Is Nothing Then
                Set rng = Target
            Else
                Set rng = Union(Target, rng, rng.Offset(-1))
            End If
            If rng.Interior.Color = RGB(255, 153, 0) Then
                rng.Interior.Color = RGB(255, 255, 255)
                rng.Font.Bold = False
            Else
                rng.Interior.Color = RGB(255, 153, 0)
                rng.Font.Bold = True
            End If

    End Select
End Sub


0 commentaires

0
votes

Merci beaucoup pour vous deux. Finement ça marche. J'ai une année supplémentaire afin de réduire la longueur du code.

Permet de le considérer comme un bloc pour colorier des cellules si je CLCIK sur la cellule [O4]. Si je ne veux pas répéter ce bloc plusieurs fois, mais je veux la même fonctionnalité pour la gamme de [O4: O45] avec le contenu de référence correspondant Comment je peux le faire? Désolé je ne suis pas si expérimenté dans le codage, mais je suis très satisfait du résultat jusqu'à présent. Merci beaucoup!


0 commentaires