Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 ?



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.
 

Staple1600

XLDnaute Barbatruc
Re

Ce que je voulais dire: c'est que je ne comprends pas la logique de la chose
Exemple: pourquoi masquer 5:8 pour ensuite afficher 5:5
autant masquer directement 7:8 , non ?
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
320
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…