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 et afficher des lignes avec clic droit


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut Masquer et afficher des lignes avec clic droit
    Bonjour,

    J'ai ce code qui permet lors d'un clic droit sur la cellule B56 de masquer les lignes 58 à 64
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
       If Not Intersect(Target, Range("B56")) Is Nothing Then
         With Worksheets("Stats Repas")
        .Rows("58:64").EntireRow.Hidden = True 
        End With
          Cancel = True
        End If
    End Sub
    Je voudrais qu'au prochain clic droit les lignes 58 à 64 réapparaissent ?-

    Comment coder pour faire apparaître que les lignes 58, 62 et 63 ?

    Je dois répéter cette opération toutes les 9 lignes : B65 (65à 73) - B74 -(74 à 82) - B83 (83 à 91) etc. jusqu'à B191 (191 à 200)

    Pouvez-vous m'aider svp ?

    Je vous remercie beaucoup.

    Cordialement

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    j'ai pas tres bien compris pourquoi tu nomme le sheets si c'est le sheets actif et que l'evenement est dans le module du sheets
    cela dit un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        With ActiveSheet
            If Not Intersect(Target, .Range("B56")) Is Nothing Then
                .Rows("58:64").EntireRow.Hidden = .Rows("58:64").EntireRow.Hidden = False
            End If
        End With
        Cancel = True
    End Sub
    clique 2 fois et regarde tu verra
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Commence par :
    1) voir ce que fait cette modif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Rows("58:64").EntireRow.Hidden = not .Rows("58:64").EntireRow.Hidden
    2) t'appliquer dans la rédaction de ton message (en ce qui concerne les chiffres qui y figurent). Je t'aiderai ensuite (pas avant) à exprimer le reste
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Est-ce que code est bon pour reproduire cette opération jusqu'à la ligne 191 ?
    Comment faire pour ne faire rapparaitre que les lignes 58,62 ou 63 OU i+2, i+6 et i+7 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim i As integer    
    i=56
    With ActiveSheet
        For i to 191
        If Not Intersect(Target, .Range(i)) Is Nothing Then
                .Rows(i+2:i+8).EntireRow.Hidden = not .Rows(i+2:i+8).EntireRow.Hidden
            End If
       i =i +9
      Next
        End With
        Cancel = True
    End Sub

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Est-ce que code est bon pour reproduire cette opération jusqu'à la ligne 191 ?
    1) L'as-tu essayé ? tu aurais ta réponse, non ?
    2) principe fondamental : ne jamais modifier le "compteur" d'une boucle en son sein
    3) je ne vois pas ce que vient faire ici l'utilisation d'une boucle. Ne correspond pas à ta demande initiale !
    4) j'attends que tu corriges ... Pour mémoire :
    t'appliquer dans la rédaction de ton message (en ce qui concerne les chiffres qui y figurent). Je t'aiderai ensuite (pas avant) à exprimer le reste
    . C'est un minimum, que de montrer du soin...
    (on va y arriver ?)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    J'ai essayé avec ce code en utilisant Step
    Je voudrais quand je clique
    sur B56 masquer ou afficher les lignes 58 à 64
    sur B65 masquer ou afficher les lignes 67 à 73
    sur B74 masquer ou afficher les lignes 76 à 82
    etc jusqu'à B191 donc Step 9

    mais ce code ne marche pas, mon code est faux avec les i de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Rows("i+2:i+8").EntireRow.Hidden = not .Rows("i+2:i+8").EntireRow.Hidden
    je vais essayer de corriger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
      Dim i As Integer
      For i = 56 To 191 Step 9
        With ActiveSheet
            If Not Intersect(Target, .Range("B56")) Is Nothing Then
                .Rows("i+2:i+8").EntireRow.Hidden = not .Rows("i+2:i+8").EntireRow.Hidden
            End If
        End With
      Next i
        Cancel = True
    End Sub
    Merci de votre aide

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    sur B56 masquer ou afficher les lignes 58 à 64
    sur B65 masquer ou afficher les lignes 67 à 73
    sur B74 masquer ou afficher les lignes 76 à 82
    Voilà enfin les corrections attendues, qui rendent également enfin les choses compréhensibles.
    Bon.
    Tu n'as pas de boucle à faire. Surtout pas, puisque tu ne veux agir sur des lignes spécifiées correspondant à un clic sur une cellule spécifiée. Si tel n'était pas le cas et que tu voulais agir en boucle sur l'ensemble de tout cela, ce ne serait pas à faire dans un évènement de la feuille, mais dans une macro.

    Quel est donc très exactement ton but :
    1) agir d'un coup (et alors en boucle) sur l'ensemble
    ou
    2) n'agir que sur les lignes d'un sous-ensemble déterminé par la cellule ou tu double-cliques ?

    C'est très loin d'être la même chose et cela nécessite d'être défini clairement par toi.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Vous avez raison, je n'avais pas vu que je pensais mal
    Je veux simplement au clic sur la cellule comme le code présent sans la boucle.
    Je masquerai les lignes que je voudrais à l'ouverture de la feuille.
    Je dois donc reproduire ce code pour chaque cellule ?

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    C'est alors ceci, que tu cherches à faire -->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
      If Target.Column = 2 Then
        Select Case Target.Row
         Case Is < 56, Is > 191
           Exit Sub
         Case Else
           Cancel = True
           If Target.Row Mod 9 <> 2 Then Exit Sub
           Range(Cells(Target.Row + 2, 2), Cells(Target.Row + 8, 2)).EntireRow.Hidden = _
    Not Range(Cells(Target.Row + 2, 2), Cells(Target.Row + 8, 2)).EntireRow.Hidden
         End Select
     
        End If
    End Sub
    EDIT (corrigé) : ce n'est pas +1, mais +2 partout ou j'avais mis +1
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    C'est parfait.

    Comment faire svp pour afficher que les lignes 56,57,58,62 et 63 ? mais masquer comme dans le code de 57 à 64 ?
    En gros comment signaler plusieurs lignes qu'une suite de lignes?

    Merci

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Hé là ! analyse mon code, puis à toi maintenant de jouer (tu y as tout pour faire toi-même, maintenant) en t'en inspirant.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Ok.
    J'essaierai de mettre tout ça en pratique dans le vrai fichier demain au travail
    Merci beaucoup pour votre aide

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    c'est un peu difficile
    il y a pour moi une contradiction dans ceci:
    Comment faire svp pour afficher que les lignes 56,57,58,62 et 63 ? mais masquer comme dans le code de 57 à 64 ?
    je pense que tu t'exprime mal ou alors ce que tu cherche a faire est impossible
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    je pense que tu t'exprime mal
    oui, mais j'ai compris -->> il masque tout -->> il ne remontre pas tout
    Il lui faut simplement décomposer en 2 étapes distinctes en lieu et place d'inverser par not.
    Je souhaite personnellement qu'on le laisse un peu travailler maintenant seul (il a déjà une piste dans ma phrase précédente)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #15
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je vais te souffler une idée toute bête qu'il devrait t'être ultra-facile de mettre en oeuvre --->>
    Regarde cette petite phrase et comprends-là --->>
    faut tout cacher et n'appliquer le not qu'à ce qu'il faut remontrer plus tard, mais à la seule condition que ces lignes à remontrer soient cachées à ce moment-là (ne rien faire sinon).
    Non, j'ai dit là une bêtise
    cache séparément :
    - sans not (donc toujours hidden = true) celles à ne pas remontrer
    et
    - avec hidden = not hidden celles à remontrer
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #16
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    J'essaie de corriger ce code
    mais j'avoue que je ne comprends pas bien et je n'y arrive pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Target.Row Mod 9 <> 2 Then Exit Sub
           .Rows("58:64").EntireRow.Hidden = .Rows("58:64").EntireRow.Hidden = True   
    Not Range(Cells(Target.Row + 1, 2); Cells(Target.Row + 6, 2); Cells(Target.Row + 7, 2)).EntireRow.Hidden

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Hola ...
    Tu n'as donc pas compris l'essentiel, que je vais t'exposer autrement :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range(..x..).entirerow.hidden = true
    a pour effet de cacher systématiquement systématiquement la/les ligne(s) de la plage Range(..x.)
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range(..y..).entirerow.hidden = not range(..y..).entirerow.hidden
    a pour effet d'inverser cacher/montrer la/les ligne(s) de la plage Range(..y.)
    C'est quand même simple ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Ce n'est malheureusement pour moi pas clair.
    J'essaierai cet aprèm
    Dans un premier temps cacher toutes les lignes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range(..x..).entirerow.hidden = true
    Puis afficher que quelques lignes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range(..y..).entirerow.hidden = not range(..y..).entirerow.hidden
    J'ai essayé mais je comprends rien

    C'est pas gagné

    Merci

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour !

    En testant les 2 conditions en même temps, cela pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      Private Sub Worksheet_BeforeRightClick(ByVal R As Range, Cancel As Boolean)
      If Intersect(R, [B56:B191]) Is Nothing Or (R.Row - 2) Mod 9 Then Exit Sub
        Dim P As Range
        Cancel = 1 'la fenêtre de la liste d'actions prévues n'apparaît plus et on reste sur-place
        Set P = R(2, 1).Resize(8)          
        P.EntireRow.Hidden = Not P.EntireRow.Hidden
        If P.EntireRow.Hidden = 0 Then Exit Sub
        R(3, 1).Resize(2).EntireRow.Hidden = 0 '0 pour False
        R(7, 1).Resize(2).EntireRow.Hidden = 0
      End Sub
    Quelques explications :
    - une évènementielle de ce type ne s'écrit que dans la Fenêtre de codes de la feuille concernée (Alt F11).
    Il est superflu de faire référence à l'onglet (WithEnd With, ActiveSheet peuvent être oubliés).

    - pour afficher /cacher une ligne, on dispose de .EntrireRow.Hidden = 'True ou False.
    On a un effet bascule (va et vient) en utilisant Not.
    Cas = Not Cas : quand Cas est Vrai il passe à Faux, quand il est Faux, il passe à Vrai.

    Quand on veut travailler sur plusieurs lignes on peut les prendre une par une mais cela peut être fastidieux.
    On pense alors passer par une boucle.
    - quand les lignes sont contiguës, c'est très simple.
    - quand elles ne le sont pas, cela est plus délicat à traiter et…
    Quand cela se complique (lignes non contiguës), on peut s'en sortir en utilisant la fonction Mod, la propriété .Resize
    - a Mod b donne le reste de la division de a par b. quand a est un multiple de b, a Mod b est égal à 0.
    - Plage.Resize(l,c) donne une plage qui commence par la même cellule mais avec l ligne(s) et c colonne(s).
    On peut se dispenser du c quand on veut garder la colonne de départ comme ci-dessus

    Je mets ci-joint un exemple avec des explications visuelles.
    Il suffira de recopier la macro ci-dessus (au bon endroit bien sûr).
    Fichiers attachés Fichiers attachés

  20. #20
    Membre du Club
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    ca me semble trés bien
    Je testerai demain si possible à mon travail
    Je vous tient au courant

    Je vous remercie beaucoup

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Masquer et afficher des lignes non consécutives avec VBA
    Par 94olivieroma dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/08/2017, 18h36
  2. Réponses: 6
    Dernier message: 14/08/2013, 12h21
  3. Masquer ou afficher des lignes si checkbox cochées ou non
    Par djyna dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2013, 04h31
  4. [XL-2003] Masquer ou afficher des lignes suivant clic sur bouton voulu
    Par stephj dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/02/2011, 09h41
  5. Réponses: 4
    Dernier message: 31/05/2004, 12h26

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