[VBA] - Sélectionner le classeur suivant

chewi

XLDnaute Junior
Bonjour à tous.

De nouveau besoin de votre aide!

Je souhaite via un bouton permettre à l'utilisateur de naviguer entre les classeurs.
A chaque fois qu'il appuie sur le bouton, le classeur suivant le classeur actif est activé.

Mais comment faire cela? l'objet Workbook ne possède pas la propriété Index ?

J'avais pensé utiliser: For i = 1 To Workbooks.Count
Workbooks(i+1).Activate

Mais alors je risque un "out of range" si je suis sur le dernier.

Avez-vous déjà réalisé cela? Comment procéder?

En vous remerciant grandement, Chewi
 

wilfried_42

XLDnaute Barbatruc
Re : [VBA] - Sélectionner le classeur suivant

bonjour chewi

dans un module

Public nbclass as integer, numclass as integer

sub avance()
if nbclass = 0 then nbclass = 1
if numclass = 0 then numclass = 1
numclass = numclass + 1
if numclass > nbclass then numclass + 1
workbooks(numclass).activate
end sub

sub recule()
if nbclass = 0 then nbclass = 1
if numclass = 0 then numclass = 1
numclass = numclass - 1
if numclass =0 then numclass =nbclass
workbooks(numclass).activate
end sub

sub ouvre()
if nbclass = 0 then nbclass = 1
if numclass = 0 then numclass = 1
nbclass = nbclass + 1
numclass = nbclass
workbooks(numclass).activate
end sub

sub ferme()
if nbclass = 0 then nbclass = 1
if numclass = 0 then numclass = 1
nbclass = nbclass - 1
numclass = nbclass
if numclass>0 then workbooks(numclass).activate
end sub

le but : est de mettre en memoire publique deux variable
nbclass ---> Nombre de classeurs ouvert
numclass --> N° du classeur en cours

A chaque ouverture de fichier, il faut lancer ouvre afin d'incrementer le nombre de fichiers ouvert
Pareille à la fermeture, il faut decrementer nbclass

ensuite on avance ou on recule
les macro sont faies pour tourner en boucle : Suivant sur dernier fichier ramenera au premier
precedent sur premier fichier ramenera au dernier fichier
 

chewi

XLDnaute Junior
Re : [VBA] - Sélectionner le classeur suivant

Bonjour Wilfried.

Tout d'abord merci pour cette réponse.

Mais l'inconvénient est que je ne peux pas commencer à compter lorsque l'on ouvre un fichier qu'on en ferme un autre, ... Cela me fait trop de "chipotage".
Même si ta méthode conviendrait parfaitement.

J'ai donc pensé à autre chose:

Code:
Sub Choixclasseur()
Dim i As Integer
Dim Reponse As Integer
For i = 1 To Workbooks.Count
    If i = Workbooks.Count Then i = 0
        Workbooks(i + 1).Activate
        Reponse = MsgBox("Est-ce le bon classeur ?", vbYesNo)
        If Reponse = 6 Then '=yes
            Exit Sub
        End If
Next
End Sub

Ce sera plus simple d'utilisation.

J'espère que ceci pourra aider d'autres utilisateurs.

Bien à tous et encore merci Wilfried

Chewi
 

chewi

XLDnaute Junior
Re : [VBA] - Sélectionner le classeur suivant

Re à tous.

Besoin d'aide urgente. :(

J'ai un petit problème avec ce code:

Lorsque je suis sur le 1er classeur que j'active le code, il m'affiche le classeur suivant --> OK

Mais lorsque je suis de retour sur le 1er classeur, je reste bloqué dessus.

Je suppose que j'ai un problème avec ma boucle suivant la valeur que prend i.

Pouvez-vous m'aider?

Merci d'avance

Chewi

Code:
Dim i As Integer
Dim Reponse As Integer
For i = 1 To Workbooks.Count * 2
    If i = Workbooks.Count Then i = 0
    If i > Workbooks.Count Then i = 0
        i = i + 1
        Workbooks(i).Activate
        Reponse = MsgBox("Est-ce le bon classeur ?", vbYesNo)
        If Reponse = 6 Then '=yes
            Exit Sub
        End If
Next
End Sub
 

wilfried_42

XLDnaute Barbatruc
Re : [VBA] - Sélectionner le classeur suivant

re:
ton code :
Code:
Dim i As Integer
Dim Reponse As Integer
For i = 1 To Workbooks.Count * 2
    If i = Workbooks.Count Then i = 0
    If i > Workbooks.Count Then i = 0
        i = i + 1
        Workbooks(i).Activate
        Reponse = MsgBox("Est-ce le bon classeur ?", vbYesNo)
        If Reponse = 6 Then '=yes
            Exit Sub
        End If
Next
End Sub

Ton code devrait fonctionner mais personnellement je n'utiliste jamais une boucle for next pour gerer une boucle de ce type

essaye cela

Code:
Dim i As Integer
Dim Reponse As Integer
i = 0
do
i = i + 1
If i > Workbooks.Count Then i = 0
If i > 0 then 
        Workbooks(i).Activate
        Reponse = MsgBox("Est-ce le bon classeur ?", vbYesNo)
end if
while Reponse <> 6 
End Sub
 

chewi

XLDnaute Junior
Re : [VBA] - Sélectionner le classeur suivant

Bonjour Wilfried,

J'ai un problème suivant le nombre de classeur en fait.
S'il y en a 2, je reste bloqué sur le 1er après 1 tour.

S'il y en a 3, je ne sais affiché que le 1er et le 3ème.

Il y a toujours une valeur que i n'arrive pas à prendre avec ma boucle.

Je te remercie de ta réponse très rapide.
Je regarde ce que tu m'indique et je te tiens au courant.

Merci
 

Discussions similaires

Réponses
7
Affichages
449

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2