Autres Specialcells : Cacher ligne sur plage discontinue (Pb)

zebanx

XLDnaute Accro
Bonjour à tous,

Ci-joint un code qui fonctionne bien sur une plage continue (Feuil1) mais qui pose problème sur une plage discontinue (feuille 2).
Le but est de cacher les lignes qui affiche 0 en colonne D et E.

Pourriez-vous m'indiquer ce qui ne va pas svp, sachant qu'avec le pas à pas détaillé c'est la ligne ".value = .value" qui semble poser problème ?

VB:
Sub ash_cacheLV_SUMPRODUCT_F2()
Dim plage As Range
Dim t0, n%

'--définition de la plage de recherche
Set ash = Sheets(2) 'ActiveSheet
Set plage = ash.Range("G2:G19,G27:G41")
t0 = Timer

On Error Resume Next
'--boucle
With plage
  .Formula = "=1/(1/SUMPRODUCT(N(D2:E2<>0)))"
  .Value = .Value  '-- A ce passage les #DIV/0! ne sont pas conservés : pourquoi svp ?
  n = Application.Count(.SpecialCells(xlCellTypeConstants, 16))
  .SpecialCells(xlCellTypeConstants, 16).EntireRow.Hidden = True
  .Value = ""
End With

With sh06f.UsedRange: End With 'actualise les barres de défilement
MsgBox Format(Timer - t0, "0.00\ sec." & vbCrLf & n & " lignes cachées")

End Sub

Vous en remerciant, bonne fin de journée

zebanx
 

Pièces jointes

  • question.xlsm
    51.3 KB · Affichages: 8

zebanx

XLDnaute Accro
Bonjour Roblochon ;)

Je te remercie pour ta réponse qui fonctionne bien avec deux boucles.
C'est parfait, j'étais loin de la solution.

Bonne soirée à toi
zebanx

VB:
Sub ash_cacheLV_SUMPRODUCT_F2()
Dim plage As Range
Dim t0, n%

'--définition de la plage de recherche
Set ash = Sheets(2) 'ActiveSheet
Set plage = ash.Range("G2:G19,G27:G41")
t0 = Timer

On Error Resume Next
'--boucle 1
With plage
.Formula = "=1/(1/SUMPRODUCT(N(D2:E2<>0)))"
End With

'--boucle 2
For Each plage In ash.Range("G2:G19,G27:G41").Areas
    ' Travaille sur la plage en cours
    With plage
    .Value = .Value
    n = Application.Count(.SpecialCells(xlCellTypeConstants, 16))
    .SpecialCells(xlCellTypeConstants, 16).EntireRow.Hidden = True
    .Value = ""
End With
Next

With ash.UsedRange: End With 'actualise les barres de défilement
MsgBox Format(Timer - t0, "0.00\ sec." & vbCrLf & n & " lignes cachées")
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 453
Messages
2 088 551
Membres
103 881
dernier inscrit
malbousquet