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 :

Affichage des feuilles en fonction d'une valeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Par défaut Affichage des feuilles en fonction d'une valeur
    Bonjour,

    Je travaille quotidiennement avec un fichier excel qui contient environ une centaine de feuilles.

    Cependant, je n'ai jamais besoin de toutes les voir en même temps. Ainsi pendant une heure je vais travailler avec dix feuilles, puis plus tard avec hut autres feuilles etc etc.

    Mon problème est que je perds énormément de temps dans les déplacements entre les feuilles. Imaginez que je travaille avec la première feuille puis la 43ème, puis la 17ème puis la 86ème etc etc.

    J'ai créé à la dernière page de mon classeur une feuille reprenant en colonne 1 le nom de chaque feuille. Dans la seconde colonne, je peux indiquer 1 (feuille que je souhaite indiquer) ou 0 (feuille que je souhaite masquer). Je souhaiterais développer une macro qui lise les informations de ma dernière feuille et masque les onglets pour lesquels la valeur est 0 et affiche les onglets pour lesquels la valeur est 1.

    J'avoue ne pas du tout savoir comment m'y prendre. J'ai créé un exemple dans le fichier en pièce jointe avec 5 feuilles + 1 feuille de choix.

    Pourriez-vous m'aider ?

    Un grand merci,

    Thomas
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Regarde un classeur exemple. Pour faire apparaître la liste des feuilles, où que tu sois, appuie sur les touches Ctrl, Maj et A. Coche les feuilles à afficher et appuie sur OK. Je peux également masquer et faire apparaître la feuille "Choix".

    thomas.herremans Forum.xlsm

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    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 : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En supposant que la plage où se trouve le nom des feuilles et la valeur 1 ou 0 est construite sur deux colonnes et plusieurs lignes est nommée SheetsName avec portabilité feuille sur la feuille où est cette liste et que je nommerai Param
    Voici un exemple à placer dans le module de la feuille [Param]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Deactivate()
     Dim tbl() As Variant, Elem As Integer
     tbl = Range("SheetsName")
     For Elem = 1 To UBound(tbl, 1)
      Worksheets(tbl(Elem, 1)).Visible = tbl(Elem, 2)
     Next
    End Sub
    Dès que tu quitteras la feuille [Param] les feuilles seront visibles ou masquées.
    Attention de ne pas mettre dans la liste la feuille Param pour éviter le risque de la masquer
    Mais évidemment il y a une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Deactivate()
     Dim tbl() As Variant, Elem As Integer
     tbl = Range("SheetsName")
     For Elem = 1 To UBound(tbl, 1)
      If Trim(LCase(tbl(Elem, 1))) <> "param" Then
       Worksheets(tbl(Elem, 1)).Visible = tbl(Elem, 2)
      End If
     Next
    End Sub
    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

  4. #4
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Daniel, le seul problème que je dois à chaque fois cocher les feuilles sur lesquelles je veux travailler...

    Philippe, je n'ai pas réussi à implémenter ton code correctement (je suis re-débutant). Je place mon fichier en pièce jointe.

    Un grand merci,

    Thomas
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    > Daniel, le seul problème que je dois à chaque fois cocher les feuilles sur lesquelles je veux travailler...

    J'ai dû rater un épisode... Sauf si les feuilles 1 sont celles sur les quelles tu veux travailler ? J'ai pensé, sans doute à tort que tu voulais faire un choix parmi les feuilles "1". D'un autre côté, si je liste toutes les feuilles, tu pourrais modifier ton choix de feuilles à la volée sans retourner sur la feuille choix qu'on pourrait supprimer. A toi de voir.

  6. #6
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Par défaut
    Bonjour Daniel,

    L'idée en fait est la suivante: sur la feuille choix le choix se fera sur la deuxième colonne (0 ou 1 indiqué selon que je veux masque ou afficher la feuille). Mais, je compte avoir des colonnes (3,4,5,6,...) afin de pouvoir faire un simple copier (par exemple de la colonne 3 vers la colonne) lorsque je travaille avec une catégorie de personnes (par exemple les professeurs qui donnent le cours de math).

    Je ne sais pas si cela peut t'aider...

    Bon dimanche,

    Thomas

  7. #7
    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,

    Dans le module de la feuille servant au choix des feuilles à afficher, colle ce code et teste en passant les valeurs de 0 à 1 et vice versa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
        If Target.Column <> 2 Then Exit Sub
        If Target.Count > 1 Then Exit Sub
        If Target.Value = 0 Then Worksheets(Target.Offset(, -1).Value).Visible = False
        If Target.Value = 1 Then Worksheets(Target.Offset(, -1).Value).Visible = True
     
    End Sub
    Hervé.

    Oups, j'ai oublié une partie du code, le voici complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Column <> 2 Then Exit Sub
        If Target.Count > 1 Then Exit Sub
        If Target.Value = 0 Then Worksheets(Target.Offset(, -1).Value).Visible = False
        If Target.Value = 1 Then Worksheets(Target.Offset(, -1).Value).Visible = True
     
    End Sub

Discussions similaires

  1. Imprimer des feuilles en fonction de la valeur d'une cellule
    Par jdeheul dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 22/03/2013, 14h47
  2. [XL-2003] Seléctionner des feuilles en fonction de la valeur d'une cellule
    Par sylviobarca dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/04/2011, 12h59
  3. [XL-2003] Répéter des données en fonction d'une valeur
    Par Korsa dans le forum Excel
    Réponses: 3
    Dernier message: 31/03/2011, 11h32
  4. [XL-2007] Extraire des lignes en fonction d'une valeur de cellule dans un autre fichier
    Par MisterTambo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/08/2009, 11h42
  5. Afficher des résultats en fonction d'une valeur de liste
    Par subnox dans le forum VBA Access
    Réponses: 13
    Dernier message: 14/08/2007, 12h54

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