une condition dans un do while qui plante ...

une condition dans un do while qui plante ... - VB/VBA/VBS - Programmation

Marsh Posté le 22-07-2010 à 09:39:33    

Bonjour à tous!
 
je suis un peu ennuyé, je ne comprend pas mon erreur , j'ai une condition dans un while qui retourne  
 
"lindice n'appartient pas à la selection"
 
Je précise que mon classeur possède deux feuilles.
 
voici le bout de code
 

Code :
  1. i=1
  2. Sheets(i).Range("A1" ) = Sheets(i + 1).Name
  3. Sheets(i + 1).Range("A1" ) = "coucou"
  4. Do While ((i <= Sheets.Count()) And (a <> Sheets(i).Name))
  5.     i = i + 1
  6. Loop


 
ce qui est bizarre c'est que les instructions 2 et 3 au dessus fonctionnent et c'est celle là qui plante :
 

Code :
  1. a <> Sheets(i).Name


 
Auriez vous une idée? Merci!


Message édité par @pierre le 22-07-2010 à 09:40:44
Reply

Marsh Posté le 22-07-2010 à 09:39:33   

Reply

Marsh Posté le 22-07-2010 à 09:42:34    

Au moment du plantage, que renvoi i ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2010 à 09:43:28    

euh.. je sais pas trop comment tu peux savoir (je suis débutant ) ?

Reply

Marsh Posté le 22-07-2010 à 09:46:12    

Bonjour,
 
  Les indices de tableaux commencent à 0.  
Dans ta boucle, tu initie i = 1. Sheets(1) correspond à la 2ème feuille de ton classeur.
Lorsque i passe à 2, la feuille N°3 n'existe pas ==> Indice hors de la plage.
 
Démarre avec i = 0. Cela devrait aller mieux.

Reply

Marsh Posté le 22-07-2010 à 09:50:49    

j'ai compris pourquoi... c'est pas du C... l'instruction  

Code :
  1. a <> Sheets(i).Name

 
plante quand i arrive à la fin , il ne quitte pas le while même si c'est un AND il vérifie les deux... (mal foutu !!) auriez vous une solution donc?


Message édité par @pierre le 22-07-2010 à 09:51:10
Reply

Marsh Posté le 22-07-2010 à 09:54:59    

Arcbitre a écrit :

Bonjour,
 
  Les indices de tableaux commencent à 0.  
Dans ta boucle, tu initie i = 1. Sheets(1) correspond à la 2ème feuille de ton classeur.
Lorsque i passe à 2, la feuille N°3 n'existe pas ==> Indice hors de la plage.
 
Démarre avec i = 0. Cela devrait aller mieux.


 
euh ... non c'est faux les indices commencent à 1  
 
enfin je vérifie avec mes lignes 2 et 3 et si je met sheets(0) ça plante


Message édité par @pierre le 22-07-2010 à 09:58:11
Reply

Marsh Posté le 22-07-2010 à 10:02:33    

Arcbitre a écrit :

Bonjour,
 
  Les indices de tableaux commencent à 0.  
Dans ta boucle, tu initie i = 1. Sheets(1) correspond à la 2ème feuille de ton classeur.
Lorsque i passe à 2, la feuille N°3 n'existe pas ==> Indice hors de la plage.
 
Démarre avec i = 0. Cela devrait aller mieux.

:??:  
 
La 1ere feuille commence a 1
 
 

@pierre a écrit :

euh.. je sais pas trop comment tu peux savoir (je suis débutant ) ?


Bah quand ca plante tu viens en mode debogage, tu mets ta souris sur i, et une infobulle devrait apparaitre te donnant la valeur de i
Ou tu peux aussi faire un  
Debug.Print i  
ou encore MsgBox i
Pour connaitre la valeur
Mais la 1ere solution est qd meme plus simple
 


Message édité par SuppotDeSaTante le 22-07-2010 à 10:03:57

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2010 à 10:05:01    

Ooops, autant, au temps, OTAN pour moi! (Rayez la mention inutile)
 

Code :
  1. i = 1
  2. Sheets(i).Range("A1" ) = Sheets(i + 1).Name
  3. Sheets(i + 1).Range("A1" ) = "coucou"
  4. Do While ((i <= Sheets.Count()))
  5.     If a = Sheets(i).Name Then Exit Do
  6.     i = i + 1
  7. Loop


Reply

Marsh Posté le 22-07-2010 à 10:07:45    

baaeeeuuu!! c'est sale mais ça marche ! ^^ merci à toi Arcbitre !!

Reply

Marsh Posté le 22-07-2010 à 10:09:58    

@pierre a écrit :

baaeeeuuu!! c'est sale mais ça marche ! ^^ merci à toi Arcbitre !!


Ca répond pas a ma question, i renvoi quoi quand ca plante. Si tu ne comprends pas tes erreurs, tu n'avanceras qu'a reculons !! (J'aime cette phrase ! ^^ )
 

Arcbitre a écrit :

Ooops, autant, au temps, OTAN pour moi! (Rayez la mention inutile)
 

Code :
  1. i = 1
  2. Sheets(i).Range("A1" ) = Sheets(i + 1).Name
  3. Sheets(i + 1).Range("A1" ) = "coucou"
  4. Do While ((i <= Sheets.Count()))
  5.     If a = Sheets(i).Name Then Exit Do
  6.     i = i + 1
  7. Loop




Beurk :p

Message cité 1 fois
Message édité par SuppotDeSaTante le 22-07-2010 à 10:10:34

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2010 à 10:09:58   

Reply

Marsh Posté le 22-07-2010 à 10:12:40    

SuppotDeSaTante a écrit :


Ca répond pas a ma question, i renvoi quoi quand ca plante. Si tu ne comprends pas tes erreurs, tu n'avanceras qu'a reculons !! (J'aime cette phrase ! ^^ )
 


 
j'ai expliqué plus haut http://forum.hardware.fr/hfr/Progr [...] m#t2010905 pourquoi ça plantais :et  i = 3 au moment du plantage, parce que vba ne quitte pas le while même si la première condition est fausse et que c'est un AND


Message édité par @pierre le 22-07-2010 à 10:14:16
Reply

Sujets relatifs:

Leave a Replay

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