Colorer toutes les cellules texte d'un tableau.
zorgloub
Messages postés
36
Statut
Membre
-
zorgloub Messages postés 36 Statut Membre -
zorgloub Messages postés 36 Statut Membre -
Bonjour,
Imaginons un tableau allant de i10 à P14.
En VBA, quel serait le code pour colorer les cellules contenant du texte quelconque en jaune sur fond rouge.
Merci
Excel2010
Imaginons un tableau allant de i10 à P14.
En VBA, quel serait le code pour colorer les cellules contenant du texte quelconque en jaune sur fond rouge.
Merci
Excel2010
Configuration: Windows / Chrome 77.0.3865.120
2 réponses
-
Bonjour Zorgloub, bonjour le forum,
Peut-être comme ça :Sub Macro1() Dim O As Worksheet 'déclare la variable O (Onglet) Dim PL As Range 'déclare la variable PL (PLage) Dim C As Range 'déclare la variable C (Cellule) Dim PLT As Range 'déclare la variable PLT (PLage Texte) Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas) Set PL = O.UsedRange 'définit la plage PL For Each C In PL 'boucle sur toutes les cellules C de la plage PL If Not IsNumeric(C.Value) = True Then 'condition 1 : si la cellule n'est pas numérique If PLT Is Nothing Then 'condition 2 : si PLT n'est pas définie Set PLT = C 'définit PLT (la cellule C) Else 'sinon Set PLT = Application.Union(PLT, C) 'définit PLT (l'union de PLT et de la cellule C) End If 'fin de la condition 2 End If 'fin de la condition 1 Next C 'prochaione cellule de la boucle PLT.Interior.ColorIndex = 3 'couleur du fond PLT.Font.ColorIndex = 6 'coleur de l'encre End Sub
-
Bonsoir ThauTheme,
Merci. Je viens de tester
1) Comment limiter l'action à la zone i10 à p14
2) Ne peut-on y arriver avec un code plus concis du genre (issu d'un code que je ne comprends pas totalement)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("I10:P14")) Is Nothing Then
...
If Not IsNumeric(Cells(Target.Row, ...)) Then Cells(Target.Row, ...).Interior.ColorIndex = ...
(Pas possible de joindre un fichier sur ce forum ???)
-
-
Re,
Pour joindre un fichier il te faut utiliser un site hébergeur de fichiers du style https://www.cjoint.com/
Je n'avais pas vu que tu demandais de limiter à une plage... L'événement Change sur un onglet est une autre approche car il n'agit que sur la cellule modifiée, je coderais comme ça :Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("I10:P14")) Is Nothing Then If Not IsNumeric(Target.Value) Then Target.Interior.ColorIndex = 3 Target.Font.ColorIndex = 6 Else Target.Interior.ColorIndex = xlNone Target.Font.ColorIndex = xlAutomatic End If End If End Sub
-
Bonjour ThauTheme,
Merci beaucoup pour cette solution qui fonctionne parfaitement lors de l'encodage de la cellule. (évenement _change)
Une question complémentaire, si vous le voulez bien:
Quel serait la modification à apporter à ce code pour faire ce même codage couleur mais sur un fichier déjà encodé.
Bref colorer en jaune sur fond rouge les cellules Texte mais en ayant une macro non liée à un événement du type "Change" mais en cliquant sur un bouton associé à cette nouvelle macro qui "scannerait" tout le fichier d'un coup.
J'imagine que ça ressemblerait un peu à votre premier code mais en plus condensé avec cette notion de Target que je n'ai pas encore bien comprise.
Merci -
-
-
-
Hi ThauTheme,
Sorry, j'avais bien les Comments, très pratiques, mais j'avais pas capté à quoi pouvait correspondre précisément [O.UsedRange].
Je pensais au Range utilisé, soit le tableau en question et pas à la page que je voyais plutôt comme [usedWorksheet] ou un truc du genre.
Maintenant, [ O.Range("I10:P14")] est certes très clair.
Merci encore.
Cordialement
-----------------------------------
RESOLU
------------------------------------
-