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

Fermé
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020 - Modifié le 9 juin 2020 à 17:34
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020 - 9 juin 2020 à 20:39
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 !
A voir également:

7 réponses

Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 167
Modifié le 9 juin 2020 à 17:51
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
Bonjour j'ai mis des numéros bidons.

Disons que la liste déroulante est en ac1.

Merci
Cordialement
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
Modifié le 9 juin 2020 à 18:29
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
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
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110 > Enilorac29
Modifié le 9 juin 2020 à 19:01
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
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020 > Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025
9 juin 2020 à 19:05
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
jordane45 Messages postés 38372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 janvier 2025 4 722
9 juin 2020 à 17:47
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
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
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
Modifié le 9 juin 2020 à 18:13
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
Bonjour je suis en train d'essayer je suis débutante. Je fais au mieux .
0
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020
9 juin 2020 à 19:00
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
Modifié le 9 juin 2020 à 19:44
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
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020
9 juin 2020 à 19:17
Super ! Reste plus qu'à trouver comment enregistrer et je pense que ça devrait aller... J'ai un message d'erreur quand j'enregistre...
0
jordane45 Messages postés 38372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 janvier 2025 4 722
9 juin 2020 à 19:26
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
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
9 juin 2020 à 19:21
Re,

quel type de message d'erreur !
0
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020
9 juin 2020 à 19:34
Erreur de compilation
Bloc if sans end if
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110 > Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020
Modifié le 9 juin 2020 à 19:43
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
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020 > Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020
9 juin 2020 à 19:41
C'est bon j'ai réussi à enregistrer mes toutes les lignes restent masquées tout le temps...
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
Modifié le 9 juin 2020 à 19:56
é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
Enilorac29 Messages postés 12 Date d'inscription mardi 9 juin 2020 Statut Membre Dernière intervention 11 juin 2020
9 juin 2020 à 20:39
Merci Mike-31 je vais essayer je vous tiens informé ! Encore merci pour l'aide!
0