Répétition d'une macro par lignes
Bonjour à tous,
je ne suis pas un adepte de la programmation en VB, mais avec mes notions d'algorithmique je me suis lancé dans la création de macros pour optimiser et automatiser mes feuilles de calculs.
Ici, j'ai un tableau avec trois colonnes représentant des températures. je souhaite mettre en vert la température maxi et en rouge la température mini de chacune des lignes. J'ai donc utilisé la mise en forme conditionnelle.
Voici en l'état ma macro:
Sub Mise_en_forme_conditionnelle()
Dim tc As Integer 'variable ligne température
Range("B20:D919").Select 'plage de données invariables
Selection.ClearFormats
For tc = 20 To 919 'Intervalle d'étude
Sheets("Comp_fix_TC").Range(Cells(tc, 2), Cells(tc, 4)).Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=Cells(tc, 2)=MAX(Range(Cells(tc, 2), Cells(tc, 4)))"
Selection.FormatConditions(1).Interior.ColorIndex = 10
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=Cells(tc ,2)=MIN(Range(Cells(tc, 2), Cells(tc, 4)))"
Selection.FormatConditions(2).Interior.ColorIndex = 3
Next
End SubJ'utilise une variable pour ma boucle For représentant mon intervalle d'étude.
La ou ça bloque (et par le même temps où moi aussi je bloque! ^^ ) c'est la conversion de ma formule de max et min pour que la variable soit prise en compte:
pour le maxi j'avais écrit
=B20=MAX($B$20:$D$20) ce qui fonctionnait mais la conversion vers une cellule variable ne fonctionne pas.
Je me demandais s'il n'était pas possible de dire dans ma formule d'utiliser la selection "Sheets("Comp_fix_TC").Range(Cells(tc, 2), Cells(tc, 4)).Select" que j'ai précédemment effectué? Du genre =MAX(Selection) ?
J'espère avoir été assez clair dans mon énoncé de problème.
Merci pour votre aide.
Florian
Bonjour,
A tester
Sub Mise_en_forme_conditionnelle()
Dim tc As Integer 'variable ligne température
Range("B20:D919").Select 'plage de données invariables
Selection.ClearFormats
For tc = 20 To 919 'Intervalle d'étude
Sheets("Comp_fix_TC").Range(Cells(tc, 2), Cells(tc, 4)).Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=" & Cells(tc, 2).Address(0, 0) & "=MAX(" & Range(Cells(tc, 2), Cells(tc, 4)).Address & ")"
Selection.FormatConditions(1).Interior.ColorIndex = 10
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=" & Cells(tc, 2).Address(0, 0) & "=MIN(" & Range(Cells(tc, 2), Cells(tc, 4)).Address & ")"
Selection.FormatConditions(2).Interior.ColorIndex = 3
Next
End SubA+
Merci Frangy, la macro marche à présent.
Juste pour bien comprendre, l'ajout de "address" permet de renvoyer à la sélection précédemment faite "Sheets("Comp_fix_TC").Range(Cells(tc, 2), Cells(tc, 4)).Select" ?
C’est beaucoup plus simple.
ADDRESS est une propriété de l’objet RANGE qui renvoie une valeur de type String qui représente la référence de la plage.
Exemple pour une référence relative :
Range("B20").Address(0,0) renvoie B20
Et pour renvoyer la référence absolue
Range("B20").Address renvoie $B$20.
Si, tu veux traduire la formule
=B20=MAX($B$20:$D$20)
Tu dois écrire
"=" & Range("B20").Address(0,0) & "=MAX(" & Range("B20:D20").Address & ")"
A+
D'accord!
Merci pour tes explications!