XL 2019 Cacher certaines lignes suivant la valeur d'une cellule

Bobo80

XLDnaute Nouveau
Bonjour à tous :)
Je ne my connait pas trop en macro VBA, alors j'ai un peu cherché, mais j'ai encore un problème..

J'aimerais cacher certaines lignes suivant la valeur d'une cellule, mais j'ai différentes lignes à cacher suivant les valeurs, comment tout faire dans une seul macro ? car j'ai compris que l'on ne peut avoir qu'une seul procédure..

Ci-dessous ce que j'aimerais faire, qui n'est donc pas juste... comment le faire ?

En vous remerciant :)

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("d7") = "10505413" Or Range("d7") = "10511467" Or Range("d7") = "10512514" Or Range("d7") = "10526846" Then
Rows("18:30").Hidden = True
Rows("34:37").Hidden = True
Else
Rows("18:30").Hidden = False
Rows("34:37").Hidden = False
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("d7") = "20596400" Or Range("d7") = "20596401" Or Range("d7") = "20596402" Or Range("d7") = "20596403" Or Range("d7") = "20596404" Then
Rows("18:30").Hidden = True
Else
Rows("18:30").Hidden = False
End If
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Bobo, et bienvenu sur XLD,
En PJ un essai.
Il ne peut y avoir qu'un Worksheet_Change dans une feuille, donc il faut adapter les deux macros pour n'en faire qu'une :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False ' Affichage figé
Rows("18:30").Hidden = True
Rows("34:37").Hidden = True
If Range("d7") = "10505413" Or Range("d7") = "10511467" Or Range("d7") = "10512514" Or Range("d7") = "10526846" Then
Rows("18:30").Hidden = True
Rows("34:37").Hidden = True
Else
Rows("18:30").Hidden = False
Rows("34:37").Hidden = False
End If
If Range("d7") = "20596400" Or Range("d7") = "20596401" Or Range("d7") = "20596402" Or Range("d7") = "20596403" Or Range("d7") = "20596404" Then
Rows("18:30").Hidden = True
Else
Rows("18:30").Hidden = False
End If
End Sub
 

Pièces jointes

  • Bobo.xlsm
    14.1 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Application.ScreenUpdating = False ' Figer l'écran permet d’accélérer les choses et d'éviter des désagréments visuels, comme des lignes qui passeraient de Tue à False puis True.

Rows("18:30").Hidden = True '
Rows("34:37").Hidden = True 'Peut être supprimer, c'était juste pour partir sur une base connue pour faire les tests.
 

Bobo80

XLDnaute Nouveau
Application.ScreenUpdating = False ' Figer l'écran permet d’accélérer les choses et d'éviter des désagréments visuels, comme des lignes qui passeraient de Tue à False puis True.

Rows("18:30").Hidden = True '
Rows("34:37").Hidden = True 'Peut être supprimer, c'était juste pour partir sur une base connue pour faire les tests.
Merci pour l'info :)
En faite ca ne fonctionne pas tout à fait, il n'y a que les lignes 34:37 qui sont masqué pour la première condition, pas les 18:30, ca fonctionne par contre en enlevant la 2ème condition
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oui mais les spécifications qui posent problèmes :
Si j'ai 10505413 je masque 18:30,
mais au second test, comme la cellule est différente de 20596400 je les démasque !
On peut résoudre le problème ainsi :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    Rows("18:30").Hidden = True
    Rows("34:37").Hidden = True
If Range("d7") = "10505413" Or Range("d7") = "10511467" Or Range("d7") = "10512514" Or Range("d7") = "10526846" Then
    Rows("18:30").Hidden = True
    Rows("34:37").Hidden = True
    Exit Sub
Else
    Rows("18:30").Hidden = False
    Rows("34:37").Hidden = False
End If
If Range("d7") = "20596400" Or Range("d7") = "20596401" Or Range("d7") = "20596402" Or Range("d7") = "20596403" Or Range("d7") = "20596404" Then
    Rows("18:30").Hidden = True
Else
    Rows("18:30").Hidden = False
End If
End Sub
Avec le Exit sub, si la première condition est satisfaite, on fait l'action et on sort sans passer par le second test.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Une façon plus simple d'aborder le problème est d'utiliser Case :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Select Case [D7]
    Case "10505413" Or Range("d7") = "10511467" Or Range("d7") = "10512514" Or Range("d7") = "10526846"
        Rows("18:30").Hidden = True
        Rows("34:37").Hidden = True
    Case "20596400" Or Range("d7") = "20596401" Or Range("d7") = "20596402" Or Range("d7") = "20596403" Or Range("d7") = "20596404"
        Rows("18:30").Hidden = True
        Rows("34:37").Hidden = False
    Case Else
        Rows("18:30").Hidden = False
        Rows("34:37").Hidden = False
End Select
End Sub

 

Bobo80

XLDnaute Nouveau
Une façon plus simple d'aborder le problème est d'utiliser Case :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Select Case [D7]
    Case "10505413" Or Range("d7") = "10511467" Or Range("d7") = "10512514" Or Range("d7") = "10526846"
        Rows("18:30").Hidden = True
        Rows("34:37").Hidden = True
    Case "20596400" Or Range("d7") = "20596401" Or Range("d7") = "20596402" Or Range("d7") = "20596403" Or Range("d7") = "20596404"
        Rows("18:30").Hidden = True
        Rows("34:37").Hidden = False
    Case Else
        Rows("18:30").Hidden = False
        Rows("34:37").Hidden = False
End Select
End Sub

Merci pour ces tuyaux ! pas encore pu tester, mais sympa !
 

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 281
Membres
103 170
dernier inscrit
HASSEN@45