Bonsoir à tous,
Ce soir je réfléchis à une manière d'aborder et solutionner mon problème : comptage de la quantité de data visible d'un tableau filtré par type (ligne ; colonne ou cellule) via une fonction.
Contrainte : existence potentielle de groupes de colonne à l'état groupé ou dégroupé.
Sub comptelignevisible()
Dim lstoE As ListObject
Set lstoE = [Encours].ListObjects("Tbl_encours")
Nbligne = DataBodyRangeVisible(lstoE, 1)
MsgBox Nbligne
End Sub
Function DataBodyRangeVisible(xlsto As ListObject, Optional mode& = 0) As Long
'*** Compte la quantité visible de data : par qte de cellule, ligne ou colonne
'*** mode = 0 pour cellules / = 1 pour lignes / = 2 pour colonnes
Dim NbVisible&, area As Range
NbVisible = 0
On Error Resume Next 'SpecialCells retourne une erreur si rien n'est trouvé
For Each area In xlsto.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas
If mode = 0 Then NbVisible = NbVisible + area.Columns.Count * area.Rows.Count
If mode = 1 Then NbVisible = NbVisible + area.Rows.Count
If mode = 2 Then NbVisible = NbVisible + area.Columns.Count
Next
On Error GoTo 0
DataBodyRangeVisible = NbVisible
End Function
Je souhaite rendre ce code fiable en toute circonstance :
Contraintes supplémentaires :
- pas d'intervention dans la feuille du genre .Outline.ShowLevels
- une astuce pour éviter un code bouclant sur les .EntireRow.Hidden ou entirecolumn etc...
Ca revient peut être à tenter de conduire sans se servir de ses mains, mais on sait jamais, si un malin voit ce poste
Quoi qu'il en soit et comme toujours, merci d'avance d'avoir au moins lu ce sujet
EDIT : le best du best serait aussi la (non) prise en compte des lignes masquées manuellement. Je crois de mémoire que excel "triche" en leur appliquant une hauteur de ligne =0