Coloration des cellules selon le contenu des autres

59Bzik Messages postés 13 Statut Membre -  
59Bzik Messages postés 13 Statut Membre -
Bonjour, j'ai un grand tableau: (A1:TF50).
J'ai créé un code VBA pour que:
lorsque une telle cellule d'une ligne donnée est non vide (G30="×" ,par exemple) je veux que toutes les cellules avant et après; à raison de 12, prennent la couleur rouge. Càd:
Si G30="×" Alors G(30+12 * i ) et G(30-12 *i ) prennent la couleur rouge. ( For i = 0 To 18 par exemple). Le problème c'est que pour le code:
- G(30+12 * i ), les cellules se colorent même après mon tableau.
- G(30 - 12 * i ) le code affiche erreur que les valeurs sont négatives avant la cellules G30 dans la même ligne.
Je veux que la boucle s'arrête avant et après de sortir du tableau (A1:TF50)

Please je cherche une solution.
Et si possible même question: Au lieu de colorier les celles de la même ligne je veux colorier les cellules de la même colonne.
Merci d'avance.

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    aA quoi sert le "i" ?

    par exemple i=18
    18*12= 216.... donc après G30:G246
    avant: 30-216= -186 ---> erreur
    0
    1. 59Bzik Messages postés 13 Statut Membre
       
      Oui cest ça
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Pas besoin de macro pour cela, avec une mise en forme conditionnelle (MFC) par formule en A1 :
    =NB.SI(DECALER(A1;-MIN(11;LIGNE(A1)-1);0;MIN(12;LIGNE(A1)-1)+12);"x")>0 
    
    s'applique à $A$1:$TF$50

    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Et pour les colonnes (contenant "y") :
      =NB.SI(DECALER(A1;0;-MIN(11;COLONNE(A1)-1);;MIN(12;COLONNE(A1)-1)+12);"y")>0


      Exemple :
      https://mon-partage.fr/f/IhDstdyS/
      0
    2. 59Bzik Messages postés 13 Statut Membre
       
      Bjr .Patrice. Merci pour ton aide

      Ce que je veux c'est que lorsque par exemple: F15 = "x" alors les cellules qui viennent après F(15+12) puis F( 15+24) puis F(15+36)c'est à dire la F27 et F39 et F51 etc... et celles qui sont avant çàd F(15-12) , (çàd F3) prennent la couleur rouge et non pas toutes les cellules avant et après la F15. Merci bcp
      0
    3. 59Bzik Messages postés 13 Statut Membre
       
      J'ai utilisé le code vba suivant:
      Sub ChangeColor()
      Dim i As Integer
      Dim j As Integer
      Dim k As Integer

      For i=9 To 85
      For j=10 To 189
      For k =1 To 26

      If Cells( i , j )= "×" Then
      Cells(i + 5 * k , j ).interior.IndexColor = 4
      Elseif Cells( i , j )= " " Then
      Cells(i + 5 * k , j ).interior.IndexColor = 0
      End If
      Next k
      Next j
      Next i


      For i=9 To 85
      For j=10 To 189
      For k =1 To 26

      If Cells( i , j )= "×" Then
      Cells(i - 5 * k , j ).interior.IndexColor = 4
      Elseif Cells( i , j )= " " Then
      Cells(i - 5 * k , j ).interior.IndexColor = 0
      End If
      Next k
      Next j
      Next i

      End Sup

      Mais c'est lent pour l'exécution et des cellules qui se colore au delà de mon tableau (C10:KC144)je veux que la boucle s'arrête à la fin du tableau.
      Et en plus lorsque Cells(i - 5 * k , j ) prend une valeur négative le code déclare erreur.
      0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Re,

    Essaies ce code :
    Option Explicit
    Sub ChangeCouleur()
    Const pas As Byte = 12
    Const str As String = "x"
    Dim rng As Range
    Dim cel As Range
    Dim adr As String
    Dim nL As Long
    Dim nC As Long
      Set rng = Me.Range("C10:KC144")
      rng.Interior.ColorIndex = xlNone
      Set cel = rng.Find(str)
      If cel Is Nothing Then Exit Sub
      adr = cel.Address
      Do
        nC = cel.Column - rng.Column + 1
        nL = ((cel.Row - rng.Row) Mod pas) + 1
        Do
          rng.Cells(nL, nC).Interior.ColorIndex = 4
          nL = nL + pas
        Loop While nL <= rng.Rows.Count
        Set cel = rng.FindNext(cel)
      Loop While cel.Address <> adr
    End Sub
    0
    1. 59Bzik Messages postés 13 Statut Membre
       
      merci bcp. J'ai copié-collé votre code et je l'ai adapté à mon fichier et ça marche.
      0