simplifier un code

chaelie2015

XLDnaute Accro
Bonsoir forum
je souhaite simplifier ce code
Private Sub Worksheet_Change(ByVal Target As Range)

Rows("5:8").Hidden = 1: Rows("5:" & 5 + Int([L5])).Hidden = 0
Rows("9:12").Hidden = 1: Rows("9:" & 9 + Int([L9])).Hidden = 0
Rows("13:16").Hidden = 1: Rows("13:" & 13 + Int([L13])).Hidden = 0
Rows("17:20").Hidden = 1: Rows("17:" & 17 + Int([L17])).Hidden = 0
Rows("21:24").Hidden = 1: Rows("21:" & 21 + Int([L21])).Hidden = 0

End Sub
Merci
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, chaelie2015, mapomme

Un de vous deux peut éclairer ma lanterne, svp
En testant ainsi le code de mapomme (message#2)
(sur une feuille vierge)
VB:
Sub Tests_B()
Dim i&
Range("L5,L9,L13,L17,L21").Formula = "=INT(ROW()/3)"
Range("L5:L21") = Range("L5:L21").Value
For i = 0 To 4
  MsgBox Cells(5 + 4 * i, 1).Resize(4).EntireRow.Address, , "Hidden = 1"
  MsgBox Cells(5 + 4 * i, 1).Resize(1 + Cells(5 + 4 * i, "L")).EntireRow.Address, , "Hidden = 0"
Next i
End Sub
Les plages se chevauchent, non ?
Il y a un truc que je pige pas
(On masque des lignes et dans la foulée on démasque une partie de ces mêmes lignes ??)

PS: Ce n'est pas le code de ma pomme qui me pose question, mais le but recherché
J'aurais les même MsgBox en faisant le test avec le code de chaelie2015
EDITION:
VB:
Sub Tests_A()
Dim Mess$
Range("L5,L9,L13,L17,L21").Formula = "=INT(ROW()/3)"
Range("L5:L21") = Range("L5:L21").Value
Mess = Rows("5:8").Address & Chr(13) 'Hidden = 1
Mess = Mess & Rows("5:" & 5 + Int([L5])).Address & Chr(13) 'Hidden = 0
Mess = Mess & Rows("9:12").Address & Chr(13) 'Hidden = 1
Mess = Mess & Rows("9:" & 9 + Int([L9])).Address & Chr(13) 'Hidden = 0
Mess = Mess & Rows("13:16").Address & Chr(13) 'Hidden = 1
Mess = Mess & Rows("13:" & 13 + Int([L13])).Address & Chr(13) 'Hidden = 0
Mess = Mess & Rows("17:20").Address & Chr(13) 'Hidden = 1
Mess = Mess & Rows("17:" & 17 + Int([L17])).Address & Chr(13) 'Hidden = 0
Mess = Mess & Rows("21:24").Address & Chr(13) 'Hidden = 1
Mess = Mess & Rows("21:" & 21 + Int([L21])).Address & Chr(13) 'Hidden = 0
MsgBox Mess
End Sub
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @Staple1600,

Je ne vois pas en quoi les plages se chevauchent puisqu'à cause du Covid-19 une distance de 1m minimum est exigée sur la plage comme ailleurs.

chaelie2015 a précisé dans son fichier qu'en colonne L les nombres concernés était compris entre 0 et 3. Donc pour ton exemple, plutôt le modulo 4 de la ligne que la partie entière.
 

Staple1600

XLDnaute Barbatruc
Re

Dans le doute, j'ai refais un test
Je ne comprends toujours pas
VB:
Sub Tests_D()
Dim i&, Mess$
Range("L5,L9,L13,L17,L21").FormulaR1C1 = "=RANDBETWEEN(0,3)"
Range("L5:L21") = Range("L5:L21").Value
For i = 0 To 4
  Mess = Mess & Cells(5 + 4 * i, 1).Resize(4).EntireRow.Address & " |Hidden = 1" & Space(10) _
   & Cells(5 + 4 * i, 1).Resize(1 + Cells(5 + 4 * i, "L")).EntireRow.Address & " |Hidden = 0" & Chr(13)
Next i
MsgBox Mess
End Sub
Il y a bien des lignes communes, non ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Il y a bien des lignes communes, non ?

1584273867569.png


En fait, on a 5 blocs de lignes de 4 lignes.
Pour chaque bloc, on masque les lignes et ensuite on ré-affiche un certain nombre de lignes de chaque bloc en partant de la première ligne du bloc. Ce nombre est celui lu en colonne L augmenté de 1. Comme la valeur de L est entre 0 et 1, on ré-affiche entre 1 à 4 lignes de chaque bloc. Il n'y a pas chevauchement.

Ce qu'on peut encore améliorer, c'est le masquage des lignes de tous les blocs en une seule instruction (avant la boucle). La boucle ne gérant que le ré-affichage en fonction des valeurs de la colonne L.
 

Discussions similaires

Réponses
3
Affichages
333

Statistiques des forums

Discussions
314 495
Messages
2 110 215
Membres
110 706
dernier inscrit
debby.f1