Comparer les cellules de deux colonnes d'un tableau

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
Aelyth
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 13 septembre 2019
Version d'Excel : 2016 EN

Message par Aelyth » 16 janvier 2020, 10:40

Bonjour à tous,

J'ai une feuille dans laquelle j'ai créé un tableau dynamique.
Jusqu'ici, la macro que j'utilisais ne se reposait pas sur les noms des colonnes du tableau, mais sur le numéro de la colonne, comme ceci :

For i = Range("A2").CurrentRegion.Rows.Count To 2 Step -1

If Cells(i, 12).Value <> Cells(i, 15).Value Then
Cells(i, 12).Interior.ColorIndex = 3
End If

Next i

Mais comme j'ai créé un tableau dynamique, j'aimerai que ma macro se repose sur le noms de ses colonnes, de manière à ce qui si elles bougent de place, la macro reste valable, avec quelques choses qui ressemblerait plus à ça :

If Cells("Table1[Doc Items]").Value <> Cells("Table1[Check Doc Items]").Value Then
Cells("Table1[Doc Items]").Interior.ColorIndex = 3

Seulement cette formulation ne marche manifestement pas. Ici, je souhaite comparer les valeurs des cellules de ma colonne nommée "Doc Items" avec celles de la colonne nommée "Check Doc Items" et mettre en rouge les valeurs de la colonne "Doc Items" lorsqu'elles ne correspondent pas avec celles de "Check Doc Items".

Y a-t-il un moyen de le faire en se reposant sur les noms des colonnes ?

Merci d'avance pour votre aide et bonne journée,
Aelyth
Avatar du membre
funkyfoenky
Membre fidèle
Membre fidèle
Messages : 274
Appréciations reçues : 4
Inscrit le : 15 avril 2013
Version d'Excel : Office 365

Message par funkyfoenky » 16 janvier 2020, 11:58

Hello, tu peux utiliser ton code initial et le modifier comme ceci ca devrait fonctionner:


With Activesheet.ListObjects("Table1")

For i = Range("A2").CurrentRegion.Rows.Count To 2 Step -1


If Cells(i, .ListColumns("Doc Items").Index).Value <> Cells(i, .ListColumns("Check Doc Items").Index).Value Then
Cells(i, .ListColumns("Doc Items").Index).Interior.ColorIndex = 3
End If

Next i

End With
A
Aelyth
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 13 septembre 2019
Version d'Excel : 2016 EN

Message par Aelyth » 16 janvier 2020, 13:23

Est-ce que ça serait éventuellement possible de se passer de for i ?
Avatar du membre
funkyfoenky
Membre fidèle
Membre fidèle
Messages : 274
Appréciations reçues : 4
Inscrit le : 15 avril 2013
Version d'Excel : Office 365

Message par funkyfoenky » 16 janvier 2020, 14:02

Oui avec une mise en forme conditionnelle c'est même possible de passer sans macro
A
Aelyth
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 13 septembre 2019
Version d'Excel : 2016 EN

Message par Aelyth » 16 janvier 2020, 14:13

J'aurais plutôt souhaité incorporer la mise en forme conditionnelle à la macro, ce n'est pas la seule action que je fais avec. :)
Du coup sans le for i ça donnerait quoi ?
Avatar du membre
funkyfoenky
Membre fidèle
Membre fidèle
Messages : 274
Appréciations reçues : 4
Inscrit le : 15 avril 2013
Version d'Excel : Office 365

Message par funkyfoenky » 16 janvier 2020, 15:47

Le for i c'est quand même pas si compliqué mais bon c'est vrai que l'avantage de la mise en forme conditionnelle c'est qu'elle s'applique en temps réel:
With ActiveSheet.ListObjects("Table1")
ColumnLetter1 = Split(Cells(1, .ListColumns("Doc Items").Index + .Range.Column - 1).Address, "$")(1)
ColumnLetter2 = Split(Cells(1, .ListColumns("Check Doc Items").Index + .Range.Column - 1).Address, "$")(1)

    With Columns(.ListColumns("Doc Items").Index + .Range.Column - 1)
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($" & ColumnLetter1 & "1=$" & ColumnLetter2 & "1;$" & ColumnLetter1 & "1<>"""")"
    .FormatConditions(1).Interior.ColorIndex = 3
    End With
End With
A
Aelyth
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 13 septembre 2019
Version d'Excel : 2016 EN

Message par Aelyth » 17 janvier 2020, 11:13

funkyfoenky a écrit :
16 janvier 2020, 15:47
Le for i c'est quand même pas si compliqué mais bon c'est vrai que l'avantage de la mise en forme conditionnelle c'est qu'elle s'applique en temps réel:
With ActiveSheet.ListObjects("Table1")
ColumnLetter1 = Split(Cells(1, .ListColumns("Doc Items").Index + .Range.Column - 1).Address, "$")(1)
ColumnLetter2 = Split(Cells(1, .ListColumns("Check Doc Items").Index + .Range.Column - 1).Address, "$")(1)

    With Columns(.ListColumns("Doc Items").Index + .Range.Column - 1)
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($" & ColumnLetter1 & "1=$" & ColumnLetter2 & "1;$" & ColumnLetter1 & "1<>"""")"
    .FormatConditions(1).Interior.ColorIndex = 3
    End With
End With
J'ai essayé d'insérer le code dans ma macro, mais il n'a aucun effet. Aucune erreur ne me revient, mais les cellules ne semblent pas se mettre en rouge.
Avatar du membre
funkyfoenky
Membre fidèle
Membre fidèle
Messages : 274
Appréciations reçues : 4
Inscrit le : 15 avril 2013
Version d'Excel : Office 365

Message par funkyfoenky » 17 janvier 2020, 17:19

Tu as vérifié dans Gérer les mises en forme conditionelle la formule qui est appliquée? Pour voir si c'est bon
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 1'973
Appréciations reçues : 209
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 17 janvier 2020, 18:28

Bonsoir Aelyth, funkyfoenky, le forum,

Une proposition par macro.....à tester....... :lole:

L' ajout /suppression de colonnes est prise en compte....
test.xlsm
(20.38 Kio) Téléchargé 6 fois
Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message