Déplacement entre feuilles excel [Résolu]

Signaler
Messages postés
3
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
16 janvier 2006
-
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
-
Bonjour,

Dans une macro excel je souhaite parcourir des feuilles qui se nomment "Jan" "Fev" "Mars" et ainsi jusque "Dec" afin de pouvoir effectuer une recherche suivant des critères sur chaque feuille. Je voudrai donc que le parcours des feuilles se fasse dans une boucle For ...Next avec un incrément de l'index des feuilles. Un peu dans ce style là:

For n = 0 to 11
sheets(n).activate

Next

Mais je n'ai pas réussi!!

Merci d'avance de votre aide.

11 réponses

Messages postés
85
Date d'inscription
jeudi 17 novembre 2005
Statut
Membre
Dernière intervention
15 février 2006
2
Je ne vois pas comment faire ça directement... Essaie de créer un tableau qui contient tous les noms de tes feuilles ("Jan", "Fev", "Mars",...) après tu feras une boucle sur ton tableau:

Dim nom as string
Dim tableau(0 To 11) As String

tableau(0) = "Jan"
tableau(1) = "Fev"

...

For n = 0 to 11
nom = tableau(n)
sheets(nom).activate

Next

C'est un peu laborieux mais ça devrait fonctionner
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 82 internautes nous ont dit merci ce mois-ci

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Mais je m'ettonne quand même que ton code ne fonctionne pas!!!
Sheets(index).Activate !!!

Sinon, pense à toujours nous préciser la version sous laquelle tu codes.

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
8 juin 2012
4
Bonjour,

Sub RangeA1toutesFeuilles()
Dim WS As Worksheet
For Each WS In Sheets(Array("Jan", "Fev", ... , "Dec"))
WS.[A1] = "test"
Next WS
End Sub

ctac
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Dit CTAC, t'es sûr de ton code là ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
8 juin 2012
4
Bonjour,

Si tu remplace les ... par le nom des feuilles !
Ou est le problème ?

ctac
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Je sais pas, la syntaxe me parrait étrange...

Tu déclare ta variable objet comme étant un classeur... ok
Puis après tu l'utilises en guise d'instance de la collection Sheets !!!
Pi j'avais jamais vu qu'on pouvait parcourir les instances d'un objet en parcourant en même temps les entrées d'un tableau!!!
Je trouve aussi la syntaxe [A1] étrange comme mode de référence!!!

Bref, tout ceci me laisse pantois !

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
8 juin 2012
4
>Tu déclare ta variable objet comme étant un classeur... ok

Dim WS As Worksheet 'ici c'est une feuille de calcul

>Pi j'avais jamais vu qu'on pouvait parcourir les instances d'un objet en parcourant en même temps les entrées d'un tableau!!!

For Each WS In Sheets(Array("Jan", "Fev", ... , "Dec")) 'ici c'est une collection de feuilles de calcul

>Je trouve aussi la syntaxe [A1] étrange comme mode de référence!!!

C'est un raccourci pour Range("A1")

Le mieux, c'est d'essayer la proc pour voir que ça fonctionne.

ctac
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Oh, je te fais confiance (quoi que sur mon Excel 2000 je sais pas trop si ça passera)...
Vi, en effet, autant pour moi : Worksheet... j'ai mal lu...

Mais je reste encore "sur le cul" pour le For Each avec un tableau !!! J'ai du mal à saisir comment VB interprête cela... Enfin, je vois bien le résultat mais c'est la première fois que je vois un truc pareil!!!
Donner un tableau comme.. argument (???)... à la collection... dans un For Each... bleuffant!

Comme quoi, on en apprends tous les jour! Merci CTAC

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
2
Héhé, on peut aussi le faire avec une variable déclarée :

Dim mytab(1 To 5)


For i = 1 To 5
mytab(i) = i
Next


For Each i In mytab
MsgBox i
Next

Ha vraiment VB, quand tu nous tiens

Je pense que l'origine du pb est de commencer à l'index 0 pour le collection de feuilles de classeur car la première feuille a bien comme index 1

Donc je corrige
For n = 1 to 12
sheets(n).activate
Next

attention toutefois car activate sur une feuille masquée génère une erreur. Il vaut mieux passer par les noms des feuilles.

Kalobit
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
quand tu nous tiens...

Mais qu'entends-tu pas "une feuille cachée" ??? N'est pas là le but même de la méthode .Activate d'afficher des feuilles "masquées" ??? Qu'importe qu'on emploi l'index ou le nom... enfin, si je dis pas de conneries! Je dirais même que les deux ont leurs avantages et inconvénients et sont dangereux si on ne fait pas attention :
- Le nom l'est si on est imprécis sur l'orthographe !
- L'index l'est si l'ordre des feuilles change !

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
2
salut,

une feuille cachée c'est une feuille dont la propriété visible n'est pas à -1 (xlsheetvisible), c'est à dire soit 0, et alors affichable à partir du menu afficher, soit 2 et là tu dois passer par vba.

si tu essaye d'afficher une feuille dont .visible n'est pas à -1, tu crée une erreur et la feuile ne s'affiche pas.

la méthode activate sers à mettre une feuille au premier plan de la fenêtre active.

pour compléter ta remarque, très juste dailleur, je dirais qu'il est plus judiscieux d'utiliser la propriété codename de l'objet worksheet qui permettra d'appeler directement la feuille sans se soucier de savoir si un utilisateur a modifié le nom de la feuille.

On aura donc Feuil1.activate.

Mais on s'éloigne du sujet et cette méthode ne me semble pas appropriée au pb de Lauresse.

J'ajouterais juste pour finir que la methode activate n'est pas forcément très utile ici car le but n'est pas réellement d'afficher la feuille mais de la séléctionner pour y effectuer une recherche par vba. Donc un select devrait suffir, et rendra la macro un peu plus rapide.

+++K@lo