Colorer toutes les cellules texte d'un tableau.

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
Configuration: Windows / Chrome 77.0.3865.120

2 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. zorgloub Messages postés 36 Statut Membre
       
      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
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. zorgloub Messages postés 36 Statut Membre
       
      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
    2. ThauTheme Messages postés 1564 Statut Membre 160
       
      Ben en gros c'est le premier code que je t'ai envoyé...
      0
    3. zorgloub Messages postés 36 Statut Membre
       
      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
    4. ThauTheme Messages postés 1564 Statut Membre 160
       
      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
    5. zorgloub Messages postés 36 Statut Membre
       
      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