XL 2010 Bouton VBA pour ouvrir plusieurs onglets

Orson83

XLDnaute Impliqué
Bonjour à tous,

Est-il possible de créer un bouton simple en VBA (pas d'image) qui permettrait d'afficher plusieurs onglets alors qu'à la base, ils sont tous masqués sauf la page d'accueil ?

Exemple :

- La Feuil 8 serait (nom : rapport financier ou Feuil8)
- La Feuil 12 serait (nom : bilan prévisionnel ou Feuil12)

Le code pourrait ressembler à cela ? (bien sûr mon exemple ci-dessous ne fonctionne pas)

Private Sub CommandButton1_Click()
For i = 2 To 4 Step 2
Worksheets("rapport financier ou Feuil8" & i).Visible = xlSheetVisible
Worksheets("bilan prévisionnel ou Feuil12" & i).Visible = xlSheetVisible
Next i
End Sub

Je joins un exemple dans ce post.

Merci pour votre aide.

François
 

Pièces jointes

  • Document V3.xlsm
    45.3 KB · Affichages: 3

Dudu2

XLDnaute Barbatruc
Bonjour,
Tu y es presque mais tu confonds la référence à une feuille par son numéro d'ordre dans le classeur:
ThisWorkbook.Worksheets(i)
et la référence à une feuille par son nom:
ThisWorkbook.Worksheets("rapport financier")
Les 2 référence sont valides.

A noter que la référence:
ThisWorkbook.Worksheets("Feuil8")
n'est plus valide si tu as renommé la feuille, ce qui est manifestement le cas.

De plus si c'est pour démasquer 2 feuilles tu n'as pas besoin d'un boucle:
ThisWorkbook.Worksheets(2).Visible = xlSheetVisible
ThisWorkbook.Worksheets(4).Visible = xlSheetVisible

ou encore
ThisWorkbook.Worksheets("rapport financier").Visible = xlSheetVisible
ThisWorkbook.Worksheets("bilan prévisionnel").Visible = xlSheetVisible
 

Dudu2

XLDnaute Barbatruc
Un petit complément pour dire que la qualification des objets est une chose importante en VBA.
Il faut toujours qualifier complètement les objets qu'on manipule, c'est pour ça que j'ai préfixé par ThisWorkbook.
Pourquoi ? Pour ne jamais avoir de surprise, si par exemple tu as plusieurs classeurs ouverts et que ta Macro, par manque de qualification, considère un autre classeur devenu actif plutôt que celui sur lequel tu voudrais qu'elle s'applique. Même chose au niveau des Ranges, qualifier par le Workbook et la Worksheet.

Si tu es dans le code du Workbook, sur le Workbook_Open(), où ta macro devrait probablement se trouver plutôt que sur un bouton, c'est mieux de remplacer la qualification ThisWorbook par Me.
ThisWorkbook.Worksheets("rapport financier").Visible = xlSheetVisible
devient:
Me.Worksheets("rapport financier").Visible = xlSheetVisible
 

Orson83

XLDnaute Impliqué
Bonsoir Dudu2,

:oops: Concrètement, est-il possible de corriger le fichier en PJ ?

J'ai inséré ton code dans ThisWorkbook mais pas de résultat.

Private Sub CommandButton1_Click()
For i = 2 To 4 Step 2
Me.Worksheets("rapport financier").Visible = xlSheetVisible
Me.Worksheets("bilan prévisionnel").Visible = xlSheetVisible
Next i
End Sub

N'est-il pas possible d'insérer le code dans la page qui contient le bouton (page Accueil), ceci afin de ne pas avoir à chercher où se trouve le code ?

Désolé pour mon faible niveau en VBA.

François
 

Pièces jointes

  • Document V3.xlsm
    46.5 KB · Affichages: 6

Dudu2

XLDnaute Barbatruc
Dans ton code ci-dessus, il n'y a encore une fois aucune utilité à faire une boucle.
Tu as placé ton code dans le module ThisWorkbook, mais il n'a rien à faire ici sauf si tu veux exécuter ce code sur des évènements relatifs au Workbook (Open, Close, Save, etc...). En l'occurrence il ne sert à rien car n'est jamais exécuté car le bouton appartient à la feuille "Accueil & Navigation".
 

Pièces jointes

  • Document V3-2 option ouverture classeur.xlsm
    37.3 KB · Affichages: 6
  • Document V3-2 option bouton.xlsm
    45 KB · Affichages: 7

Discussions similaires

Réponses
10
Affichages
630
Réponses
2
Affichages
582

Statistiques des forums

Discussions
311 737
Messages
2 082 030
Membres
101 876
dernier inscrit
JULIEN21370