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

Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -
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   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
Enilorac29
 
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 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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
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
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135 > 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
Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > Mike-31 Messages postés 18405 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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
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
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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
Enilorac29
 
Bonjour je suis en train d'essayer je suis débutante. Je fais au mieux .
0
Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
0

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

Posez votre question
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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   Statut Membre Dernière intervention  
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

quel type de message d'erreur !
0
Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Erreur de compilation
Bloc if sans end if
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135 > Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > Enilorac29 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bon j'ai réussi à enregistrer mes toutes les lignes restent masquées tout le temps...
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
é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   Statut Membre Dernière intervention  
 
Merci Mike-31 je vais essayer je vous tiens informé ! Encore merci pour l'aide!
0