XL 2010 Colorier les n plus grandes valeurs d'une plage EXCEL

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

aurelio.ewane

XLDnaute Occasionnel
Bonjour les excellistes
je suis confronté à un petit soucis
jai une plage qui va de B2:Y201
je voudrais donc pour chacune des lignes de cette plage colorier les cellules qui contiennent les n valeurs les plus grandes valeurs

n dois etre mis dans la cellule AB1 par exemple

mais le rééel soucis cest que lorsque la dans une ligne il ya 02 valeurs identiques, je n'arrive pas à les colorier toutes
je joins mon fichier

cordialment
 

Pièces jointes

Bonjour,

Y a-t-il vraiment Grande.Valeur sous 2010 ?

Microsoft semble dire que ça n'existe qu'à partir de 2016.
Screenshot_20250724_114425_Chrome.jpg
 
Bonjour à toutes & à tous, bonjour @job75, @JHA, @aurelio.ewane

L’inconvénient de GRANDE.VALEUR c'est que quand il y a des doublons (comme c'est le cas ici) ce n'est pas vraiment la nième valeur qui est renvoyée (mais c'est peut-être ce que désire @aurelio.ewane )
Pour palier le problème j'ai cette proposition :

VB:
Sub ValN()
   
     Dim WSh As Worksheet, Dc As Object, Rg As Range, CellRang As Range
   
     Set WSh = Feuil1
     Set CellRang = WSh.[AB1]
     Set Rg = WSh.[A1].CurrentRegion
     Set Rg = Rg.Offset(1, 1).Resize(Rg.Rows.Count - 1, Rg.Columns.Count - 1)
   
     tb = Rg
     Set Dc = CreateObject("Scripting.Dictionary")
     For i = 1 To UBound(tb, 1): For j = 1 To UBound(tb, 2): Dc(tb(i, j)) = CDbl("0" & tb(i, j)): Next j: Next i
     tb = Dc.items
     Call tri(tb, 0, UBound(tb))
     CellRang.Offset(0, 2).Value = "(>=" & tb(CellRang) & ")"
   
     Rg.FormatConditions.Delete
     With Rg.FormatConditions.Add(Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="=" & tb(CellRang))
          .Font.Bold = True
          .Interior.Color = 13408767
     End With
End Sub

Sub tri(a, gauc, droi)          ' Quick sort de J. Boisgontier adapté
     ref = a((gauc + droi) \ 2)
     g = gauc: d = droi
     Do
          Do While a(g) > ref: g = g + 1: Loop
          Do While ref > a(d): d = d - 1: Loop
          If g <= d Then
               Temp = a(g): a(g) = a(d): a(d) = Temp
          g = g + 1: d = d - 1
          End If
     Loop While g <= d
     If g < droi Then Call tri(a, g, droi)
     If gauc < d Then Call tri(a, gauc, d)
End Sub

L'événement Worksheet_Change de la Feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Address = Me.[AB1].Address Then ValN
End Sub

Voir la pièce jointe
À bientôt
 

Pièces jointes

Dernière édition:
Sur ma version 2007 ça existe déjà
OK. Merci 👍



L’inconvénient de GRANDE.VALEUR c'est que quand il y a des doublons
Oui. C'est aussi ce que j'avais signalé dans un autre fil de discussion il y a quelques jours/semaines. Et c'est pour ça que je cherchais une formule donnant la liste sans doublon des valeurs d'un tableau.
 
Bonjour à toutes & à tous, bonjour @job75, @JHA, @aurelio.ewane

L’inconvénient de GRANDE.VALEUR c'est que quand il y a des doublons (comme c'est le cas ici) ce n'est pas vraiment la nième valeur qui est renvoyée (mais c'est peut-être ce que désire @aurelio.ewane )
Pour palier le problème j'ai cette proposition :

VB:
Sub ValN()
  
     Dim WSh As Worksheet, Dc As Object, Rg As Range, CellRang As Range
  
     Set WSh = Feuil1
     Set CellRang = WSh.[AB1]
     Set Rg = WSh.[A1].CurrentRegion
     Set Rg = Rg.Offset(1, 1).Resize(Rg.Rows.Count - 1, Rg.Columns.Count - 1)
  
     tb = Rg
     Set Dc = CreateObject("Scripting.Dictionary")
     For i = 1 To UBound(tb, 1): For j = 1 To UBound(tb, 2): Dc(tb(i, j)) = CDbl("0" & tb(i, j)): Next j: Next i
     tb = Dc.items
     Call tri(tb, 0, UBound(tb))
     CellRang.Offset(0, 2).Value = "(>=" & tb(CellRang) & ")"
  
     Rg.FormatConditions.Delete
     With Rg.FormatConditions.Add(Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="=" & tb(CellRang))
          .Font.Bold = True
          .Interior.Color = 13408767
     End With
End Sub

Sub tri(a, gauc, droi)          ' Quick sort de J. Boisgontier adapté
     ref = a((gauc + droi) \ 2)
     g = gauc: d = droi
     Do
          Do While a(g) > ref: g = g + 1: Loop
          Do While ref > a(d): d = d - 1: Loop
          If g <= d Then
               Temp = a(g): a(g) = a(d): a(d) = Temp
          g = g + 1: d = d - 1
          End If
     Loop While g <= d
     If g < droi Then Call tri(a, g, droi)
     If gauc < d Then Call tri(a, gauc, d)
End Sub

L'événement Worksheet_Change de la Feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Address = Me.[AB1].Address Then ValN
End Sub

Voir la pièce jointe
À bientôt
Ouii cest vraiment interessant Merci

mais le probleme ce'st que vous avez limité la recherche au nombre de valeurs superieure à 100
moi ce que je veux cest ca colorie toutes les n plus grandes valeurs de chaque ligne.
le nombre de valeur peut etre entré comme un parametre ou mis dans une cellule peut importe
 
Ouii cest vraiment interessant Merci

mais le probleme ce'st que vous avez limité la recherche au nombre de valeurs superieure à 100
moi ce que je veux cest ca colorie toutes les n plus grandes valeurs de chaque ligne.
le nombre de valeur peut etre entré comme un parametre ou mis dans une cellule peut importe
Non ce n'est pas limité à 100, mais je n'avais pas compris que c'était par lignes,
J'ai considéré l'ensemble du tableau ...
Le nombre est saisi dans la cellule en bleu foncé (AB1).
Je déjeune et je modifie pour que se soit par ligne.
À bientôt
 
Merci mais jai du mal avec ces trois expressions
Rang = Sh1.[AB1]
Set Rg = Sh1.[A1].CurrentRegion

Set Dc = CreateObject("Scripting.Dictionary")

pourquoi mettre Set Rg = Sh1.[A1].CurrentRegion et non directement la plage qui est B2:Y201

et pourquoi ensuite revenir faire ceci Set Rg = Rg.Offset(1, 1).Resize(Rg.Rows.Count - 1, Rg.Columns.Count - 1)

parceque quand jadapte cela à mon fichier ca ne marche pas
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour