Colorer toutes les cellules texte d'un tableau.

Fermé
zorgloub Messages postés 29 Date d'inscription jeudi 9 avril 2009 Statut Membre Dernière intervention 30 janvier 2024 - 30 oct. 2019 à 16:59
zorgloub Messages postés 29 Date d'inscription jeudi 9 avril 2009 Statut Membre Dernière intervention 30 janvier 2024 - 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
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
30 oct. 2019 à 17:25
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

0
zorgloub Messages postés 29 Date d'inscription jeudi 9 avril 2009 Statut Membre Dernière intervention 30 janvier 2024
Modifié le 30 oct. 2019 à 17:58
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 ???)
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
31 oct. 2019 à 08:58
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

0
zorgloub Messages postés 29 Date d'inscription jeudi 9 avril 2009 Statut Membre Dernière intervention 30 janvier 2024
31 oct. 2019 à 11:22
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
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
31 oct. 2019 à 12:01
Ben en gros c'est le premier code que je t'ai envoyé...
0
zorgloub Messages postés 29 Date d'inscription jeudi 9 avril 2009 Statut Membre Dernière intervention 30 janvier 2024
31 oct. 2019 à 12:16
Je m'en doutais ;)
Ce premier code ne se limite cependant pas à la zone i10 à p14.
Il agit malheureusement sur les autres cellules aussi.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
31 oct. 2019 à 13:31
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...
0
zorgloub Messages postés 29 Date d'inscription jeudi 9 avril 2009 Statut Membre Dernière intervention 30 janvier 2024
1 nov. 2019 à 16:06
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
------------------------------------
0