XL 2013 (RESOLU) Code afficher/Masquer problème

chaelie2015

XLDnaute Accro
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
 

Pièces jointes

  • Charlie masqué afficher lignes.xlsm
    29.6 KB · Affichages: 9
Solution
Bonjour à tous

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

Annach

XLDnaute Nouveau
Bonjour Chaelie2015,

A essayer:

VB:
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

Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @chaelie2015 :), @Annach :),

On fait les deux tableaux en même temps :
VB:
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
 

chaelie2015

XLDnaute Accro
Bonjour Annach , mapomme
Je vous remercie pour vos réponses,
@ Mapomme. tu as anticipé exactement ce que je pensais. :pMerci beaucoup !
mais ça n'a pas fonctionné ?
A+
 

Pièces jointes

  • Charlie masqué afficher lignes MAPOMME.xlsm
    28.3 KB · Affichages: 5

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai reproduit l'erreur,

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.

edit : bonjour @sylvanu :) .
VB:
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
 

chaelie2015

XLDnaute Accro
Bonjour Chaelie, Annach, Mapomme,
Dans votre fichier U11 est vide, c'est ce qui crée votre erreur.
Peut être avec :
VB:
If [U11] > 0 Then Rows("13").Resize(Range("u11").Value).EntireRow.Hidden = False
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
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

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
 

Statistiques des forums

Discussions
313 197
Messages
2 096 105
Membres
106 500
dernier inscrit
mmontagu