simplifier code par Boucle

chaelie2015

XLDnaute Accro
Bonjour Forum
Je souhaite simplifier ce code par une boucle de A33=0 jusqu’à A33=20
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

 
    Select Case [A33]
    Case 1
        Rows("13:13").Hidden = False 
        Rows("14:32").Hidden = True 
    Case 2 'cas 2
        Rows("13:14").Hidden = False 
        Rows("15:32").Hidden = True 
    Case 3
        Rows("13:15").Hidden = False 
        Rows("16:32").Hidden = True 
    Case 4
        Rows("13:16").Hidden = False 
        Rows("17:32").Hidden = True 
    Case 5 'cas 2
        Rows("13:17").Hidden = False 
        Rows("18:32").Hidden = True 
    Case 6
        Rows("13:18").Hidden = False
        Rows("19:32").Hidden = True
    Case Else 'autre cas
        Rows("13:32").Hidden = True 'Masquer toutes les lignes
End Select 'fin de l'action en fonction de...
End Sub
MERCI
 

pierrejean

XLDnaute Barbatruc
Re : simplifier code par Boucle

bonjour chaelie

A tester:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
ldeb = 13
coldeb = 12
   Rows("13:" & coldeb + [A33]).Hidden = False
   Rows(ldeb + [A33] & ":32").Hidden = True
   If [A33] > 20 Then Rows("13:32").Hidden = True
 End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : simplifier code par Boucle

Bonjoue Chaelie, bonjour le forum,

Tu peux te passer d'une boucle. Essaie comme ça :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$33" Then Exit Sub
If Not IsNumeric(Target.Value) Then Exit Sub
If Target.Value < 0 Or Target.Value > 20 Then Exit Sub

Rows("13:" & Target.Value + 13).Hidden = False: If Target.Value = 20 Then Exit Sub
Rows(Target.Value + 13 & ":32").Hidden = True
End Sub

[Édition]
Bonjour PierreJean nos posts se sont croisés...
 

Chris401

XLDnaute Accro
Re : simplifier code par Boucle

Bonjour à tous

A tester :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Integer, Lig As Integer

If Target.Address = "$A$33" Then
For Lig = 13 To 32
        Cells(Lig, 1).Rows.Hidden = IIf(Lig < Target + 13, False, True)
      Next
End If
End Sub
Cordialement
Chris
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : simplifier code par Boucle

Bonjour le fil, bonjour le forum,

Tu as raison Chaelie nos codes ne fonctionne que si l'on tape les valeurs de 0 à 20 à la suite mais dès que l'on tape directement une valeur intermédiaire, ça na fonctionne plus...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : simplifier code par Boucle

Re,

Alors... Je laisse les spécialistes se dépatouiller avec.
Mais la prochaine fois pense à donner ce genre d'information dans ton premier post... Car l'événementielle adéquate n'est plus Change mais Calculate si je ne m'abuse...
 

Papou-net

XLDnaute Barbatruc
Re : simplifier code par Boucle

Bonjour à tous,

A ce que je sais, la modification de la valeur d'une cellule par sa formule ne déclenche pas l'événement Change.

Il faudrait envisager d'utiliser un autre événement mais sans autre précision, difficile à définir.

Cordialement.

Edit: il faudrait agir sur la cellule qui est à l'origine du calcul de la formule.
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : simplifier code par Boucle

salut

Comme je l’ai compris et avec la même réflexion que Papou-net ;)

Si on cache, on ne peut plus toucher aux cellules correspondantes donc, à part les cellules affichées, c’est figé.

Pour passer en mode actif (toucher aux cellules intermédiaires comme le dit Robert ;), il faut le prévoir donc voir l’exemple joint avec un bouton bascule.
 

Pièces jointes

  • Afficher Cacher lignes Si.xlsm
    19.9 KB · Affichages: 48

Discussions similaires

Réponses
3
Affichages
230

Statistiques des forums

Discussions
312 370
Messages
2 087 690
Membres
103 640
dernier inscrit
So pizza