Problème avec code VBA pour mise en forme conditionelle

newpixi

XLDnaute Junior
Bonjour à tous,

plus ou moins débutant sous VBA, je dois réaliser une mise en forme conditionnelle, pour une plage de cellule.
Je travaille sous excel 2007 mais ce fichier sera utilisé par des personnes utilisant excel 2000 ou 2003...

Le code que j'ai réalisé pour mettre en gras et en rouge les X plus grandes valeurs (X etant saisie dans la cellule E1) de la plage A1 => D4
IL Calcule aussi la somme de ces plus grandes valeurs et place le résultat dans la cellule F1

Mon problème se situe apparemment au niveau de la recherche de la valeur max dans la plage de recherche...

Si quelqu'un a une idée...:confused:

Dim i As Integer
Dim ValMax As Long
Dim TotalMax As Long

'Selection de la plage de recherche
Range("A1:D4").Select

'Enleve tout les valeur en gras
Selection.Font.Bold = False
Selection.Font.Color = vbBlack
'De 1 à la valeur saisie dans E1
'=> le nombre de valeurs cherchées
For i = 1 To ActiveSheet.Range("E1").Value
'Récupération des X plus grande valeur
ValMax = Application.WorksheetFunction.Large(Selection, i)
'Recherche de la valeur dans la meme plage de recherche
With Selection.Find(ValMax, , xlValues).Font
'On met en gras
.Bold = True
'On colore en rouge
.Color = vbRed
End With
TotalMax = TotalMax + ValMax
Next
'On place le total en F1
ActiveSheet.Range("F1").Value = TotalMax
Call ActiveSheet.Range("F1").Select
 

pierrejean

XLDnaute Barbatruc
Re : Problème avec code VBA pour mise en forme conditionelle

bonjour newpixi

Une solution a base de tableau

Code:
Sub test()
Dim tablo()
ReDim tablo(1, 0)
For Each cel In Range("A1:D4")
 tablo(0, UBound(tablo, 2)) = cel.Value
 tablo(1, UBound(tablo, 2)) = cel.Address
 ReDim Preserve tablo(1, UBound(tablo, 2) + 1)
Next cel
For n = LBound(tablo, 2) To UBound(tablo, 2)-1
  For m = LBound(tablo, 2) To UBound(tablo, 2)-1
    If tablo(0, n) > tablo(0, m) Then
      temp1 = tablo(0, n)
      temp2 = tablo(1, n)
      tablo(0, n) = tablo(0, m)
      tablo(1, n) = tablo(1, m)
      tablo(0, m) = temp1
      tablo(1, m) = temp2
    End If
  Next m
Next n
For n = LBound(tablo, 2) To Range("E1")-1
   Range(tablo(1, n)).Font.Bold = True
   Range(tablo(1, n)).Font.Color = vbRed
   tot = tot + tablo(0, n)
Next n
Range("F1") = tot
End Sub
 
Dernière édition:

newpixi

XLDnaute Junior
Re : Problème avec code VBA pour mise en forme conditionelle

Bonjour Pierrejean

Merci de t'intéresser à mon problème.
C'est vrai je n'avais pas du tout pensé à utiliser ça.
je l'ai adapté à mon cas et c'est nickel.

Merci beaucoup de ton aide.

Bonne journée!
 

Discussions similaires

Statistiques des forums

Discussions
312 490
Messages
2 088 877
Membres
103 981
dernier inscrit
vinsalcatraz