selection de feuilles de classeur à l'aide d'une liste déroulante

D

ddh

Guest
Bonjour

A l'aide d'une zone de liste déroulante, je voudrais sélectionner une feuille d'un classeur. La première données m'amènerait à la feuille x, la deuxième données à la feuille y, ect...

Merci pour vos réponses
 
Y

Yolène

Guest
Il doit y avoir une façon plus élégante à partir des indexes de la liste déroulante mais celle-ci fonctionne si elle est bien appliquée


Sélectionne la zone où se trouve les données de la liste déroulante et tant que chaque cellule n'est pas vide ouvre la feuille correspondante, puis sélectionne la cellule suivante et ainsi de suite.



sheets(xxxxxx).select 'la feuille où se trouvent les données de la liste
déroulante
Range(xxxxx).select
Do While ActiveCell <> "" ActiveCell.Select
nom variable = ActiveCell 'affecter la variable à la première cellule

Nbfeuilles = Sheets.Count 'compter les feuilles du fichier
For Feuille = 1 To Nbfeuilles 'sélectionne chaque feuille
Sheets(Feuille).Visible = True 'la rend visible si elle est masqué
Sheets(Feuille).Select 'sélectionne la feuille'sélectionne la feuille
Sheets(Feuille).unprotect 'la déprotège si elle est protégée

If Sheets(Feuille).Name = nomvariable Then


'A partir d'ici effectuer les opérations désirées sur la feuille


Else 'sinon sélectionne à nouveau la feuille où se trouve la liste et reste sur la même cellule tant que la feuille du même nom n'a pas été trouvée.

Sheets(xxxxx).Select
ActiveCell.Select
nomFournisseur = ActiveCell.Text
End If


Next Feuille 'cherche la feuille suivante

Sheets(xxxxxxxx).Select 'revient à la feuille de données et décale d'une cellule
ActiveCell.Offset(1, 0).Select
nomvariable = ActiveCell.Text 'affecte la variable à la nouvelle cellule
loop 'recommence la boucle

J'espère que j'ai été claire.
Bon courage
 
Y

Yolène

Guest
Méa culpa ! j'ai eu un cas de conscience et je rectifie.
Pour ce qui est de la solution précédente, elle s'adressait à toute la liste chaque élément étant ouvert l'un après l'autre.
Pour ton problème celui-ci répond-ci mieux à la question. J'ai laissé mon exemple qui concerne une liste de fournisseurs pour être plus claire mais tu peux le transposer pour ton cas. (c'est de l'Excel 97, pour 2000, l'appellation des éléments de boite de dialogue sont peut-être différents mais le processus est le même.


Dim Feuille As Variant
Dim indexFournisseur As Variant
Dim nomFournsseur As String

indexFournisseur = DialogSheets("bd_RECAP").ListBoxes("8").Value
nomFournisseur = DialogSheets("bd_RECAP").EditBoxes("9").Text
If indexFournisseur = 0 Then
End
Else
Nbfeuilles = Sheets.Count
For Feuille = 3 To Nbfeuilles
Sheets(Feuille).Visible = True
Sheets(Feuille).Select
If ActiveSheet.Name = nomFournisseur Then
Sheets(Feuille).Visible = True
Else
If ActiveSheet.Name <> nomFournisseur Then
Sheets(Feuille).Visible = False
End If
End If

Next Feuille

ActiveSheet.Select
ProtégerFeuille
End If

End Sub
 
D

ddh

Guest
Bonjour Yolène

Merci pour tes réponses. J'espère que je n'ai pas trop perturbé ta nuit!!!!

J'avoue que je n'ai pas réussi à comprendre ta première option. En ce qui concerne ta dernière solution, dans quelle feuille dois-je copier ta solution (dans la feuille module, je suppose)?

A bientôt
 
Y

Yolène

Guest
Merci, ça va je dors bien, mais il m'arrive parfois de m'attarder devant l'écran de plus que je découvre ce site et tout ce qu'il peut apporter de connaissances à propos de VBA.

Oui, tu cliques en mode création sur la liste avec le bouton droit puis sur "affecter une macro", la feuille module s'ouvre avec le nom "zoneliste_quand_click
c'est à partir de là que tu insère les lignes.
c'est le fait de cliquer sur un élément de la zoneliste qui déclenche la macro.
 
D

ddh

Guest
Rebonjour Yolène

J'ai essayé ta méthode mais j'ai un problème. J'ai un message d'erreur sur le chiffre 8 de la ligne "indexFournisseur = DialogSheets("bd_RECAP").ListBoxes("8").Value"
Autrement, ton exemple concerne 3 feuilles si je comprends bien. Le nom des feuilles est indexFournisseur, nomFournisseur et Feuille, c'est bien ça?
Désolé, mais je ne suis pas terrible avec ce langage VBA
Si tu pouvais m'envoyer en pièce jointe ton exemple, ça m'aiderait un peu plus

@+
 
Y

yolène

Guest
Je ne peux pas t'envoyer de fichier car je ne suis pas sur mon micro en ce moment et c'est la version excel 2003.

Non le nom des feuilles doit correspondre aux noms qui sont dans ta liste de déroulante. ils doivent être identiques pour que la macro fonctionne.

donc tu as autant de feuilles que de nombre d'éléments dans ta liste déroulante.

la varialbe "indexFournisseur" correspond à l'index du fournisseur (dans le cas de mon exemple) que tu clique dans la liste. La valeur de la variable change à chaque fois que tu clique sur la liste. Ce sont des chiffres.
La variable : nomfournisseur est le text qui est dans la cellule correspondant au numéro d'élément de la liste que tu as cliqué, il change également selon l'élément que tu sélectionne.
et la variable "Feuille" est une des feuilles du fichier mais cette feuille change au fur et à mesure que tu séléctionne un élément de la liste.
Les variables changent au fur et à mesure du déroulement des opérations elles ne sont pas figées.

dans les propriétés de la liste déroulante, tu dois sélectionner une zone
dans une feuille ou sont entreposés les différents noms et mettre la cellule
où doit figurer l'index qui sera entreposé. Pour utiliser cette macro cette feuille doit être affichée et déprotégée soit en permanence, soit par la macro.
Désolée de ne pouvoir faire plus pour le moment.
 

Discussions similaires

Statistiques des forums

Discussions
312 971
Messages
2 094 045
Membres
105 926
dernier inscrit
Odyssea