Couleur d'une cellule d'un tableau
Bonjour a tous, je ne trouve pas la syntaxe exacte pour vérifier la couleur d'une cellule d'un tableau qui contient une seul colonne. J'ai essayé:
If tablo1(i + X, 1) > 0 And tablo1(i + X, 1).Interior.ColorIndex <> 4 Then 's'il y a quelque chose et qu'il n'y a pas de couleur vert
Bonjour CAPUCIN,
Il faudrait joindre un fichier pour t'aider.
Par contre peu importe comment tu as défini ta variable tablo1, elle n'est pas associée à une cellule. Donc tester tablo1(X,Y).Interior.ColorIndex dessus n'a à priori aucun sens.
Je suppose que tu as fait quelquechose du genre
Dim tablo1() as Variant
tablo1 = Range("A1:C25")
EDIT:
Le fait d'écrire "tablo1()" va générer un tableau de valeurs uniquement. Il n'y a plus de lien avec les cellules
Je ne peux pas t'envoyer mon fichier, il est pas mal complexe.
Donc, ce que je veux faire serait de vérifier un élément du tableau, puisqu'on ne parle plus de cellules.
Alors, quel serait la syntaxe pour vérifier si la couleur d'un élément du tableau est vert (code 4)?
tablo1 = Sheets("ASS").Range("I3:I" & Sheets("ASS").Range("A" & 65536).End(xlUp).Row)
Voilà un code qui fonctionne.
Je te laisse l'adapter à ton besoin.
Sub test()
Dim tableau As Range
Set tableau = Range("A1")
'possibilité 1
If tableau.Range("A1").Interior.ColorIndex = 4 Then
Debug.Print "Je suis green"
Else
tableau.Range("A1").Interior.ColorIndex = 4
End If
'possibilité 2
If tableau.Cells(1, 1).Interior.ColorIndex = 4 Then
Debug.Print "Je suis green"
Else
tableau.Cells(1, 1).Interior.ColorIndex = 4
End If
End Sub
ATTENTION, si tu utilises la méthode Cells, la cellule Cells(1,1) correspondra normalement à la cellule I3
set tableau = Sheets("ASS").Range("I3:I" & Sheets("ASS").Range("A" & 65536).End(xlUp).Row)
Je vais utiliser cell. Merci, c'est la syntaxe que je cherchais!
As-tu une idee, j'ai un erreur d'objet requis dans mon instruction?
tablo1 est bien défini ainsi que la variable i
tablo1.Cells(i, 1).Interior.ColorIndex = 4
Tu as bien défini la variable comme un range?
Dim blabla as Range
Set blabla = Range("A1:Z26")
if blabla.Cells(.......)
Alors la, je crois que tu as trouvé le probleme. La variable i est utiliser dans une boucle for next. C'est la boucle for next qui scan toute les positions dans mon tableau. Y a t-il une autre syntaxe qui me permettrait d'utiliser i pour verifier la couleur dans mon tableau?
'la comparaison s'effectue sur une fenetre de 10 mnémoniques (5 au dessus et 5 en dessous) de chaque coté lorsqu'on a trouvé 2 mnémoniques identique
'il faut trouvé 3 mnémoniques identiques dans la fenetre de recherche de chaque tableau pour assumer qu'il sagit bien de la meme mnémonique
'la fenetre de gauche représente la version actuel (feuille ASS) (tableau 1)
Dim plage1 As Integer
Dim plage2 As Integer
Dim nombre As Integer 'nbre de cellules identiques trouvées
tablo1 = Sheets("ASS").Range("I3:I" & Sheets("ASS").Range("A" & 65536).End(xlUp).Row) 'la version actuelle (fenetre de gauche)
tablo2 = Sheets("ASS2").Range("I3:I" & Sheets("ASS2").Range("A" & 65536).End(xlUp).Row) 'la version ancienne (fenetre de droite)
limit1 = UBound(tablo1, 1) 'derniere cellule du tableau
limit2 = UBound(tablo2, 1) 'derniere cellule du tableau
'on cherche les mnémoniques du tableau 1 qui ne sont pas présentes dans le tableau 2:
nombre = 0
For i = 1 To limit1 'pour chacune des mnémonique du tableau 1
nombre = 0
If tablo1(i, 1) > 0 Then 's'il y a une mnémonique
For i2 = 1 To limit2
If tablo1(i, 1) = tablo2(i2, 1) Then 'on a trouver une mnémonique identique quelque part dans tableau 2
nombre = 0
plage1 = 5
plage2 = 5
'on vérifie pour chacune des 5 cellules suivante du tableau 1, si on trouve dans l'une des 5 cellules suivante du tableau 2
For X = 1 To plage1 'pour chacune des 5 cellules suivante du tableau 1
If (i + X) <= limit1 Then 'si on ne déborde pas du tableau
If tablo1(i + X, 1) > 0 Then 's'il y a une mnémonique
For Y = 1 To plage2 'pour chacune des 5 cellules suivantes du tableau 2
If (i2 + Y) <= limit2 Then 'si on ne déborde pas du tableau
If tablo2(i2 + Y, 1) > 0 Then 's'il y a une mnémonique
If tablo1(i + X, 1) = tablo2(i2 + Y, 1) Then
nombre = nombre + 1 'on cumule les cellules identiques trouvées
End If
Else: plage2 = plage2 + 1
End If
End If
Next Y
Else: plage1 = plage1 + 1
End If
End If
If nombre > 2 Then: GoTo 1 'la recherche est suffisante pour confirmer
Next X
'on vérifie pour chacune des 5 cellules précédente du tableau 1, si elle se trouve dans l'une des 5 cellules prédedentes dans le tableau 2
plage1 = 5
plage2 = 5
For X = 1 To plage1 ''pour chacune des 5 cellules précedentes, du tableau 1
If (i - X) > 0 Then 'si on ne déborde pas du tableau
If tablo1(i - X, 1) > 0 Then 's'il y a une mnémonique
For Y = 1 To plage2 'pour chacune des 5 cellules précedente du tableau 2
If (i2 - Y) > 0 Then ''si on ne déborde pas du tableau
If tablo2(i2 - Y, 1) > 0 Then 's'il y a une mnémonique
If tablo1(i - X, 1) = tablo2(i2 - Y, 1) Then
nombre = nombre + 1 'on cumule les cellules identiques trouvées
End If
Else: plage2 = plage2 + 1
End If
End If
Next Y
Else: plage1 = plage1 + 1
End If
End If
If nombre > 2 Then GoTo 1 'la recherche est suffisante pour confirmer
Next X
End If
If nombre > 2 Then 'on suppose que la mnémonique dans le tableau 2 est la bonne, donc on recherche la cellule suivante dans tableau 1
GoTo 1
End If
Next i2 'on vérifie la cellule suivante du tableau 2
tablo1.Cells(i, 1).Interior.ColorIndex = 4 'la mnémonique n'a pas été trouvé dans tableau 2:, donc on colore en vert
'Sheets("ASS2").Rows(i + 2).Insert 'on ajoute une ligne vide au meme endroit dans tableau 2
'Sheets("ASS2").Range("i" & i + 2).Interior.ColorIndex = 4 'on colore également du coté tableau 2
End If
1 Next i 'on vérifie mnémonique suivante en tableau 1
Je viens d'essayer sans variable i et j'ai encore l'erreur "objet requis. Donc, il n'aime pas tablo1? pourtant tablo1 fonctionne bien dans mon sub.
set tablo1 = Sheets("ASS").Range("I3:I" & Sheets("ASS").Range("A" & 65536).End(xlUp).Row)
tablo1.Cells(2, 1).Interior.ColorIndex = 4
'la mnémonique n'a pas été trouvé dans tableau 2:, donc on colore en vert