XL 2013 (RESOLU) Affichage et Masquage des lignes en fonction de la valeur numérique dans une cellule.

chaelie2015

XLDnaute Accro
Bonsoir Forum
Je souhaite automatiser l'affichage et la masquage des lignes de A17 à A47 (feuilleBest) en fonction de la valeur résultante d'une formule dans la cellule AM6, qui est un chiffre.
Merci
 
Solution
Mais au vu de votre fichier, comme AM6 change sur changement de valeur de AL5 AL6, Cette PJ est plus intéressante :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [AL5:AL6]) Is Nothing Then
        N = [AM6].Value
        Application.EnableEvents = False
        If N > 0 And N <= 31 Then
            Application.ScreenUpdating = False
            L = 17 + N
            Rows("17:48").Hidden = False
            Rows(L & ":48").Hidden = True
        Else
            Rows("17:48").Hidden = False
        End If
    End If
Fin:
Application.EnableEvents = True
End Sub
car Worksheet_Calculate s'exécutera à chaque recalcul dans la feuille, alors que...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chaelie,
Un essai en PJ avec :
VB:
Sub Worksheet_Calculate()
    If [AM6].Value = 10 Then            ' Adapter 10 avec la valeur désirée pour masquer les lignes
        Rows("17:47").Hidden = True
    Else
        Rows("17:47").Hidden = False
    End If
End Sub
 

Pièces jointes

  • Classeur2.xlsm
    13 KB · Affichages: 3

chaelie2015

XLDnaute Accro
Bonjour Chaelie,
Un essai en PJ avec :
VB:
Sub Worksheet_Calculate()
    If [AM6].Value = 10 Then            ' Adapter 10 avec la valeur désirée pour masquer les lignes
        Rows("17:47").Hidden = True
    Else
        Rows("17:47").Hidden = False
    End If
End Sub
Bonjour sylvanu
Je vous remercie pour la réponse, cependant, ce que je souhaite faire, c'est cacher ou afficher les lignes de A17 à A47 en fonction du contenu de la cellule AM6. Par exemple, si AM6 contient le chiffre 28, alors je voudrais masquer les lignes de 45 à 47, tout en laissant les autres lignes (7 à 44) visibles.
Merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Désolé, la demande n'était pas claire sur ce point.
En PJ un essai avec :
VB:
Sub Worksheet_Calculate()
    N = [AM6].Value
    If N > 0 And N <= 30 Then
        Application.ScreenUpdating = False
        L = 17 + N
        Rows("17:47").Hidden = False
        Rows(L & ":47").Hidden = True
    Else
        Rows("17:47").Hidden = False
    End If
End Sub
Par défaut si dans AM6 la valeur est erronée alors j'affiche tout. Sinon supprimez le Else.
 

Pièces jointes

  • Classeur2V2.xlsm
    13.3 KB · Affichages: 1

chaelie2015

XLDnaute Accro
Re
Je m'excuse de ne pas avoir été plus explicite.
Ton code dans le fichier que tu as fourni fonctionne correctement. Malheureusement, dans mon fichier (qui y est rattaché), cela n'a pas donné le résultat souhaité.
A+
 

Pièces jointes

  • Charlie-Vesion Test 18 10 2023.xlsm
    35.9 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'ai rajouté un Application.EnableEvents = False pour ne pas que votre macro s'appelle elle même.
... et en plus le fichier permet de comprendre à quoi ça sert. J'y ai vu un bug dans la macro en terme de N° de lignes, j'ai rectifié avec :
VB:
Sub Worksheet_Calculate()
    On Error GoTo Fin
    N = [AM6].Value
    Application.EnableEvents = False
    If N > 0 And N <= 31 Then
        Application.ScreenUpdating = False
        L = 17 + N
        Rows("17:48").Hidden = False
        Rows(L & ":48").Hidden = True
    Else
        Rows("17:48").Hidden = False
    End If
Fin:
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Charlie-Vesion Test 18 10 2023.xlsm
    34.3 KB · Affichages: 0

sylvanu

XLDnaute Barbatruc
Supporter XLD
Mais au vu de votre fichier, comme AM6 change sur changement de valeur de AL5 AL6, Cette PJ est plus intéressante :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [AL5:AL6]) Is Nothing Then
        N = [AM6].Value
        Application.EnableEvents = False
        If N > 0 And N <= 31 Then
            Application.ScreenUpdating = False
            L = 17 + N
            Rows("17:48").Hidden = False
            Rows(L & ":48").Hidden = True
        Else
            Rows("17:48").Hidden = False
        End If
    End If
Fin:
Application.EnableEvents = True
End Sub
car Worksheet_Calculate s'exécutera à chaque recalcul dans la feuille, alors que Worksheet_Change ne s'exécutera que lors de changement dans AL5:AL6.
D'où l'intérêt des fichiers test représentatif, cela permet de mieux optimiser les solutions.
 

Pièces jointes

  • Charlie-Vesion Test 18 10 2023 V2.xlsm
    34.5 KB · Affichages: 3

chaelie2015

XLDnaute Accro
Mais au vu de votre fichier, comme AM6 change sur changement de valeur de AL5 AL6, Cette PJ est plus intéressante :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [AL5:AL6]) Is Nothing Then
        N = [AM6].Value
        Application.EnableEvents = False
        If N > 0 And N <= 31 Then
            Application.ScreenUpdating = False
            L = 17 + N
            Rows("17:48").Hidden = False
            Rows(L & ":48").Hidden = True
        Else
            Rows("17:48").Hidden = False
        End If
    End If
Fin:
Application.EnableEvents = True
End Sub
car Worksheet_Calculate s'exécutera à chaque recalcul dans la feuille, alors que Worksheet_Change ne s'exécutera que lors de changement dans AL5:AL6.
D'où l'intérêt des fichiers test représentatif, cela permet de mieux optimiser les solutions.
Bobjour sylvanu
Mon problème est résolu, je vous remercie.
A+
 

Discussions similaires

Statistiques des forums

Discussions
313 296
Messages
2 096 913
Membres
106 786
dernier inscrit
Mgordat