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 :

Afficher/Masquer des lignes à l'ouverture d'un onglet


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Afficher/Masquer des lignes à l'ouverture d'un onglet
    Bonjour.

    Je créé un Excel pour des tournoi de Rugby à 5.
    Selon les paramètres du tournoi (nb equipes, nb poules, nb terrains), via un bouton de validation du tournoi, je rend visible les onglets utiles au tournoi (Récap des matches, Feuilles de matches à imprimer, Scores des matches) et masque les autres.
    Je rend également visible un onglet 'Récap Tournoi' qui reprend les infos des équipes, des scores des matches, calcule les points de 'championnat' et le goal average.
    Dans ce seul onglet, je voudrais, de façon automatique, n'afficher que certaines lignes (qui correspondent aux paramètres du tournoi) et masquer celles qui ne seront pas utiles.

    Pouvez-vous m'aider à faire ceci :
    1. quand je valide mon tournoi (bouton de validation),
    2. affichage des onglets correspondants (ça c'est bon c'est gérer)
    3. dans l'onglet de 'Récap tournoi' : afficher/masquer des lignes.

    Je n'ai pas réussi à gérer le fait que l'on passe de "sheets.visible=false" à "sheets.visible=True"
    Je n'ai pas trouvé de méthode 'sheets_open()' comme le 'workbook_open()'

    Est-ce que je dois ajouter ces contrôles lors de la validation du tournoi ou est-ce possible de le faire à l'affichage de l'onglet?

    Merci d'avance pour votre aide.

    Cdlt,
    NikoJ

  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 771
    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 771
    Points : 28 631
    Points
    28 631
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai pas trouvé de méthode 'sheets_open()' comme le 'workbook_open()'
    On n'ouvre pas une feuille, on l'active donc je vous conseille d'utiliser la procédure événementielle Workbook_SheetActivate et Workbook_SheetDeactivate lorsqu'on la quitte.

    Je n'ai pas réussi à gérer le fait que l'on passe de "sheets.visible=false" à "sheets.visible=True"
    Que voulez-vous faire exactement ?
    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 à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    C'est noté pour l'activation d'une feuille et non l'ouverture. Je vais commencer à me débrouiller avec ça.

    Ce que je souhaite faire :
    dans mon fichier récap, les lignes 15 à 20 concerne le tournoi sur 2 terrains, les lignes 25 à 30 concerne le même tournoi mais sur 4 terrains.
    Du coup, pour le récap, je ne vais pas chercher les informations dans les mêmes onglets (1 onglet de saisie des scores suivant le nombre de terrains utilisés)

    Dans mon onglet de récap, si le tournoi se fait sur 2 terrains, je veux masquer les lignes 15 à 20 et afficher les lignes 25 à 30.
    S'il se fait sur 4 terrains, je veux afficher les lignes 25 à 30 et masquer les lignes 15 à 20.
    Ceci permettra d'éviter la confusion lors de la lecture des résultats du tournoi.

    Je vais commencer avec Workbook_SheetActivate et Workbook_SheetDeactivate.
    Je vous tiens au courant si j'arrive à faire ce que je veux...

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    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 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,
    Citation Envoyé par NikoJ Voir le message
    Dans mon onglet de récap, si le tournoi se fait sur 2 terrains, je veux masquer les lignes 15 à 20 et afficher les lignes 25 à 30.
    S'il se fait sur 4 terrains, je veux afficher les lignes 25 à 30 et masquer les lignes 15 à 20.
    Ceci permettra d'éviter la confusion lors de la lecture des résultats du tournoi.
    Une proposition:
    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
     
    dim nb_terrain as long
    nb_terrain = inputbox("combien de terrain ?")
    select case nb_terrain
     case 2
      sheets("nomdelafeuilleadeuxterrain").visible = true
      Rows("25:30").Hidden = false
      sheets("nomdelafeuilleaquatreterrain").visible = false
      Rows("25:30").Hidden = true
     case 4
      sheets("nomdelafeuilleadeuxterrain").visible = false
      Rows("25:30").Hidden = true
      sheets("nomdelafeuilleaquatreterrain").visible = true
      Rows("25:30").Hidden = false
    end select
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci pour les réponses.

    J'avais fait ça :
    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
    For Each ctrl In Sheets("Infos tournoi").OLEObjects
    'test du nombre de terrains - je masque l'inutile, j'affiche l'utile
        If TypeName(ctrl.Object) = "OptionButton" Then
            If ctrl.Object.Value Then
                If ctrl.Object.GroupName = "btnNbTerrains" Then
                    If ctrl.Object.Caption = "2" Then
                        Range("40:74").EntireRow.Hidden = True
                        Range("115:149").EntireRow.Hidden = True
     
                        Range("2:39").EntireRow.Hidden = False
                        Range("77:114").EntireRow.Hidden = False
     
                    Else
                        If ctrl.Object.Caption = "4" Then
                            Range("2:39").EntireRow.Hidden = True
                            Range("77:114").EntireRow.Hidden = True
     
                            Range("40:74").EntireRow.Hidden = False
                            Range("115:149").EntireRow.Hidden = False
     
                        End If
                    End If
                End If
            End If
        End If
    Next

    Je ne sais pas pourquoi, mes "Select case" déconnent à chaque fois.
    Je code donc à la bourrin (ça marche toujours, c'est l'essentiel).

    Je n'avais pas pensé à tester si l'onglet '2 terrains' ou '4 terrains' était visible.
    Je préfère rester sur mon contrôle de valeur dans l'onglet 'infos tournoi' pour 2 raisons :
    - Le fichier est en construction et j'ai la mauvaise manie de changer mes noms d'onglets au fil de l'évolution du doc...
    - je dois aussi gérer l'affichage des onglets en fonction du nombre de poules et tous mes cas de tournoi ne sont pas encore gérés. En me basant sur un critère qui ne changera cas, je n'aurais pas à revenir sur mon code plus tard...

    Encore merci pour vos solutions !!!

    Cdlt,
    NikoJe

  6. #6
    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 771
    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 771
    Points : 28 631
    Points
    28 631
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Au vu de vos explications, je pencherais plutôt sur une feuille dédiée à la consultation qui serait le résultat d'une exportation suivant critères et pour cela j'utiliserais soit la méthode AdvancedFilter (filtre avancé d'excel) ou PowerQuery moins de 5 lignes de code pour le premier et la même chose au niveau requêtes pour le second.

    Une image de vos données "source" avec un peu d'explications sur les critères permettrait de vous aider d'avantage et avec pertinence.

    Exemple
    L'exportation s'exécute dès que l'on sélectionne le nombre 2 ou 4 dans la liste déroulante se trouvant dans la cellule B2 de la feuille nommée Consultation et qui constitue le critère.
    le fait de sélectionner un élément dans la liste déroulante déclenche la procédure événementielle Worksheet_Change qui elle même invoque la procédure nommée Export

    Un classeur contenant
    • trois feuilles
    • une validation de données
    • 3 plages nommées
    • 2 tableaux structurés
    • une procédure événementielle dans la feuille de consultation
    • une procédure dans un module standard

    Les feuilles
    • Source : Contient les données
    • Consultation : Permet de consulter suivant le nombre de terrains sélectionné dans la liste déroulante
    • Param : La liste du nombre de terrain

    Les plages nommées
    • areaCriteria = t_Criteria[[#Tout];[Terrain]]
    • areaTarget = Consultation!$C$5:$F$5
    • lst_Terrain = t_Terrain[Terrain]

    Les procédures

    Procédure nommée Export
    Cette procédure se trouve dans un module standard et utilise la méthode AdvancedFilter (Filtre avancé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Export()
      Dim rngSource As Range
      Set rngSource = Range("t_Competion").ListObject.Range
      rngSource.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("areaCriteria"), CopyToRange:=Range("areaTarget")
      Set rngSource = Nothing
    End Sub
    Procédure événementielle
    Se trouve dans la feuille nommée Consultation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
      Export
    End Sub
    Tutoriels sur le sujet


    Illustration
    Nom : 211117 dvp Exportation AdvancedFilter.png
Affichages : 89
Taille : 71,6 Ko
    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

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour.

    Merci pour ces informations complémentaires sur les possibilités.
    Ca peut être très intéressant, mais honnêtement je n'ai pas suffisamment de temps à consacrer à ce fichier.
    Si je fais un truc un à la bourrin qui marche et qui est stable c'est déjà bien. Aujourd'hui on fonctionne encore sur papier donc ce fichier sera une très grande avancée !!!!

    Si ca marche et que d'autres clubs s'en servent, les développement plus complexes (voir Web) seront réalisés directement par la FFR...

    Cdlt,
    NikoJ

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/09/2012, 16h40
  2. Afficher/masquer des lignes dans un tableau hiérarchique
    Par linou dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/06/2009, 11h58
  3. Afficher/Masquer des lignes de tableaux
    Par mLk92 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2007, 18h28
  4. Afficher/Masquer des lignes de tableaux
    Par MortyDeath dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/08/2007, 10h22
  5. Liste déroulante : afficher/masquer des lignes
    Par arxpression dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/08/2006, 16h50

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