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
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...
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
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
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.
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+
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
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.
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.
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.