FORUM Tom's Hardware » Programmation » VB / VBA / VBS » probleme VBA boucle IF
 

probleme VBA boucle IF

Il y a 432 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : probleme VBA boucle IF
 
Plus d'informations

salut !!
alors j'ai fait un petit programme, mais il ne me fait pas ce que je veux !!
 

Code :
  1. Sub calcule()
  2. Dim i, j As Integer
  3. For i = 7 To 24
  4. For j = 6 To 23
  5. if Cells(i, j).Offset(-1, 0).Interior.ColorIndex = 2 And Cells(i,
  6. j).Offset(-1, 1).Interior.ColorIndex = 2 And Cells(i, j).Offset(0,
  7. 1).Interior.ColorIndex = 2 And Cells(i, j).Offset(1, 1).interior.ColorIndex = 2
  8. And Cells(i, j).Offset(1, 0).Interior.ColorIndex = 2 And Cells(i,
  9. j).Offset(1, -1).Interior.ColorIndex = 2 And Cells(i, j).Offset(0,
  10. -1).Interior.ColorIndex = 2 And Cells(i, j).Offset(-1, -1).Interior.ColorIndex =
  11. 2
  12. Cells(i, j).Value = 9
  13. else cells(i,j)=13
  14. endif
  15. Next j
  16. Next i
  17. 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.

Plus d'informations

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 :
  1. Sub calcule()
  2. Dim i, j As Integer
  3. Cells.Interior.ColorIndex = 2
  4. For i = 7 To 24
  5.   For j = 6 To 23
  6.     If Cells(i - 1, j).Interior.ColorIndex = 2 And _
  7.         Cells(i - 1, j + 1).Interior.ColorIndex = 2 And _
  8.         Cells(i, j + 1).Interior.ColorIndex = 2 And _
  9.         Cells(i + 1, j + 1).Interior.ColorIndex = 2 And _
  10.         Cells(i + 1, j).Interior.ColorIndex = 2 And _
  11.         Cells(i + 1, j - 1).Interior.ColorIndex = 2 And _
  12.         Cells(i, j - 1).Interior.ColorIndex = 2 And _
  13.         Cells(i - 1, j - 1).Interior.ColorIndex = 2 Then
  14.       Cells(i, j).Value = 9
  15.     Else
  16.       Cells(i, j) = 13
  17.     End If
  18.   Next j
  19. Next i
  20. End Sub


c'est déjà mieux...
 
Ceci dit on se demande bien ce que tu as voulu faire !
A+


---------------
roger
zeb
Plus d'informations

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 :
  1. Cells(i, j) = 13
  2. if Cells(i, j).Offset(-1, 0).Interior.ColorIndex = 2 then
  3.     debug.print "ok1"
  4.     if Cells(i,j).Offset(-1, 1).Interior.ColorIndex = 2 then
  5.         debug.print "ok2"
  6.         if Cells(i, j).Offset(0,1).Interior.ColorIndex = 2 then
  7.             debug.print "ok3"
  8.             if Cells(i, j).Offset(1, 1).interior.ColorIndex = 2 then
  9.                 debug.print "ok4"
  10.                 if Cells(i, j).Offset(1, 0).Interior.ColorIndex = 2 then
  11.                     debug.print "ok5"
  12.                     if Cells(i, j).Offset(1, -1).Interior.ColorIndex = 2 then
  13.                         debug.print "ok6"
  14.                         if Cells(i, j).Offset(0, -1).Interior.ColorIndex = 2 then
  15.                             debug.print "ok7"
  16.                             if Cells(i, j).Offset(-1, -1).Interior.ColorIndex = 2 then
  17.                                 debug.print "ok8"
  18.                                 Cells(i, j).Value = 9
  19.                             End If
  20.                         End If
  21.                     End If
  22.                 End If
  23.             End If
  24.         End If
  25.     End If
  26. End If
 

Et indente ton code.


Message édité par zeb le 21-01-2008 à 13:48:08

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

lol mdr ^^ zeb je t'ai jamais vu faire un truc comme ça mdr ^^  
 
c mieux d'utiliser le select  case ^^ beaucoup plus clair


---------------

 

 

zeb
Plus d'informations

Salut BiereBlanche :hello:
 
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.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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 ?


---------------

 

 

Profil : iModo
Plus d'informations

Juste avant

Citation :

Cells(i, j).Value = 9


 
Y'a un "Then" à mettre non ?


---------------
-= Sooz est plus chaude qu'un radiateur [:ascaso] =-
 
-= Music Challenge, un bon magasin de musique en ligne =-
Plus d'informations

oui aussi bonne remarque ^^ mais je crois qu'on est pas obliger de le mettre je suis pas sur


---------------

 

 

zeb
Plus d'informations

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).


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » probleme VBA boucle IF
 

Annonces Google
Publicité