IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour afficher les feuilles dans un ordre précis


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Par défaut Macro pour afficher les feuilles dans un ordre précis
    Bonjour,

    J'ai créé une macro qui permet à mes utilisateurs d'afficher leur feuille de saisie au fur et à mesure qu'ils ont besoin d'une nouvelle. Les feuilles de saisie existent mais sont masquées et un bouton permet d'afficher une nouvelle feuille à compléter.

    Je souhaite utiliser le codename de la feuille car le nom de la feuille évoluera en fonction d'une donnée saisie.

    Pour commencer j'ai fait la macro suivante qui fonctionne avec 2 feuilles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub NouvelleFO()
     
        Dim Cl As Workbook
     
        Set Cl = ActiveWorkbook
        If Cl.Worksheets(Feuil16.Name).Visible = False Then
     
            Cl.Worksheets(Feuil16.Name).Visible = True
     
        Else
            Cl.Worksheets(Feuil17.Name).Visible = True
     
        End If
     
    End Sub
    Cette macro fonctionne mais uniquement sur 2 feuilles alors que j'aurais jusqu'à 20 feuilles possibles.
    Du coup, j'ai essayé de la transformer en boucle et là ça ne marche pas car je n'arrive pas à mettre la variable sur le codename de la feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub NouvelleFO()
    Dim Cl As Workbook 
    Set Cl = ActiveWorkbook 
    Dim i As Integer
    Dim codeNameFeuille As String
    For i = 1 To 20
    codeNameFeuille = "Feuil" & i
    If Cl.Worksheets(codeNameFeuille.Name).Visible = False Then
    Exit For 'Si condition vraie, on quitte la boucle For !
    End If
    Cl.Worksheets(codeNameFeuille.Name).Visible = true
    End Sub
    Pouvez-vous m'aider car il bloque sur Cl.Worksheets(codeNameFeuille.Name).Visible

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Pense aux balise code (bouton #) ça rend le code beaucoup plus lisible.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub NouvelleFO()
     Dim Cl As Workbook
     Set Cl = ActiveWorkbook
     Dim i As Integer
     Dim feuille As Worksheet
     For i = 1 To 20
     Set feuille = Cl.Worksheets("Feuil" & i)
     If feuille.Visible = False Then
     Exit For 'Si condition vraie, on quitte la boucle For !
     End If
     feuille.Visible = True
     Next i
     End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Voici une piste. Les feuilles apparaissent en fonction de leur index et ça part de 1 à Worksheets.Count. Le bouton pour afficher la feuille suivante est un bouton ajouté dans la barre d'accès rapide afin de ne pas compliquer avec des boutons sur les feuilles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Dim Index As Integer 'en tête de module
     
    Sub NouvelleFO()
     
        Dim I As Integer
     
        Index = Index + 1
     
        If Index > Worksheets.Count Then Index = 1
     
        Application.ScreenUpdating = False
     
        Worksheets(Index).Visible = True
     
        For I = 1 To Worksheets.Count
            If I <> Index Then Worksheets(I).Visible = False
        Next I
     
        Application.ScreenUpdating = True
     
    End Sub

  4. #4
    Candidat au Club
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Par défaut
    Merci pour vos réponses
    La solution d'Halaster08 ne semble pas fonctionner mais merci pour tes conseils sur les balises codes.

    Par contre la piste de Theze semble presque fonctionner.
    Mais cela me masque les autres feuilles alors que je veux qu'elles se démasquent au fur et à mesure qu'on clique sur le bouton afficher une nouvelle fiche.
    Il faut que je creuse demain matin (cette après-midi réunion) mais si vous avez une idée?
    Autre question comment on sait à quel index = quelle feuille ? En effet, je veux démasquer entre la feuil16 et la feuil30 car les feuilles d'avant servent à autre chose.
    Merci d'avance

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    De cette façon peut être ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Dim Index As Integer 'en tête de module
     
    Sub NouvelleFO()
     
        Dim I As Integer
     
        Index = Index + 1
     
        If Index > Worksheets.Count Then Index = 1
     
        Application.ScreenUpdating = False
     
        Worksheets(Index).Visible = True
     
        For I = Index + 1 To Worksheets.Count
            Worksheets(I).Visible = False
        Next I
     
        Application.ScreenUpdating = True
     
    End Sub

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/05/2018, 15h18
  2. Réponses: 0
    Dernier message: 22/03/2013, 13h21
  3. Réponses: 5
    Dernier message: 01/02/2010, 10h25
  4. [XL-2003] macro pour afficher les dates des troisièmes vendredi du mois
    Par julius999 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 28/10/2009, 17h39
  5. Réponses: 0
    Dernier message: 16/06/2008, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo