Probleme de fermeture workbooks

Résolu
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006 - 2 mai 2006 à 13:51
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 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


End Sub

4 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
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
3
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006
2 mai 2006 à 15:34
Ya vraiment personne ???
0
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006
2 mai 2006 à 18:34
Merci de ton aide, je teste ca tout de suite

Alboure
0
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006
2 mai 2006 à 18:35
Merci de ton aide, je teste ca tout de suite

Alboure
0
Rejoignez-nous