Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Filtre auto > Dernière cellule visible > VBA

7 réponses
Avatar
Philippe Muniesa
Bonjour à tous,

J'essaie d'atteindre la dernière Ligne visible d'une table en mode filtre
auto.

Quand je fais Range("A1").currentregion.specialcells(xltypelastcell) , VBA
me renvoie la dernière cellule de la table, et non pas la dernière cellule
visible.

J'ai fais

Set cellule = target.Offset(-1, 0)
While cellule.EntireRow.Hidden = True
Set cellule = cellule.Offset(-1, 0)
Wend

mais je suppose qu'il y a plus simple et surtout plus rapide si ma première
ligne visible se trouve 65000 lignes plus haut.

Merci d'avance

PHILIPPE

7 réponses

Avatar
CAP2
Salut,

rajoute à ton code un truc du style :

Selection.SpecialCells(xlCellTypeVisible).Select

Ca marche ?

CAP2
Avatar
Philippe Muniesa
Non

Selection.SpecialCells(xlCellTypeVisible).Address

me renvoie

$A$2:$L$2,$A$14:$L$14,$A$18:$L$18,$A$21:$L$21,$A$24:$L$24,$A$29:$L$29,$A$31:
$L$31,$A$35:$L$37,$A$41:$L$41,$A$46:$L$47,$A$50:$L$50,$A$52:$L$52,$A$55:$L$5
5,$A$58:$L$58,$A$60:$L$60,$A$64:$L$64,$A$68:$L$68,$A$71:$L$71,$A$74:$L$74,$A
$77:$L$77,$A$79:$L$79

La dernière cellule visible étant L1357

une autre idée ???

PHILIPPE


"CAP2" a écrit dans le message de
news:eno$
Salut,

rajoute à ton code un truc du style :

Selection.SpecialCells(xlCellTypeVisible).Select

Ca marche ?

CAP2




Avatar
AV
J'essaie d'atteindre la dernière Ligne visible d'une table en mode filtre
auto.


Sub zzzz()
Set plg = Range("A1", Cells(Cells.Find("*", , , , 2, 2).Row, Cells.Find("*", , ,
, 1, 2).Column))
MsgBox plg(plg.Count).Address
End Sub

PS : Je te déconseille fortement d'utiliser la méthode "SpecialCells" avec le
type "xlCellTypeLastCell"
Elle réserve bien des surprises car elle considère comme non vide les cellules
formatées autrement que par défaut et mémorise les précédentes
saisies/formatages mêmes s'ils ont été supprimés

Pour le fun :
Sub zzz2()
x StrReverse(Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Address)
y = """" & x & """"
MsgBox StrReverse(Left(x, Evaluate("find(""$""," & y & ",find(""$""," & y &
")+1)")))
End Sub

AV

Avatar
CAP2
Salut,

c'est normal puisque SpecialCells(xlCellTypeVisible) renvoie la plage des
cellules visibles. Il faut donc que tu continues avec :

Selection.SpecialCells(xlCellTypeLastCell).Address

à stocker dans une variable ou à afficher dans une MsgBox ou autre, pour
obtenir ton adresse de dernière cellule visible...

C'est mieux ?

CAP2
Avatar
CAP2
Salut Alain,

merci pour la remarque, j'en prends bonne note ;o))

CAP2
Avatar
Philippe Muniesa
Génial,

Merci AV ( et presque AV César :-))))

Mais ça necessite quelques explications ????

La syntaxe de find est
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection,
MatchCase, MatchByte, SearchFormat)

Mais

cells.find("*",,,,2,2) .row , qui retourne la ligne de la dernière cellule
non vide, je vois pas bine comment ça fonctionne. Si tu peux expliquer, ça
m'évitera de copier bêtement.

Je pense que je comprendrais le

cells.find("*",,,,2,2) .Column :-))))

Merci d'avance

Philippe


"AV" a écrit dans le message de
news:
J'essaie d'atteindre la dernière Ligne visible d'une table en mode
filtre


auto.


Sub zzzz()
Set plg = Range("A1", Cells(Cells.Find("*", , , , 2, 2).Row,
Cells.Find("*", , ,

, 1, 2).Column))
MsgBox plg(plg.Count).Address
End Sub

PS : Je te déconseille fortement d'utiliser la méthode "SpecialCells" avec
le

type "xlCellTypeLastCell"
Elle réserve bien des surprises car elle considère comme non vide les
cellules

formatées autrement que par défaut et mémorise les précédentes
saisies/formatages mêmes s'ils ont été supprimés

Pour le fun :
Sub zzz2()
x >
StrReverse(Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Address

)
y = """" & x & """"
MsgBox StrReverse(Left(x, Evaluate("find(""$""," & y & ",find(""$""," & y
&

")+1)")))
End Sub

AV





Avatar
AV
cells.find("*",,,,2,2) .row , qui retourne la ligne de la dernière cellule
non vide, je vois pas bine comment ça fonctionne. Si tu peux expliquer, ça
m'évitera de copier bêtement.


Il s'agit simplement du remplacement d'une constante vba par son index
Exemple avec l'argument "SearchOrder" :
2 choix possibles xlByColumns ou xlByRows
Si tu mets 1 ça signifiera xlByColumns et pour 2 ce sera xlByRows
Etc...

AV