Comparaison de couleur de cellules

Comparaison de couleur de cellules - VB/VBA/VBS - Programmation

Marsh Posté le 14-06-2012 à 08:51:17    

Bonjour a tous,
 
je bosse sur un petit projet et j'ai du mal a faire fonctionner une macro, tout est dans le titre je voudrais comparer la couleur d'une cellule de référence et d'une autre et selon si c'est différent créer une forme rectangulaire transparente au dessus (je m’entraîne un peu)  
alors voila j'ai donc ca:
 
Sub Solution()
Dim i As Integer
Dim j As Integer
 
For i = 9 To 100
 
    If Worksheets("Sheet1" ).Cells(A, i).Interior.ColorIndex = Worksheets("Sheet1" ).Range("A12" ).Interior.ColorIndex Then pour l'instant c'est la ligne qui me pose probleme mais je suppose que le probleme se representera deux lignes en dessous...
     
        For j = 9 To 248
         
            If Cells(i, j).Interior.ColorIndex <> Range("A12" ).Interior.ColorIndex Then
                With ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 100, 100, 60, 30)
                With .Fill
                .ForeColor.RGB = RGB(128, 0, 0)
                .BackColor.RGB = RGB(170, 170, 170)
                .Transparency = 0.5
                End With
                End With
                With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Orientation = xlHorizontal
                End With
            End If
        Next j
    End If
Next i
End Sub
 
Merci de votre avis eclaire

Reply

Marsh Posté le 14-06-2012 à 08:51:17   

Reply

Marsh Posté le 14-06-2012 à 10:14:30    

Bonjour Tirets,
 
Dans Cells(A,i), A ne représente rien.
Je suppose que tu veux faire Range("A"&i) ?
 
Tu as bien aussi une feuille nommée "sheet1" ?

Reply

Marsh Posté le 14-06-2012 à 10:32:53    

Bonjour Takama,
 
merci de ta réponse! Alors j'ai toujours une erreur mais le format Cells([indice colonne],[indice ligne]) existe bel et bien mais je pense que tu dois avoir raison je dois mettre des "" sur le A comme cela: Cells("A", i) le probleme c'est qu'il reste un problème dans le debogueur
 
l'utilisation de .Interior.ColorIndex est appropriée vous pensez?

Reply

Marsh Posté le 14-06-2012 à 11:04:33    

Comme tu indiques, la propriété Cells a besoin d'un indice.
A ou "A" n'est pas un indice. Un indice doit être numérique.
Il faut donc utiliser :
 
If Worksheets("Sheet1" ).Range("A"&i).Interior.ColorIndex = Worksheets("Sheet1" ).Range("A12" ).Interior.ColorIndex Then
 
En étant sûr qu'une feuille porte bien le nom "sheet1".


Message édité par Takama13 le 14-06-2012 à 11:04:52
Reply

Marsh Posté le 14-06-2012 à 11:19:02    

Bon alors en fait la réponse c'est que ce n'est pas Cells([indice colonne],[indice ligne]) mais bien Cells([indice ligne]),[indice colonne])
Donc ce n'est pas Cells("A", i) mais Cells(i,"A" ).
La macro est longue a exécuter... Si qqun a un moyen de biaiser je suis preneur!

Reply

Marsh Posté le 14-06-2012 à 12:13:25    

Autre question sur ma macro: With ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 100, 100, 60, 30)  
c'est en reference absolu puisque le point de reference est le coin en haut a gauche quelqu'un sait il si c'est possible de se positionner par rapport au coin en haut a gauche de la Cellule en cours d'analyse?

Reply

Marsh Posté le 15-06-2012 à 09:01:59    

Bon alors pour ceux qui seraient intéressés, le code est celui ci:
 
Sub Solution()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim W As Single
i = 0
j = 0
k = 0
 
For i = 12 To 20 'analyse les lignes de 1 a 20
If Worksheets("Gantt" ).Cells(i, "A" ).Interior.ColorIndex = Worksheets("Gantt" ).Range("A5" ).Interior.ColorIndex Then
'vérifie la concordance de couleur entre les 2 cellules      
    For j = 9 To 248 'si concordance il y a il analyse les 239 colonnes de cette ligne
         
        If Cells(j, i).Interior.ColorIndex <> Range("A12" ).Interior.ColorIndex Then 'si la couleur de la cellule est differente de celle de reference alors
            Do While Cells(j + 1, i).Interior.ColorIndex = Cells(j, i).Interior.ColorIndex
            k = k + 1
            Loop 'on compte le nombre de cellule différentes a la suite
            W = Cells(j, i).Width * k
            With ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Cells(j, i).Left, Cells(j, i).Offset(1, 0).Top, W, Cells(j, i).Height)
            With .Fill
            .ForeColor.RGB = RGB(128, 128, 0)
            .Transparency = 0.5
            End With
            With .Line.DashStyle = msoLineDashDot
            End With
            End With
            On dessine ensuite dans la ligne du dessous de la cellule a la couleur différente de la couleur de    référence un objet rectangle a bord ronds
            k = 0
        End If
    Next j
End If
Next i
End Sub
 
En espérant que ça pourra aider certain d'entre vous, je teste en ce moment mon code... qui ne marche pas! gros problème avec ce fichu .Interior.ColorIndex, je sais pas pourquoi il plante


Message édité par Tiret2 le 15-06-2012 à 11:47:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed