Alboure
Messages postés42Date d'inscriptionvendredi 10 octobre 2003StatutMembreDernière intervention21 juin 2006
-
2 mai 2006 à 13:51
Alboure
Messages postés42Date d'inscriptionvendredi 10 octobre 2003StatutMembreDernière intervention21 juin 2006
-
2 mai 2006 à 18:35
Bonjour,
je suis sous VBA excel 2002.
Je veux fermer tous les classeurs ouverts sauf le premier.
J'ai fait ça, il me les ferme tous sauf le premier et un autre et m'affiche un message d'erreur, l'indice n'appartient pas à la sélection. Si je re-clique sur CommandButton1, il arrive à fermer celui qui aurait dû se fermer avant.
Merci d'avance à ceux qui pourront m'aider à résoudre mon problème.
Private Sub CommandButton1_Click()
Dim i As Integer
For i = 2 To Workbooks.Count
Workbooks(i).Close
Next
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 2 mai 2006 à 18:27
Salut,
A mon avis, le problème vient du fait que les index sont redéfinis à chaque fois que tu fermes 1 classeurs
Ex :
Au début, tu as 4 classeurs ouverts.
Avt 1e passage, tu as comme classeurs ouverts :
Workbooks(1)
Workbooks(2)
Workbooks(3)
Workbooks(4)
1e passage dans la boucle : i = 2
Tu fermes Workbooks(2)
> Workbooks.Count 3
mais :
Workbooks(1) => Workbooks(1)
Workbooks(2) est fermé
Workbooks(3) => Workbooks(2)
Workbooks(4) => Workbooks(3)
> Workbooks.Count 3
Avt 2e passage :
Workbooks(1)
Workbooks(2)
Workbooks(3)
2e passage dans la boucle : i = 3
Tu fermes Worbooks(3)
Workbooks(1) => Workbooks(1)
Workbooks(2) => Workbooks(2)
Workbooks(3) est fermé
> Workbooks.Count 2
Avt 3e passage :
Workbooks(1)
Workbooks(2)
3e passage dans la boucle : i = 4
Tentative de fermeture de Workbooks(4) : ERREUR
Conclusion : Dans ta boucle tu dois tjs fermer le classeur 2 :
-----------------------------------------
Private Sub CommandButton1_Click()
Dim i As Integer
For i = 2 To Workbooks.Count
Workbooks(2).Close
Next
End Sub
-----------------------------------------
PS : Je te conseille également de ne pas utiliser
-----------------------------------------
For i = 2 To Workbooks.Count
-----------------------------------------
mais
-----------------------------------------
li_NbClasseurs = Workbooks.Count
For i = 2 To li_NbClasseurs
-----------------------------------------
car la propriété "Workbooks.Count" varie à chaque passage dans la boucle (un élément est supprimé à chaque fois de la liste) et pour débugger, tu risques de t'arracher les cheveux