Colorer toutes les cellules texte d'un tableau.

Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019
- - Dernière réponse : zorgloub
Messages postés
22
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
1 novembre 2019
- 1 nov. 2019 à 16:06
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
Afficher la suite 

2 réponses

Messages postés
4604
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 novembre 2019
118
0
Merci
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

zorgloub
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 ???)
Commenter la réponse de ThauTheme
Messages postés
4604
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 novembre 2019
118
0
Merci
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

zorgloub
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
ThauTheme
Messages postés
4604
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 novembre 2019
118 -
Ben en gros c'est le premier code que je t'ai envoyé...
zorgloub
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.
ThauTheme
Messages postés
4604
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 novembre 2019
118 -
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...
zorgloub
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
------------------------------------
Commenter la réponse de ThauTheme