salut !!
alors j'ai fait un petit programme, mais il ne me fait pas ce que je veux !!
Code :
Sub calcule()
Dim i, j As Integer
For i = 7 To 24
For j = 6 To 23
if Cells(i, j).Offset(-1, 0).Interior.ColorIndex = 2 And Cells(i,
j).Offset(-1, 1).Interior.ColorIndex = 2 And Cells(i, j).Offset(0,
1).Interior.ColorIndex = 2 And Cells(i, j).Offset(1, 1).interior.ColorIndex = 2
And Cells(i, j).Offset(1, 0).Interior.ColorIndex = 2 And Cells(i,
j).Offset(1, -1).Interior.ColorIndex = 2 And Cells(i, j).Offset(0,
-1).Interior.ColorIndex = 2 And Cells(i, j).Offset(-1, -1).Interior.ColorIndex =
2
Cells(i, j).Value = 9
else cells(i,j)=13
endif
Next j
Next i
End Sub
il ne m'affiche jamais la valeur 9. quoi que je fasse c'est toujours 13.
j'ai beau regardé ce qu'il n'allait pas, mais la je vois pas, ça doit etre un truc tout bete mais qui m'echappe.
Merci de votre aide.
Bonjour,
Bah... Tu dois être un peu perdu dans ton labyrinthe d'offset !
La macro fonctionne bien... sauf que 2 c'est blanc et incolore ce n'est pas blanc : c'est xlNone.
Si tu écris ligne 3 :
Cells.Interior.ColorIndex = 2
Toutes tes cellules seront blanches et tu n'auras que des 9
Si tu veux tester des cellules incolores il faut écrire :
...ColorIndex = xlNone
Conseil : Cells(i, j).Offset(-1, 0).Interior.ColorIndex = ... c'est la même chose que Cells(i-1, j).Interior.ColorIndex =...
utilise le caractère _ quand tu as des lignes interminables c'est plus lisible...
Code :
Sub calcule()
Dim i, j As Integer
Cells.Interior.ColorIndex = 2
For i = 7 To 24
For j = 6 To 23
If Cells(i - 1, j).Interior.ColorIndex = 2 And _
Cells(i - 1, j + 1).Interior.ColorIndex = 2 And _
Cells(i, j + 1).Interior.ColorIndex = 2 And _
Cells(i + 1, j + 1).Interior.ColorIndex = 2 And _
Cells(i + 1, j).Interior.ColorIndex = 2 And _
Cells(i + 1, j - 1).Interior.ColorIndex = 2 And _
Cells(i, j - 1).Interior.ColorIndex = 2 And _
Cells(i - 1, j - 1).Interior.ColorIndex = 2 Then
Cells(i, j).Value = 9
Else
Cells(i, j) = 13
End If
Next j
Next i
End Sub
c'est déjà mieux...
Ceci dit on se demande bien ce que tu as voulu faire !
A+
Autre conseil : En phase de développement/debugage, écris tes lignes autrement tu condenseras après. Ensuite avec le debugger, tu vois exactement quelle condition n'est pas remplie :
Code :
Cells(i, j) = 13
if Cells(i, j).Offset(-1, 0).Interior.ColorIndex = 2 then
debug.print "ok1"
if Cells(i,j).Offset(-1, 1).Interior.ColorIndex = 2 then
debug.print "ok2"
if Cells(i, j).Offset(0,1).Interior.ColorIndex = 2 then
debug.print "ok3"
if Cells(i, j).Offset(1, 1).interior.ColorIndex = 2 then
debug.print "ok4"
if Cells(i, j).Offset(1, 0).Interior.ColorIndex = 2 then
debug.print "ok5"
if Cells(i, j).Offset(1, -1).Interior.ColorIndex = 2 then
debug.print "ok6"
if Cells(i, j).Offset(0, -1).Interior.ColorIndex = 2 then
debug.print "ok7"
if Cells(i, j).Offset(-1, -1).Interior.ColorIndex = 2 then
Non, regarde mieux. Chaque condifition porte sur une cellule différente.
La syntaxe de galopin est la meilleure, mais en mode débug, ce que je propose est plus pratique. Bien sûr, dès que le problème est résolu, remettre le code à la manière de galopin, bien sûr.
oui en effet ^^ mdr dsl j'avais pas vu ^^ par contre il veux faire quoi avec ça ?? et pourquoi tester comme ça ?? pourquoi pas 1 seul test pour les colonnes ?
Non, non. Il y a avait un End If de trop. Corrigé.
Mais en général, il ne faut pas recopier bêtement le code donné.
Il faut le comprendre et éventuellement l'adapter, bien sûr.
Personnellement, je ne l'ai pas testé. (Je n'ai pas le reste du code, etc).