Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
Donc si je comprend bien, tu veux que lors du balayage des cellules :
-> si la valeur contenu dans la cellule est comprise entre 0 et 5 => rouge
-> sinon (valeur pas incluse entre 0 et 5), si la cellule était au préalable en rouge, la mettre en vert clair?
Si oui, voici ci-dessous le code à mettre à la place du précédent :
Code:
Sub Mise_En_Forme()
Dim k As Long, y As Byte
Application.ScreenUpdating = False
For k = 4 To 36
If k = 13 Then k = 16
If k = 25 Then k = 28
For y = 7 To 26
If Cells(k, y) > 0 And Cells(k, y) < 5 Then
With Cells(k, y)
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
End With
[COLOR="Blue"] Else : If Cells(k, y).Interior.ColorIndex = 3 Then
With Cells(k, y)
.Interior.ColorIndex = 43
.Font.ColorIndex = 2
End With[/COLOR]
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Ok, alors réintègre une boucle en début de macro avec la solution de Excel-lent, mais cette fois sans test sur la valeur, voire même une selection de toute la plage et application de ta couleur verte sur cette plage et sans boucle.
Tu as un très bon outil à disposition, c'est l'enregistreur de macro par Outil/Macro/Nouvelle macro...
Tu mets en route, tu fais ta manip.selection de la zone, mise en couleur vert ici et tu arrêtes l'enregistrement. Par Alt F11 tu vas pouvoir en voir le code.
Te reste à selectionner la ou les lignes qui t'intéressent et à les inclures en début de ton propre code. Quelques essais sur une copie de ton fichier et c'est bon.
Tu as un très bon outil à disposition, c'est l'enregistreur de macro par Outil/Macro/Nouvelle macro...
Tu mets en route, tu fais ta manip.selection de la zone, mise en couleur vert ici et tu arrêtes l'enregistrement. Par Alt F11 tu vas pouvoir en voir le code.
Te reste à selectionner la ou les lignes qui t'intéressent et à les inclures en début de ton propre code. Quelques essais sur une copie de ton fichier et c'est bon.
ben je sais comment il faut faire pour modifier une macro et l'enregistré
le bléme c'est que je sais pas ce que je doit ecrire exactement et ou dans la macro??
Il ne s'agit pas ici, du moins dans un premier temps, de modifier une macro et de l'enregistrer.
Il s'agit de l'écrire mais avec l'aide de l'enregistreur. Ceci fait tu auras dans le corps du code 2 ou 3 lignes qui vont t'intéresser. Ce sont ces lignes que tu recopieras en début de ta macro principale.
Il ne s'agit pas ici, du moins dans un premier temps, de modifier une macro et de l'enregistrer.
Il s'agit de l'écrire mais avec l'aide de l'enregistreur. Ceci fait tu auras dans le corps du code 2 ou 3 lignes qui vont t'intéresser. Ce sont ces lignes que tu recopieras en début de ta macro principale.
ben oui Jean-Pierre je voi bien que toi tu est fort en macro et ça te parrais simple mais moi je m'y connais pas mal en excel mais ça c'est des codes que je connais pas !
Donc si je comprend bien, tu veux que lors du balayage des cellules :
-> si la valeur contenu dans la cellule est comprise entre 0 et 5 => rouge
-> sinon (valeur pas incluse entre 0 et 5), si la cellule était au préalable en rouge, la mettre en vert clair?
Si oui, voici ci-dessous le code à mettre à la place du précédent :
Code:
Sub Mise_En_Forme()
Dim k As Long, y As Byte
Application.ScreenUpdating = False
For k = 4 To 36
If k = 13 Then k = 16
If k = 25 Then k = 28
For y = 7 To 26
If Cells(k, y) > 0 And Cells(k, y) < 5 Then
With Cells(k, y)
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
End With
[COLOR="Blue"] [COLOR="Red"] Else : If Cells(k, y).Interior.ColorIndex = 3 Then[/COLOR] With Cells(k, y)
.Interior.ColorIndex = 43
.Font.ColorIndex = 2
End With[/COLOR]
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Cette fois-ci, j'ai pris le temps d'ouvrir ton fichier, y mettre ma macro et la tester!
Voici ci-dessous mon code corrigé et un peu raccourci.
Code:
Sub Test()
Dim k As Long, y As Byte
Application.ScreenUpdating = False
For k = 4 To 36
If k = 13 Then k = 16
If k = 25 Then k = 28
For y = 7 To 26
If Cells(k, y) > 0 And Cells(k, y) < 5 Then
With Cells(k, y)
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
Else
If .Interior.ColorIndex = 3 Then
.Interior.ColorIndex = 43
.Font.ColorIndex = 2
End With
End If
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Il ne s'agit pas d'être fort, encore que cela aide, mais d'utiliser les outils à disposition.
Sur le code de Pierre Olivier, voilà ce que j'ai fait :
1) Outils/Macro/Nouvelle macro
2) Selection des plages à la souris, la première et ensuite avec la touche Ctrl la deuxième et pareil pour la troisième
3) Application de la couleur verte avec le pot de peinture de la barre à outils Mise en forme, choix de Automatique pour la Police de caractère.
4) Arrêt de l'enregistrement, soit par le petit carré noir de la barre d'outils qui s'était ouverte au début, soit par Outils/Macro/Arrêter l'enregistrement.
Pour information, tu n'as rien dis concernant les cellules vertes, donc la macro ne les traite pas.
C'est à dire :
-> qu'au début de l'exécution de la macro, une cellule rouge qui correspond plus aux critéres, elle deviendra verte, montrant ainsi que la fois précédente elle répondait aux conditions.
Mais également :
-> qu'au début de l'exécution de la macro, une cellule verte (donc qui correspondait aux critères la fois précédente) restera verte.
Donc il suffit que la cellule est répondu un jour aux critères pour être verte.
C'est ce que tu veux?
Au sujet de l'enregistreur de macro, au début, tu auras du mal à savoir quelles lignes sont inutiles, mais tu verras, ça vient vite avec un peu d'implication et beaucoup de test. Mais sinon, ne panique pas, si tu laisses les lignes inutiles, dans 99% des cas ta macro fonctionnera quand même très bien!
Un peu, beaucoup à la bourre 😱. Mais pour illustrer les propos de jeanpierre voici la macro sans le .select qui n'est pas utile.
Code:
Sub Mise_En_Forme()
Dim k As Long, y As Byte
Application.ScreenUpdating = False
With Range("G4:Z12,G16:Z24,G28:Z36")
.Interior.ColorIndex = 35
.Font.ColorIndex = 0
End With
For k = 4 To 36
If k = 13 Then k = 16
If k = 25 Then k = 28
For y = 7 To 26
If Cells(k, y) > 0 And Cells(k, y) < 5 Then
With Cells(k, y)
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
End With
End If
Next
Next
Application.ScreenUpdating = True
End Sub
- 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