Bonjour Forum
Le code fourni permet d'afficher une ligne spécifique en fonction de la valeur de la cellule U11. Cependant, un problème survient
1- lorsque la cellule U11 est vide : dans ce cas, toutes les lignes devraient être masquées.
2- De plus, il semble que la ligne 63 ne s'affiche pas correctement
Merci
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
Application.ScreenUpdating = False
If Not Intersect(Target, [U11]) Is Nothing Then
NumLig = Target + 13
Rows("13:62").EntireRow.Hidden = False
Rows(NumLig & ":62").EntireRow.Hidden = True
End If
Fin:
End Sub
Je te propose ce code qui remplit toutes tes demandes....
VB:
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim ValLig11&, ValLig64&
Rows("11:116").EntireRow.Hidden = False
If Not Application.Intersect(Target, Range("U11,U64")) Is Nothing Then
ValLig11 = [U11] + 13: ValLig64 = [U64] + 66
If ValLig11 <> 63 Then Rows(ValLig11 & ":62").EntireRow.Hidden = True
If ValLig64 <> 116 Then Rows(ValLig64 & ":115").EntireRow.Hidden = True
End If
End Sub
Sub Worksheet_Change(ByVal Target As Range)
Rows("13:63").EntireRow.Hidden = True
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub 'Gestion des erreurs : En cas d'erreur, le code saute à l'étiquette "Fin" pour terminer proprement la procédure.
Application.ScreenUpdating = False
If Not Intersect(Target, [U11]) Is Nothing Then
numlig = Target + 13
Rows("13:62").EntireRow.Hidden = False
If numlig < 63 Then
Rows(numlig & ":62").EntireRow.Hidden = True
Else
Rows("62:" & numlig).EntireRow.Hidden = False
End If
End If
Fin:
Application.ScreenUpdating = True
End Sub
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = Range("u11").Address Or Target.Address = Range("u64").Address Then
Rows("11:116").EntireRow.Hidden = False ' on affiche toutes les lignes
Rows("13:62").EntireRow.Hidden = True ' on masque les lignes de tous les soumissionnaires
Rows("13").Resize(Range("u11").Value).EntireRow.Hidden = False ' on affiche le nombre de soumissionnaires en U11
Rows("66:115").EntireRow.Hidden = True ' on masque les lignes de tous les items
Rows("66").Resize(Range("u64").Value).EntireRow.Hidden = False ' on affiche le nombre d'items en U64
End If
End Sub
Bonjour Annach , mapomme
Je vous remercie pour vos réponses,
@ Mapomme. tu as anticipé exactement ce que je pensais. Merci beaucoup !
mais ça n'a pas fonctionné ?
A+
Comme il y avait des listes de validations, je n'ai pas fait de vérification sur les valeurs de U11 et U64 !!!
Dans le code qui suit, c'est bétonné. On vérifie que les valeurs sont bien entre 1 et 50.
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = Range("u11").Address Or Target.Address = Range("u64").Address Then
Rows("11:116").EntireRow.Hidden = False
If Range("u11") >= 1 And Range("u11") <= 50 Then
Rows("13:62").EntireRow.Hidden = True
Rows("13").Resize(Range("u11").Value).EntireRow.Hidden = False
End If
If Range("u64") >= 1 And Range("u11") <= 50 Then
Rows("66:115").EntireRow.Hidden = True
Rows("66").Resize(Range("u64").Value).EntireRow.Hidden = False
End If
End If
End Sub
Bonjour sylvanu, mapomme
Je vous remercie pour le code. Il est simple et concis.
J'ai étendu sa fonctionnalité en y ajoutant une cellule supplémentaire.
Maintenant, je souhaite si j'efface les cellules U11 et U64, leurs plages respectives se masquent automatiquement.(que chaque fois que les cellules U11 et U64 sont modifiées,)
Merci
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub 'Gestion des erreurs : En cas d'erreur, le code saute à l'étiquette "Fin" pour terminer proprement la procédure.
Application.ScreenUpdating = False
If [U11] > 0 Then Rows("13").Resize(Range("u11").Value).EntireRow.Hidden = False
'Rows("13:62").EntireRow.Hidden = True
If [U64] > 0 Then Rows("66").Resize(Range("u64").Value).EntireRow.Hidden = False
'Rows("66:114").EntireRow.Hidden = True
Fin:
End Sub
Je te propose ce code qui remplit toutes tes demandes....
VB:
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim ValLig11&, ValLig64&
Rows("11:116").EntireRow.Hidden = False
If Not Application.Intersect(Target, Range("U11,U64")) Is Nothing Then
ValLig11 = [U11] + 13: ValLig64 = [U64] + 66
If ValLig11 <> 63 Then Rows(ValLig11 & ":62").EntireRow.Hidden = True
If ValLig64 <> 116 Then Rows(ValLig64 & ":115").EntireRow.Hidden = True
End If
End Sub