Colorer toutes les cellules texte d'un tableau. [Fermé]

Signaler
Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019
-
Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019
-
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
Configuration: Windows / Chrome 77.0.3865.120

2 réponses

Messages postés
1404
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 novembre 2020
144
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

Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019

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 ???)
Messages postés
1404
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 novembre 2020
144
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

Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019

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
Messages postés
1404
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 novembre 2020
144
Ben en gros c'est le premier code que je t'ai envoyé...
Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019

Je m'en doutais ;)
Ce premier code ne se limite cependant pas à la zone i10 à p14.
Il agit malheureusement sur les autres cellules aussi.
Messages postés
1404
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 novembre 2020
144
Re,

Il te suffit de définir la plage PL comme ça :
Set PL = O.Range("I10:P14")

J'ai commenté les codes pour te permettre de les modifier mais je me rends compte que tu ne lis même pas...
Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019

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