OVH Cloud OVH Cloud

Sélectionner les cellules visibles

4 réponses
Avatar
Arnaud LECLEMENT
Bonsoir
J'essaie de mettre en oeuvre quelque chose de ce genre afin de sélectionner
les cellules visibles après un tri
Sheets("Travail").Range("A4:F500").SpecialCells(xlCellTypeVisible).Select
Je vous remercie
Arnaud

4 réponses

Avatar
anonymousA
bonnjour,

des infos sur la plagevisible suite à un filtre. Tu pioches pour voir ce
qui t'interesse


Set plagefiltre = ActiveSheet.AutoFilter.Range 'permet de repérer
l'ensemble de la zone sur laquelle s'applique le filtre de base

'autre méthode: en effet, par défaut Excel nomme toujours la plage
filtre _FilterDatabase. p.e si c'est la feuille 1 : Feuil1!_FilterDatabase.
'Si on veut l'atteindre quand on est sur la feuille1, il s'uffit
d'écrire Range("_FilterDatabase"). Si on est sur une autre feuille ou sur
'un autre classeur, il faut écrire

Set rng = Workbooks("toto.xls").Sheets(1).Range("_FilterDatabase")

Set plagefiltre = Range("_FilterDatabase")

Set plagefiltrevisible = plagefiltre.Offset(1,
0).Resize(plagefiltre.Rows.Count - 1,
plagefiltre.Columns.Count).SpecialCells(xlCellTypeVisible)

'méthode2 plus simple encore pour atteindre uniquement cellule d'une
colonne donnéé
'imaginons que la plage à filtre soit toujours plagefiltre donc débute
en A1.
'on veut atteindre la colonne décalée de I de A et on veut ne garder
qu'une seule
'colonne. On écrira alors

'Set plagefiltrevisible = plagefiltre.Offset(1,
I).Resize(plagefiltre.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
'dans ces conditions on fait un décalage de I et on ne garde qu'une
colonne avec le resize
'ensuite il faut juste faire for each c in plagefiltrevisible et le tour
est joué.
'on pourrait aussi écrire pour faire l'économie de set plagefiltre =
ActiveSheet.AutoFilter.Range

'With ActiveSheet.AutoFilter.Range
' Set plagefiltrevisible = .Offset(1, I).Resize(.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
'End With

'pour retrouver le range du filtre de base et eventuellement le nombre
de ligne sou autre

'Worksheets("nom feuille").AutoFilter.Filters(1).Parent.Range.Rows.Count

'*************************************************************************************************************
'Méthode pour trouver la 1ere ligne et la dernière ligne vivible après
un filtre

On Error Resume Next 'le on error est là pour préserver le fait que la
plage visible n'a peut être pas de cellules

With Range("_FilterDatabase")
'ici définit la plage filtrée visible
Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1,
.Columns.Count).SpecialCells(xlCellTypeVisible)

'on pourrait obetnir la 1ere ligne de la plage filtrée visible en
écrivant
'plagefiltrevisible.areas(1).rows(1) 'correspond à la 1ere ligne de
la 1ere zone de la plagefiltrevisible

'ici on cherche la dernière ligne de la plage filtrée visible en
écrivant
With plagefiltrevisible
.Areas(.Areas.Count).Rows(.Areas(.Areas.Count).Rows.Count).Select
End With

End With
'****************************************************************************************************************


'méthode1 pour atteindre les cellules de la colonne 5
For Each C In plagefiltrevisible

If C.Column = 5 Then
C.Select
MsgBox C.value
End If

Next
Dim plagevisible As Range

'méthode 3 sur la base des areas
'Set plagevisible = Range("A1:C17").SpecialCells(xlCellTypeVisible)
'MsgBox plagevisible.Count
'
'For J = 1 To plagevisible.Areas.Count
' For i = 1 To plagevisible.Areas(J).Cells.Count
' MsgBox plagevisible.Areas(J).Cells(i).Address
' Next
'Next

Exit Sub

'méthode 4 pour trouver le nbre de lignes visibles

'méthode 4.1

Set Plage =
ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

For Each ar In Plage.Areas
nblignes = ar.Rows.Count + nblignes
Next

MsgBox nblignes - 1 ' (-1 car on suppose que la ligne d'entete étant en
A1, cette ligne sera comptée evidemment)

'méthode 4.2

For Each cell In Selection
If Rows(cell.Row).Hidden = False Then
Ctr = Ctr + 1
End If
Next

Amuses-toi bien

A+

Bonsoir
J'essaie de mettre en oeuvre quelque chose de ce genre afin de sélectionner
les cellules visibles après un tri
Sheets("Travail").Range("A4:F500").SpecialCells(xlCellTypeVisible).Select
Je vous remercie
Arnaud




Avatar
Arnaud LECLEMENT
Bonsoir AnonymousA
Je suis confondu par tant de connaissances , t'es vraiment trop balèze !
Je vais imprimer tout cela, et l'étudier attentivement.
Un très grand MERCI !!!
Bonne soirée
Arnaud



"anonymousA" a écrit dans le message de news:
42dd3e3d$0$3136$
bonnjour,

des infos sur la plagevisible suite à un filtre. Tu pioches pour voir ce
qui t'interesse


Set plagefiltre = ActiveSheet.AutoFilter.Range 'permet de repérer
l'ensemble de la zone sur laquelle s'applique le filtre de base

'autre méthode: en effet, par défaut Excel nomme toujours la plage filtre
_FilterDatabase. p.e si c'est la feuille 1 : Feuil1!_FilterDatabase.
'Si on veut l'atteindre quand on est sur la feuille1, il s'uffit d'écrire
Range("_FilterDatabase"). Si on est sur une autre feuille ou sur
'un autre classeur, il faut écrire

Set rng = Workbooks("toto.xls").Sheets(1).Range("_FilterDatabase")

Set plagefiltre = Range("_FilterDatabase")

Set plagefiltrevisible = plagefiltre.Offset(1,
0).Resize(plagefiltre.Rows.Count - 1,
plagefiltre.Columns.Count).SpecialCells(xlCellTypeVisible)

'méthode2 plus simple encore pour atteindre uniquement cellule d'une
colonne donnéé
'imaginons que la plage à filtre soit toujours plagefiltre donc débute en
A1.
'on veut atteindre la colonne décalée de I de A et on veut ne garder
qu'une seule
'colonne. On écrira alors

'Set plagefiltrevisible = plagefiltre.Offset(1,
I).Resize(plagefiltre.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
'dans ces conditions on fait un décalage de I et on ne garde qu'une
colonne avec le resize
'ensuite il faut juste faire for each c in plagefiltrevisible et le tour
est joué.
'on pourrait aussi écrire pour faire l'économie de set plagefiltre =
ActiveSheet.AutoFilter.Range

'With ActiveSheet.AutoFilter.Range
' Set plagefiltrevisible = .Offset(1, I).Resize(.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
'End With

'pour retrouver le range du filtre de base et eventuellement le nombre de
ligne sou autre

'Worksheets("nom feuille").AutoFilter.Filters(1).Parent.Range.Rows.Count

'*************************************************************************************************************
'Méthode pour trouver la 1ere ligne et la dernière ligne vivible après un
filtre

On Error Resume Next 'le on error est là pour préserver le fait que la
plage visible n'a peut être pas de cellules

With Range("_FilterDatabase")
'ici définit la plage filtrée visible
Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1,
.Columns.Count).SpecialCells(xlCellTypeVisible)

'on pourrait obetnir la 1ere ligne de la plage filtrée visible en
écrivant
'plagefiltrevisible.areas(1).rows(1) 'correspond à la 1ere ligne de la
1ere zone de la plagefiltrevisible

'ici on cherche la dernière ligne de la plage filtrée visible en
écrivant
With plagefiltrevisible
.Areas(.Areas.Count).Rows(.Areas(.Areas.Count).Rows.Count).Select
End With

End With
'****************************************************************************************************************


'méthode1 pour atteindre les cellules de la colonne 5
For Each C In plagefiltrevisible

If C.Column = 5 Then
C.Select
MsgBox C.value
End If

Next
Dim plagevisible As Range

'méthode 3 sur la base des areas
'Set plagevisible = Range("A1:C17").SpecialCells(xlCellTypeVisible)
'MsgBox plagevisible.Count
'
'For J = 1 To plagevisible.Areas.Count
' For i = 1 To plagevisible.Areas(J).Cells.Count
' MsgBox plagevisible.Areas(J).Cells(i).Address
' Next
'Next

Exit Sub

'méthode 4 pour trouver le nbre de lignes visibles

'méthode 4.1

Set Plage =
ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

For Each ar In Plage.Areas
nblignes = ar.Rows.Count + nblignes
Next

MsgBox nblignes - 1 ' (-1 car on suppose que la ligne d'entete étant en
A1, cette ligne sera comptée evidemment)

'méthode 4.2

For Each cell In Selection
If Rows(cell.Row).Hidden = False Then
Ctr = Ctr + 1
End If
Next

Amuses-toi bien

A+

Bonsoir
J'essaie de mettre en oeuvre quelque chose de ce genre afin de
sélectionner les cellules visibles après un tri
Sheets("Travail").Range("A4:F500").SpecialCells(xlCellTypeVisible).Select
Je vous remercie
Arnaud




Avatar
anonymousA
je te remercie , mais comme l'a écrit Twinley aujourd'hui, le mot qui
convient pour ce type de connaissances est d'abord travail qu'il faut
coupler à curiosité ( parce qu'il y a un paquet de sites avec un paquet
d'auteurs ).Parallèlement, il faut bien sur aussi du temps , que tu
gagnes aujourd'hui gâce à tous les contributeurs de ce forum.

Bon courage.

Cordialement,

A+

Bonsoir AnonymousA
Je suis confondu par tant de connaissances , t'es vraiment trop balèze !
Je vais imprimer tout cela, et l'étudier attentivement.
Un très grand MERCI !!!
Bonne soirée
Arnaud



"anonymousA" a écrit dans le message de news:
42dd3e3d$0$3136$

bonnjour,

des infos sur la plagevisible suite à un filtre. Tu pioches pour voir ce
qui t'interesse


Set plagefiltre = ActiveSheet.AutoFilter.Range 'permet de repérer
l'ensemble de la zone sur laquelle s'applique le filtre de base

'autre méthode: en effet, par défaut Excel nomme toujours la plage filtre
_FilterDatabase. p.e si c'est la feuille 1 : Feuil1!_FilterDatabase.
'Si on veut l'atteindre quand on est sur la feuille1, il s'uffit d'écrire
Range("_FilterDatabase"). Si on est sur une autre feuille ou sur
'un autre classeur, il faut écrire

Set rng = Workbooks("toto.xls").Sheets(1).Range("_FilterDatabase")

Set plagefiltre = Range("_FilterDatabase")

Set plagefiltrevisible = plagefiltre.Offset(1,
0).Resize(plagefiltre.Rows.Count - 1,
plagefiltre.Columns.Count).SpecialCells(xlCellTypeVisible)

'méthode2 plus simple encore pour atteindre uniquement cellule d'une
colonne donnéé
'imaginons que la plage à filtre soit toujours plagefiltre donc débute en
A1.
'on veut atteindre la colonne décalée de I de A et on veut ne garder
qu'une seule
'colonne. On écrira alors

'Set plagefiltrevisible = plagefiltre.Offset(1,
I).Resize(plagefiltre.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
'dans ces conditions on fait un décalage de I et on ne garde qu'une
colonne avec le resize
'ensuite il faut juste faire for each c in plagefiltrevisible et le tour
est joué.
'on pourrait aussi écrire pour faire l'économie de set plagefiltre =
ActiveSheet.AutoFilter.Range

'With ActiveSheet.AutoFilter.Range
' Set plagefiltrevisible = .Offset(1, I).Resize(.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
'End With

'pour retrouver le range du filtre de base et eventuellement le nombre de
ligne sou autre

'Worksheets("nom feuille").AutoFilter.Filters(1).Parent.Range.Rows.Count

'*************************************************************************************************************
'Méthode pour trouver la 1ere ligne et la dernière ligne vivible après un
filtre

On Error Resume Next 'le on error est là pour préserver le fait que la
plage visible n'a peut être pas de cellules

With Range("_FilterDatabase")
'ici définit la plage filtrée visible
Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1,
.Columns.Count).SpecialCells(xlCellTypeVisible)

'on pourrait obetnir la 1ere ligne de la plage filtrée visible en
écrivant
'plagefiltrevisible.areas(1).rows(1) 'correspond à la 1ere ligne de la
1ere zone de la plagefiltrevisible

'ici on cherche la dernière ligne de la plage filtrée visible en
écrivant
With plagefiltrevisible
.Areas(.Areas.Count).Rows(.Areas(.Areas.Count).Rows.Count).Select
End With

End With
'****************************************************************************************************************


'méthode1 pour atteindre les cellules de la colonne 5
For Each C In plagefiltrevisible

If C.Column = 5 Then
C.Select
MsgBox C.value
End If

Next
Dim plagevisible As Range

'méthode 3 sur la base des areas
'Set plagevisible = Range("A1:C17").SpecialCells(xlCellTypeVisible)
'MsgBox plagevisible.Count
'
'For J = 1 To plagevisible.Areas.Count
' For i = 1 To plagevisible.Areas(J).Cells.Count
' MsgBox plagevisible.Areas(J).Cells(i).Address
' Next
'Next

Exit Sub

'méthode 4 pour trouver le nbre de lignes visibles

'méthode 4.1

Set Plage =
ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

For Each ar In Plage.Areas
nblignes = ar.Rows.Count + nblignes
Next

MsgBox nblignes - 1 ' (-1 car on suppose que la ligne d'entete étant en
A1, cette ligne sera comptée evidemment)

'méthode 4.2

For Each cell In Selection
If Rows(cell.Row).Hidden = False Then
Ctr = Ctr + 1
End If
Next

Amuses-toi bien

A+


Bonsoir
J'essaie de mettre en oeuvre quelque chose de ce genre afin de
sélectionner les cellules visibles après un tri
Sheets("Travail").Range("A4:F500").SpecialCells(xlCellTypeVisible).Select
Je vous remercie
Arnaud









Avatar
Arnaud LECLEMENT
Merci beaucoup,
mais, en ce qui me concerne, je n'ai aucune aptitude pour les sciences ;-)
Donc, il faut que je travaille 100 fois plus que les autres ;-)
Merci à tous les contributeurs du forum
Arnaud

"anonymousA" a écrit dans le message de news:
42dd4270$0$3136$
je te remercie , mais comme l'a écrit Twinley aujourd'hui, le mot qui
convient pour ce type de connaissances est d'abord travail qu'il faut
coupler à curiosité ( parce qu'il y a un paquet de sites avec un paquet
d'auteurs ).Parallèlement, il faut bien sur aussi du temps , que tu gagnes
aujourd'hui gâce à tous les contributeurs de ce forum.

Bon courage.

Cordialement,

A+

Bonsoir AnonymousA
Je suis confondu par tant de connaissances , t'es vraiment trop balèze !
Je vais imprimer tout cela, et l'étudier attentivement.
Un très grand MERCI !!!
Bonne soirée
Arnaud



"anonymousA" a écrit dans le message de news:
42dd3e3d$0$3136$

bonnjour,

des infos sur la plagevisible suite à un filtre. Tu pioches pour voir ce
qui t'interesse


Set plagefiltre = ActiveSheet.AutoFilter.Range 'permet de repérer
l'ensemble de la zone sur laquelle s'applique le filtre de base

'autre méthode: en effet, par défaut Excel nomme toujours la plage filtre
_FilterDatabase. p.e si c'est la feuille 1 : Feuil1!_FilterDatabase.
'Si on veut l'atteindre quand on est sur la feuille1, il s'uffit
d'écrire Range("_FilterDatabase"). Si on est sur une autre feuille ou sur
'un autre classeur, il faut écrire

Set rng = Workbooks("toto.xls").Sheets(1).Range("_FilterDatabase")

Set plagefiltre = Range("_FilterDatabase")

Set plagefiltrevisible = plagefiltre.Offset(1,
0).Resize(plagefiltre.Rows.Count - 1,
plagefiltre.Columns.Count).SpecialCells(xlCellTypeVisible)

'méthode2 plus simple encore pour atteindre uniquement cellule d'une
colonne donnéé
'imaginons que la plage à filtre soit toujours plagefiltre donc débute en
A1.
'on veut atteindre la colonne décalée de I de A et on veut ne garder
qu'une seule
'colonne. On écrira alors

'Set plagefiltrevisible = plagefiltre.Offset(1,
I).Resize(plagefiltre.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
'dans ces conditions on fait un décalage de I et on ne garde qu'une
colonne avec le resize
'ensuite il faut juste faire for each c in plagefiltrevisible et le tour
est joué.
'on pourrait aussi écrire pour faire l'économie de set plagefiltre =
ActiveSheet.AutoFilter.Range

'With ActiveSheet.AutoFilter.Range
' Set plagefiltrevisible = .Offset(1, I).Resize(.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
'End With

'pour retrouver le range du filtre de base et eventuellement le nombre de
ligne sou autre

'Worksheets("nom feuille").AutoFilter.Filters(1).Parent.Range.Rows.Count

'*************************************************************************************************************
'Méthode pour trouver la 1ere ligne et la dernière ligne vivible après un
filtre

On Error Resume Next 'le on error est là pour préserver le fait que la
plage visible n'a peut être pas de cellules

With Range("_FilterDatabase")
'ici définit la plage filtrée visible
Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1,
.Columns.Count).SpecialCells(xlCellTypeVisible)

'on pourrait obetnir la 1ere ligne de la plage filtrée visible en
écrivant
'plagefiltrevisible.areas(1).rows(1) 'correspond à la 1ere ligne de
la 1ere zone de la plagefiltrevisible

'ici on cherche la dernière ligne de la plage filtrée visible en
écrivant
With plagefiltrevisible
.Areas(.Areas.Count).Rows(.Areas(.Areas.Count).Rows.Count).Select
End With

End With
'****************************************************************************************************************


'méthode1 pour atteindre les cellules de la colonne 5
For Each C In plagefiltrevisible

If C.Column = 5 Then
C.Select
MsgBox C.value
End If

Next
Dim plagevisible As Range

'méthode 3 sur la base des areas
'Set plagevisible = Range("A1:C17").SpecialCells(xlCellTypeVisible)
'MsgBox plagevisible.Count
'
'For J = 1 To plagevisible.Areas.Count
' For i = 1 To plagevisible.Areas(J).Cells.Count
' MsgBox plagevisible.Areas(J).Cells(i).Address
' Next
'Next

Exit Sub

'méthode 4 pour trouver le nbre de lignes visibles

'méthode 4.1

Set Plage =
ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

For Each ar In Plage.Areas
nblignes = ar.Rows.Count + nblignes
Next

MsgBox nblignes - 1 ' (-1 car on suppose que la ligne d'entete étant en
A1, cette ligne sera comptée evidemment)

'méthode 4.2

For Each cell In Selection
If Rows(cell.Row).Hidden = False Then
Ctr = Ctr + 1
End If
Next

Amuses-toi bien

A+


Bonsoir
J'essaie de mettre en oeuvre quelque chose de ce genre afin de
sélectionner les cellules visibles après un tri
Sheets("Travail").Range("A4:F500").SpecialCells(xlCellTypeVisible).Select
Je vous remercie
Arnaud