Coloration des cellules selon le contenu des autres

Fermé
59Bzik Messages postés 13 Date d'inscription vendredi 17 août 2018 Statut Membre Dernière intervention 22 août 2018 - 21 août 2018 à 10:30
59Bzik Messages postés 13 Date d'inscription vendredi 17 août 2018 Statut Membre Dernière intervention 22 août 2018 - 22 août 2018 à 18:50
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.



A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 août 2018 à 11:30
Bonjour

aA quoi sert le "i" ?

par exemple i=18
18*12= 216.... donc après G30:G246
avant: 30-216= -186 ---> erreur
0
59Bzik Messages postés 13 Date d'inscription vendredi 17 août 2018 Statut Membre Dernière intervention 22 août 2018
21 août 2018 à 16:27
Oui cest ça
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 21 août 2018 à 11:43
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 21 août 2018 à 11:55
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
59Bzik Messages postés 13 Date d'inscription vendredi 17 août 2018 Statut Membre Dernière intervention 22 août 2018
21 août 2018 à 17:18
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
59Bzik Messages postés 13 Date d'inscription vendredi 17 août 2018 Statut Membre Dernière intervention 22 août 2018
21 août 2018 à 19:56
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
21 août 2018 à 22:06
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
59Bzik Messages postés 13 Date d'inscription vendredi 17 août 2018 Statut Membre Dernière intervention 22 août 2018
22 août 2018 à 18:50
merci bcp. J'ai copié-collé votre code et je l'ai adapté à mon fichier et ça marche.
0