[VBA Excel ] Boucle

Résolu
sebi78 Messages postés 5 Statut Membre -  
sebi78 Messages postés 5 Statut Membre -
bonjour à tous,

Je cherche à optimiser mon programme.
J'ai crée une 20 feuilles que je rend visible ou invisible à partir de boutons. Voici un exemple de code sur un bouton.
Je voudrais faire une incrementation et des boucles sur le numero des feuilles pour simplifier mon programme.
Comment puis faire.

Merci de m'aider
------------------------------------------

Private Sub CommandButton1_Click()
Worksheets(2).Visible = True
Worksheets(1).Visible = False
etc....
Worksheets(20).Visible = False

'Activation d'une feuille
Worksheets(2).Activate
'recentrer sur la feuille
Worksheets(2).Range("a5").Select

End Sub
Configuration: Windows XP
Internet Explorer 7.0

3 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Voila une première idée, mais en fait il faudrait utiliser un seul bouton
    pour choisir la feuille visible et n'écrire qu'une seule macro.

    Private Sub CommandButton1_Click()
    ' n° du bouton choix=1 
    call action(1)
    End Sub
    
    ...
    
    Private Sub CommandButton20_Click()
    ' n° du bouton choix=20 
    call action(20)
    End Sub
    
    Private Sub action(choix as integer)
    
    dim i as integer
    
    for i = 1 to 20
    Worksheets(i).Visible = False
    next i
    
    Worksheets(choix).Visible = True
    
    'Activation d'une feuille
    Worksheets(choix).Activate
    'recentrer sur la feuille
    Worksheets(choix).Range("a5").Select
    
    End Sub
    0
    1. sebi78 Messages postés 5 Statut Membre
       
      Bonjour,

      Merci pour ton aide. J'ai essaie tes lignes de codes. J'ai encore des soucis. voici le message d'erreur.

      erreur exécution 1004 impossible de definir la propriete visible de wooksheet.

      Qand je veux activer voir le feuille 2 , il me cache feuille 1 et 2 puis je ne peux revenir à ma feuille 1 avec mon bouton retour.

      Je t'ai fait un fichier essai par contre je ne sais pas comment te le joindre.
      0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Il ne faut certainement pas occulter tous les onglets, ce qui provoque l'erreur.

    C'est vrai qu'un fichier essai sera plus parlant.

    tu peux l'envoyer sur : https://www.cjoint.com/

    puis mettre sur un message le code attribué.

    merci d'avance.
    0
    1. sebi78 Messages postés 5 Statut Membre
       
      Bonjour,

      Voici mon fichier test. Si cela ne suffit pas je t'enverrai mon fichier que je veux optimiser pour voir en detail ce que je veux.
      C'est pas evident d'expliquer.

      https://www.cjoint.com/?dzxiWkVOzY
      0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Effectivement, je n'avais pas vu ta façon d'utiliser la fonction.

    Je te propose la modification suivante qui fonctionne avec n'importe quel nombre de feuilles.

    Public Sub action(choix As Integer)
    
    Dim i As Integer
    
    For i = 1 To Worksheets.Count
        If Worksheets(i).Index = choix Then
            Worksheets(i).Visible = True
        Else
            If Not ActiveSheet.Index = i Then Worksheets(i).Visible = False
        End If
    Next i
    
    'changement de feuille active
    i = ActiveSheet.Index
    Worksheets(choix).Activate
    Worksheets(i).Visible = False
    
    'recentrer sur la feuille
    Range("a5").Select
    
    End Sub


    Comme tu n'as qu'un seul onglet visible,
    tu peux dans le menu outils / options / onglet affichage,
    décocher l'option "onglets de classeur".

    Bonne journée.

    0
    1. sebi78 Messages postés 5 Statut Membre
       
      Bonjour,

      Merci pour ton aide. Cela marche . J'aurais surement d'autre question comme je debute.

      bonne journee à toi.

      a+
      0