Peut-on simplifier ce code?

Bonjour à tous,

Je sollicite à nouveau votre aide.

J'ai un userform avec 18 boutons.

A chaque bouton est associé une feuille; donc quand je clique sur un bouton, j'affiche la feuille qui lui correspond.

D'ou ce code:

Private Sub CommandButton1_Click()

Application.Visible = True

Application.WindowState = xlMaximized

Worksheets("403").Select

Worksheets("403").Visible = True

Unload Me

End Sub

Private Sub CommandButton2_Click()

Application.Visible = True

Application.WindowState = xlMaximized

Worksheets("201").Select

Worksheets("201").Visible = True

Unload Me

End Sub

Donc, je dois écrire à chaque fois pour chaque bouton.

N'y-a-il pas une astuce pour simplifier la procédure ? (Les feuilles sont visualisables uniquement, pas de saisie).

Merci à tous pour vos réponses,

Cordialement,

xorsankukai

Bonjour

Une solution plus simple

Dans une ComboBox (ou ListBox) le nom des tes feuilles

Soit par l'événement Change ( ou Click) our par un bouton de validation tu vas dans la page sélectionnée

Bonsoir Banzai64,

Merci pour ta réponse.

Sans abuser de ta patience, j'ai donc mis dans mon USF, une Listbox avec le nom de toutes les feuilles dedans, et un bouton valider.

Donc je sélectionne un nom de feuille et je clique sur valider.

Peux-tu m'écrire le code pour le bouton , stp?

Petite précision, lorsque j'ouvre mon fichier, seul l'UserForm apparait, la feuille apparaitra si je sélectionne un nom et que je clique sur valider.

Merci pour tout

xorsankukai

Bonjour

Ton code pourrait ressembler à celui-ci

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

  If Me.ListBox1.ListIndex = -1 Then
    MsgBox "Vous n'avez pas choisi une feuille"
  Else
    Application.ScreenUpdating = False
    With Sheets(Me.ListBox1.Value)
      .Visible = xlSheetVisible
      .Select
    End With
    For Each Ws In Sheets
      If Ws.Name <> Me.ListBox1 Then Ws.Visible = xlSheetVeryHidden
    Next Ws
    Application.ScreenUpdating = True
  End If
End Sub

Merci pour ce code.

Je l'ai testé, mais il "bug" sur cette ligne:

With Sheets(Me.ListBox1.Value)

Erreur d'éxécution'9'

L'indice n'appartient pas à la sélection.

A bientôt

Bonjour

Dés que je retrouve ma boule de cristal je te réponds

Sinon tu peux envoyer ton fichier

Bonjour Banzai64,

Voici la première version de mon fichier:

Il me reste à modifier la macro 'retour' pour n'afficher que le UserForm.

Voici la seconde version, celle que tu me proposes (si j'ai bien compris ):

Le code ne fonctionne pas et excel m'indique un problème de mémoire insuffisante lorsque je veux fermer mon fichier.

Je te remercie sincèrement pour ta patience et ton aide,

Cordialement,

xorsankukai

Bonjour

Modifies la ligne correspondante

        Application.ScreenUpdating = False
        With Sheets(CStr(Me.ListBox1.Value))
          .Visible = xlSheetVisible
          .Select
        End With

Bonjour Banzai64,

Ton code fonctionne parfaitement

Seul petit bémol, le UserForm s'affiche en permanence sur ma feuille, donc m'empêche de la faire défiler si besoin.

Je te sollicite donc à nouveau pour m'aider à réaliser ces paramétrages:

  • Lorsque j'ouvre mon fichier excel, je veux afficher mon UserForm.
  • Lorsque je sélectionne un feuille, le UserForm est masqué, seule la feuille apparait.
  • Lorsque je quitte ma feuille, je reviens sur le UserForm.

Je te remercie sincèrement pour toute l'aide que tu m'apporte, pas simple le VBA

xorsankukai

Bonjour

A vérifier

C'est nickel !!!

Un grand merci !!!!

Je vais étudier tout ça en détail pour essayer de comprendre un peu,

Bonne soirée,

Encore merci,

xorsankukai

Rechercher des sujets similaires à "simplifier code"