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 masquer feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut macro masquer feuilles
    Bonjour,

    je cherche à réaliser une macro pour masquer des feuilles excel.
    L'idée est de masquer des groupes de feuilles par leur nom (name) et non nom par le nom de l'onglet.
    exemple:

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub bouton1_clic()
        For i = 1 To 100
        Sheets(i).Visible = xlSheetVisible
        Next i
    End Sub


    Cette macro fonctionne lorsque je me limite i à 10. Au delà elle ne fonctionne pas.
    Avez vous des idées.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cette macro fonctionne lorsque je me limite i à 10. Au delà elle ne fonctionne pas.
    Avez vous des idées.
    Question importante : Avez-vous un message d'erreur et si oui lequel et à quelle ligne

    Déjà il serait important de limiter tout de suite la boucle par Sheets.Count au lieu de la constante 100

    L'idée est de masquer des groupes de feuilles par leur nom (name) et non nom par le nom de l'onglet
    Exemple pour deux feuilles nommées Start et Admin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub T()
      Dim sht As Worksheet
      For Each sht In Worksheets(Array("Start", "Admin"))
        sht.Visible = xlSheetVisible
      Next
      Set sht = Nothing
    End Sub

    Personnellement, je crée une table avec en première colonne le CodeName de la feuille en deuxième colonne une fonction personnalisée qui renvoie le nom de l'onglet et en troisième colonne l'état Visible, Caché ou vraiment caché dans lequel je souhaite avoir mes feuille en production et un ToggleButton qui permet d'afficher ou de mettre l'une des trois propriétés définit par la troisième colonne

    [EDIT]
    Attention : Le titre de votre discussion est "Macro Masquer feuille" or la valeur que vous avez utilisée pour la propriété Visible et que j'ai reprise est xlSheetVisible alors que pour masquer une feuille c'est soit la valeur xlSheetHidden soit xlSheetVeryHidden
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonsoir,

    Je plussoie Philippe je travail énormément avec des tableaux structurés comme table de mappage.
    Ce procédé permet de ne pas à avoir à entrer dans le code a outrance, et permet donc une meilleur maniabilité / évolution de l'outils pour et par les utilisateurs.

    Ici, je reprends une méthodologie similaire à celle exposée par Philippe pour cacher/afficher les feuilles d'un wb.

    Bav,
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  4. #4
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour u Forum,

    Salut les amis Philippe et Michaël,

    Bravo pour vos suggestions

    Philippe,

    Un détail.
    Je m'interroge sur cette ligne.

    Personnellement, je libère une variable affectée à un objet (ici une feuille) si je l'ai affectée en premier lieu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim lawks As Worksheet
    Set lawks = ThisWorkbook.Worksheets("Toto")
    '.......suite du code.....
    Set lawks = Nothing
    Merci à toi

    Bonne journée à tous.

    Merci

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Marcel,
    Je termine toutes mes procédures par les instructions Set VariableObjet = Nothing
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci pour vos retours.

    Le paramètre que je souhaite identifier pour masquer ou non la feuille est le nom de la feuille avec son numéro et non le nom de l'onglet de la feuille en question.

    Exemple "Feuil1"

    Avez vous des idées?

    Yann

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le paramètre que je souhaite identifier pour masquer ou non la feuille est le nom de la feuille avec son numéro et non le nom de l'onglet de la feuille en question.
    Exemple "Feuil1"
    Je pense que votre demande n'est pas très claire
    La propriété Name d'un objet Sheet ou Worksheet est celui qui s'affiche dans l'onglet et je crois avoir répondu à votre question sur ce sujet, sinon il s'agit de sa propriété CodeName
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je m'excuse pour mon manque de clareté.
    Je reformule:
    mon objectif est d'avoir une macro qui masque des plages de feuilles suivant leurs codename.

    Exemple: masquer les feuilles dont le codename est compris entre "Feuil1" et Feuil10".

    Est-ce plus clair?

    Merci d'avance

    Yann

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'intérêt d'utiliser le CodeName d'une feuille en VBA, c'est de s'affranchir de l'utilisateur qui pourrait renommer la feuille et ainsi déclencher une erreur dans le programme.
    Il est évident que dans ce cas là, il est hautement recommandé de donner un nom explicite et ne pas conserver le CodeName d'origine donc boucler de 1 à 10 sur son nom n'a aucun intérêt pour moi.

    Le CodeName d'une feuille fait partie des composants contenus dans un projet et il est possible de les lister à l'aide de la propriété VBComponents de l'objet VbProject
    Personnellement, je me refuse à utiliser cette méthode car elle nous oblige d'une part à ajouter la référence "Microsoft Visual Basic For Application Extensibility 5.3" mais surtout d'avoir l'option Accès approuvé au modèle d'objet du projet VBA cochée. Ce qui augmente les risques d'interventions chez les clients.
    Donc sur ce terrain là, pas d'aide possible de ma part mais si le sujet vous intéresse voir entre-autres le chapitre II-B. La propriété VBComponents du tutoriel Visual Basic Editor

    Personnellement, comme je l'ai expliqué dans le Fil #2 de cette discussion, j'utilise une table de mappage (Table structurée) nommée T_Sheet comme illustré ci dessous

    Nom : 201014 dvp Visible-Hidden Mapping.png
Affichages : 44
Taille : 10,3 Ko

    Les colonnes
    1. contient le CodeName de la feuille
    2. la fonction personnalisée =GetSheetName([@CodeName])
    3. contient la valeur de la propriété Visible lorsque le classeur est en production soit (-1, 0 et 2) et c'est un format personnalisé qui affiche Visible, Hidden et VerryHidden


    A l'aide d'un ToggleButton je lance la procédure suivante

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub VisibleHidden(FlagVisible As Boolean, Optional TableName As String = "T_Sheet")
      '
      ' Philippe Tulliez (www.magicoffice.be)
      ' Arguments
      '  FlagVisible  (True pour afficher / False
      '  [TableName]  Nom de la table de mapping (d:"T_Sheet")
      Dim oList As ListObject
      Dim oData As Range
      Dim ColumnName As Integer
      Dim ColumnVisible As Integer
      Dim r As Long
      Dim SheetName As String
      Set oList = Range("T_Sheet").ListObject
      Set oData = oList.DataBodyRange
      ' Start
      With oList
        ColumnName = .ListColumns("SheetName").index
        ColumnVisible = .ListColumns("Visible").index
      End With
     
        For r = 1 To oData.Rows.Count
          SheetName = oData.Cells(r, ColumnName).Value
          If Len(SheetName) Then
             With Worksheets(SheetName)
               If SheetName <> ActiveSheet.Name Then .Visible = IIf(FlagVisible, -1, oData.Cells(r, ColumnVisible).Value)
             End With
          End If
        Next
      ' EndOfProcess
      Set oList = Nothing: Set oData = Nothing
    End Sub
    Code de la fonction personnalisée nommée GetSheetName

    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
    Function GetSheetName(CodeName As String) As String
      ' Fonction renvoyant le nom de la feuille en fonction de son CodeName ou chaîne vide si le CodeName n'est pas trouvé
      ' Est utilisé dans le classeur [shtAdmin] pour afficher/masquer les feuilles
      ' Philippe Tulliez (www.magicoffice.be)
      ' Argument
      '  CodeName    CodeName de la feuille
      Dim index As Integer
      Do
        index = index + 1
        If StrComp(Sheets(index).CodeName, CodeName, vbTextCompare) = 0 Then
           GetSheetName = Worksheets(index).Name
           index = Worksheets.Count
        End If
      Loop Until index >= Sheets.Count
    End Function
    Procédure qui simule le ToggleButton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TestVisibleHidden()
      VisibleHidden False  ' Simule le ToggleButton
    End Sub
    [EDIT]
    Autre solution si vous voulez absolument passer par une boucle, en utilisant la fonction GetSheetName
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub VisibleHidden()
      Dim Elem As Integer
      Dim SheetName As String
      For Elem = 1 To 10
        SheetName = GetSheetName("Feuil" & Elem)
        If Len(SheetName) Then Worksheets(SheetName).Visible = xlSheetVisible
      Next
    End Sub
    Pour ne pas utiliser de constante pour la boucle, remplacer la ligne 4 par For Elem = 1 To Worksheets.Count avec le risque bien entendu que le nombre de feuilles soit inférieur au chiffre le plus élevé du CodeName d'une feuille
    Il est possible d'ajouter un paramètre représentant la valeur à passer à la propriété Visible et passer la valeur de ce paramètre en remplacement de la constante actuelle (Ligne 6)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. liaison d'une macro à une feuille excel et execution d'une macro
    Par new_wave dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/08/2008, 17h14
  2. Masquer feuille Excel
    Par lucazzo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2008, 11h47
  3. macro nommer feuilles dans un classeur
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/03/2008, 07h08
  4. Macros insérer feuille ligne et mise à jour
    Par rembliec dans le forum Excel
    Réponses: 6
    Dernier message: 08/11/2007, 15h48
  5. [VBA-E]Lancement macro ouverture Feuille
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 08/06/2006, 20h31

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