Créer macro pour masquer lignes à un partir d'une liste déroulante

Enilorac29 Messages postés 12 Statut Membre -  
Enilorac29 Messages postés 12 Statut Membre -
Bonjour,

Je souhaite créer une macro pour masquer certaines lignes d'un fichier selon la sélection effectuée dans un liste déroulante en cellule ac15.

Selon la sélection effectuée les lignes à masquer diffère. Je ne connais pas du tout les macros et souhaiterais obtenir un coup de main urgent si possible.

Ex : liste déroulante choix A -B - C

Si A est sélectionné masquer les lignes 10 à 12 et 15 à 20
Si B est sélectionné masquer les lignes 13 à 14 et 21 à 25
Si C est sélectionné masquer les lignes 10 à 25

Merci de votre retour rapide!

Cordialement !

7 réponses

  1. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
     
    Bonjour, pour partager votre fichier, c'est par ici :

    https://www.cjoint.com/

    Déjà qq chose n'ira pas : si les lignes 15 à 20 sont masquées, il n'y aura plus de menu déroulant !

    Suivant comment sera écrit la macro, si on lui dit "regarde" la valeur en AC15 pour masquer les lignes concernées, il va y avoir un bug !

    0
    1. Enilorac29
       
      Bonjour j'ai mis des numéros bidons.

      Disons que la liste déroulante est en ac1.

      Merci
      Cordialement
      0
  2. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    le problème dans ton cas est que la cellule de commande AC15 se trouve parmis les lignes masquées dans deux cas, si en AC15 tu as A ou C
    et après ces deux cas impossible d'avoir accès à AC15
    peux tu déplacer la liste de validation !

    autrement un code très simple en changeant AC15
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, [AC15]) Is Nothing Then
    Range("10:25").EntireRow.Hidden = False
    If Target = "A" Then Range("10:12,15:20").EntireRow.Hidden = True
    If Target = "B" Then Range("13:14,21:25").EntireRow.Hidden = True
    If Target = "C" Then Range("10:25").EntireRow.Hidden = True
    End If
    End Sub
     


    Edit: ajout des balises de code

    0
    1. Enilorac29
       
      Bonjour Mike-31
      Merci pour le code. J'ai tenté une approche mais n'arrive pas à exécuter la macro. Comment fait-on pour enregistrer la macro et l'exécuter ?
      Merci
      0
      1. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147 > Enilorac29
         
        Re,

        pour mon code,
        clic droit sur l'onglet de la feuille concernée/Visualiser le code et coller mon code

        par contre en regardant tes réponses "si dans la première partie je souhaite que les lignes restent masquées tant aucune de mes options de la liste déroulante n'est pas sélectionnée"

        que veux tu exactement, que toutes tes lignes citées soient masquées et si dans la cellule cible tu as A que faut il masquer et afficher !
        0
      2. Enilorac29 Messages postés 12 Statut Membre > Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour
        En gros j'ai une liste dans la cellule ac15. Toutes les lignes à partir de 17 jusqu'à 375 doivent être masquées jusqu'à la sélection dans la liste déroulante.

        Si la sélection est A ça doit masquer ou faire apparaître certaines de ces lignes.
        En exemple les lignes 17 à 22 puis 32 à 375
        Si B ça doit masquer 17 à 31 puis 38 à 375...
        Etc.

        C'est mieux?
        0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Bonjour,

    ça devrait donner un truc du genre
    Private Sub Worksheet_Change(ByVal Target As Range)
    
          'Si la valeur modifiée se trouve bien dans la cellule AC15
        If Not Application.Intersect(Target, Range("AC15")) Is Nothing Then
            'on réaffiche toutes les lignes
            Rows("10:25").EntireRow.Hidden = False
          'On masque en fonction de la valeur de ta liste
            Select Case Target.Value
                Case "A"
                    Rows("10:12").EntireRow.Hidden = True
                    Rows("15:20").EntireRow.Hidden = True
                Case "B"
                    Rows("13:14").EntireRow.Hidden = True
                    Rows("21:25").EntireRow.Hidden = True
                Case "C"
                    Rows("10:25").EntireRow.Hidden = True
             End Select
        End If
    
    End Sub
    

    A noter que la cellule AC15 .. se trouvant sur une des lignes à masquer... ta liste ne sera plus visible...
    0
    1. Enilorac29
       
      Merci pour l'aide je suis en train de tester. Par contre si dans la première partie je souhaite que les lignes restent masquées tant aucune de mes options de la liste déroulante n'est pas sélectionnée je fais comment?

      Merci encore!!
      0
  4. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Vous avez dit URGENT, comme c'est bizarre en 15 minutes 3 réponses et toujours pas de retour !

    il n'y a rien d'urgent que des gens pressés.

    0
    1. Enilorac29
       
      Bonjour je suis en train d'essayer je suis débutante. Je fais au mieux .
      0
    2. Enilorac29 Messages postés 12 Statut Membre
       
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, [AC15]) Is Nothing Then
    Range("17:375").EntireRow.Hidden = True
    If Target = "A" Then Range("17:22,32:375").EntireRow.Hidden = False
    If Target = "B" Then Range("17:31,38:375").EntireRow.Hidden = False
    'etc ...
    End If
    End Sub
     


    EDIT : Correction des balises de code. ( Ajout du langage pour avoir la coloration syntaxique et l'indentation)

    0
    1. Enilorac29 Messages postés 12 Statut Membre
       
      Super ! Reste plus qu'à trouver comment enregistrer et je pense que ça devrait aller... J'ai un message d'erreur quand j'enregistre...
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
       
      Bonsoir Mike-31,
      Quand tu postes du code, merci d'utiliser les BALISES DE CODE.
      Explications ( à lire entièrement....) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

      En tant que contributeur, je pensais que tu avais déjà connaissance de ce mécanisme.
      Merci de l'appliquer dans tes prochains messages
      0
  7. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    quel type de message d'erreur !
    0
    1. Enilorac29 Messages postés 12 Statut Membre
       
      Erreur de compilation
      Bloc if sans end if
      0
      1. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147 > Enilorac29 Messages postés 12 Statut Membre
         
        Re,

        non si tu écris le code comme je te l'ai écrit post 12 il n'y a pas de problème, ce bout de code est bien sur deux lignes

        If Not Intersect(Target, [AC15]) Is Nothing Then
        Range("17:375").EntireRow.Hidden = True


        par contre

        cette ligne comme les suivantes sont sur une ligne

        If Target = "A" Then Range("17:22,32:375").EntireRow.Hidden = False 


        EDIT : Correction des balises de code. ( Ajout du langage pour avoir la coloration syntaxique et l'indentation)
        0
      2. Enilorac29 Messages postés 12 Statut Membre > Enilorac29 Messages postés 12 Statut Membre
         
        C'est bon j'ai réussi à enregistrer mes toutes les lignes restent masquées tout le temps...
        0
  8. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    écrit le code comme cela, j'étais resté sur le code initial avec toute les lignes affichées

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, [AC15]) Is Nothing Then
    Range("17:375").EntireRow.Hidden = False
    If Target = "A" Then Range("17:22,32:375").EntireRow.Hidden = True
    If Target = "B" Then Range("17:31,38:375").EntireRow.Hidden = True
    If Target = "C" Then Range("17:375").EntireRow.Hidden = False
    End If
    End Sub


    0
    1. Enilorac29 Messages postés 12 Statut Membre
       
      Merci Mike-31 je vais essayer je vous tiens informé ! Encore merci pour l'aide!
      0