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 :

Masquer une même ligne dans plusieurs feuilles


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
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut Masquer une même ligne dans plusieurs feuilles
    Bonjour,

    Je décris mon cas : j'ai une feuille de sélection, avec une liste de produits en colonne
    Les autres feuilles contiennent dans leur première colonne la même liste de produits, avec dans les autres colonnes leur caractéristiques
    Dans chaque feuille, un même produit est sur une même ligne. Par exemple, dans la feuille de Sélection, puis dans la feuille 2, puis 3, etc., le produit A est toujours ligne 2, le produit B est toujours ligne 3, etc.

    Je souhaiterais que lorsque je coche un produit dans la feuille de sélection, celui-ci reste affiché dans les autres onglets. Lorsque le produit n'est pas coché dans la feuille de sélection, la ligne de chaque feuille du classeur correspondant au produit soit masquée. Petite subtilité : aucune ligne ne doit être masquée dans la feuille de sélection.

    Je suis parvenu à un résultat concluant avec une boucle :
    Sheets("1").Rows(A).Hidden = True
    'Sheets("2").Rows(A).Hidden = True
    'Sheets("3").Rows(A).Hidden = True
    'Sheets("4").Rows(A).Hidden = True
    'Sheets("5").Rows(A).Hidden = True
    A étant la variable de la boucle

    Vu qu'il y a beaucoup de feuilles, cela fonctionne mais c'est très long. Avez-vous des propositions pour optimiser le code ? J'ai essayer de masquer les lignes de plusieurs onglets à la fois à l'aide d'Array, mais je n'y parviens pas.

    D'avance merci

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Laurent, bonjour le forum,

    Ce n'est pas très clair tous ça !...
    • Que signifie : je coche ? Une case à cocher, un "x" dans une cellule ?
    • Comment se nomme l'onglet de sélection ?
    • dans quelle colonne se trouve la liste des produits ?

    En attendant plus de clarifications...

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 64
    Par défaut
    Hello,

    Je rejoins pleinement Thautheme, l'idéal serait que tu illustres tes propos avec un fichier exemple type.

    See ya

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 682
    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 682
    Par défaut
    Bonjour,
    Citation Envoyé par laurent987 Voir le message
    J'ai essayer de masquer les lignes de plusieurs onglets à la fois à l'aide d'Array, mais je n'y parviens pas.
    Essaye comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets(Array("Feuil1", "Feuil2")).Select
        Selection.Rows(8).EntireRow.Hidden = True
    Normalement il vaut mieux éviter les select, mais sans ça génère une erreur
    sinon tu peux faire une boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim ws as worksheet
    for each ws in thisworkbook.sheets
    if not(ws.name="nom de ta feuille de selection" then ws.rows(8).entirerow.hidden = true
    next ws
    Je souhaiterais que lorsque je coche un produit dans la feuille de sélection
    Tu as un checkbox par ligne ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut
    Merci pour vos réponses, je complète ma demande :

    • Dans la feuille "Sélection", il y a la première colonne avec les noms des produits, et la sélection se fait en mettant un "X" dans la colonne suivante, colonne B.

    Voici un fichier type
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 682
    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 682
    Par défaut
    En adaptant l'array pour sélectionner toutes tes feuilles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets(Array("Feuil1", "Feuil2")).Select
    for i = 1 to sheets("selection").range("A" & rows.count).end(xlup).row
      if sheets("selection").range("B" & i) = "X" then Selection.Rows(i).EntireRow.Hidden = True
    next i

  7. #7
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Une autre proposition avec la macro événementielle Change à placer dans le composant Feuil1 (Sélection) :

    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
    Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
    Dim O As Worksheet 'déclare la variable O (Onglets)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim I As Integer 'déclare la variable I (Incrément)
     
    If Target.Column <> 2 Then Exit Sub 'si la changement a lieu aillerus qu'en colonne 2 (=B), sort de la procédure
    TV = Range("A1").CurrentRegion 'définit le tableau ds valeurs TV
    Set PL = Range("A1") 'initialise la plage PL
    For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV
        If TV(I, 2) = "" Then 'condition : si la donnée ligne I colonne 2 de TV est vide
            'définit la plage PL (la ligne I ou l'union de PL et de la ligne I)
            Set PL = IIf(PL.Cells.Count = 1, Rows(I), Application.Union(PL, Rows(I)))
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    For Each O In Worksheets 'boucle sur tous les onglets O du classeur
        If Not O.Name = "Sélection" Then 'condition : si l'onglet ne se nomme pas "Sélection"
            O.Rows.Hidden = FASLE 'affiche touts les ligne de l'onglet
            O.Range(PL.Address).EntireRow.Hidden = True 'masque les lignes de la plage PL
        End If 'fin de la condition
    Next O 'prochain onglet du classeur
    End Sub
    Le code agit dès que tu édites un cellule de la colonne B.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut
    Merci beaucoup à vous !

    Pour ce qui est de l'application Selection, elle ne semble pas fonctionner chez moi...

Discussions similaires

  1. Extraire des données d'une même cellule, dans plusieurs fichiers
    Par chicanne dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 31/07/2016, 12h06
  2. Réponses: 2
    Dernier message: 25/08/2014, 10h28
  3. Réponses: 11
    Dernier message: 13/04/2013, 15h25
  4. Réponses: 10
    Dernier message: 08/02/2007, 13h18
  5. Plusieurs Champs d'une même table dans plusieurs textebox
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/09/2006, 11h32

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