Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 à 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:
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…