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

contenu de cellules filtrées => array

11 réponses
Avatar
jean-paul.bataille
Bonjour,

J'ai une table .xls, je filtre sur une ou plusieurs colonnes disons K
et M.
Je d=E9sire reprendre dans un array les valeurs visibles de la colonne
D.


Je dois avoir besoin de repos car je ne trouve pas le moyen de faire
=E7a
par moi-m=EAme d'o=F9 mon appek =E0 l'aide.

Merci de votre collaboration.

Jean-Paul

10 réponses

1 2
Avatar
isabelle
bonjour Jean-Paul,

Sub Macro1()
Dim liste()
Set plg = Range("K2:A" &
Range("K65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
x = x + 1
ReDim Preserve liste(x)
liste(x) = c
Next
End Sub

isabelle

a écrit :
Bonjour,

J'ai une table .xls, je filtre sur une ou plusieurs colonnes disons K
et M.
Je désire reprendre dans un array les valeurs visibles de la colonne
D.


Je dois avoir besoin de repos car je ne trouve pas le moyen de faire
ça
par moi-même d'où mon appek à l'aide.

Merci de votre collaboration.

Jean-Paul



Avatar
isabelle
petit ajout pour récupérer la liste sur la feuille 2 :

Sub Macro1()
Dim liste()
x = 1
Set plg = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
x = x + 1
Next
Sheets("Feuil2").Range("A1").Resize(UBound(liste) + 1) =
Application.Transpose(liste)
End Sub

isabelle

a écrit :
Bonjour,

J'ai une table .xls, je filtre sur une ou plusieurs colonnes disons K
et M.
Je désire reprendre dans un array les valeurs visibles de la colonne
D.


Je dois avoir besoin de repos car je ne trouve pas le moyen de faire
ça
par moi-même d'où mon appek à l'aide.

Merci de votre collaboration.

Jean-Paul



Avatar
MichDenis
Bonjour Isabelle,

Si je peux me permettre ... juste pour le plaisir !

Si tu déclares ta variable x as long
Tu n'aurais pas besoin de lui affecter la valeur 1

Tu pourrais simplement faire ceci :

For Each c In plg
x = x + 1
ReDim Preserve liste(x)
liste(x) = c
Next

Et pour la copie des données :
Sheets("Feuil2").Range("A1").Resize(x) = _
Application.Transpose(liste)



"isabelle" a écrit dans le message de groupe de discussion :
#
petit ajout pour récupérer la liste sur la feuille 2 :

Sub Macro1()
Dim liste()
x = 1
Set plg = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
x = x + 1
Next
Sheets("Feuil2").Range("A1").Resize(UBound(liste) + 1) Application.Transpose(liste)
End Sub

isabelle

a écrit :
Bonjour,

J'ai une table .xls, je filtre sur une ou plusieurs colonnes disons K
et M.
Je désire reprendre dans un array les valeurs visibles de la colonne
D.


Je dois avoir besoin de repos car je ne trouve pas le moyen de faire
ça
par moi-même d'où mon appek à l'aide.

Merci de votre collaboration.

Jean-Paul



Avatar
isabelle
salut Denis,

c'était un résidu de construction, je sais que c'est mieux de declarer,
mais même sans déclarer x tout fonctionne bien comme ça ,
variant est considéré ici comme double et double vaut 1,79769313486232E308

Sub Macro1()
Dim liste()
Set plg = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
x = x + 1
Next
Sheets("Feuil2").Range("A1").Resize(UBound(liste) + 1) =
Application.Transpose(liste)
End Sub

en parlant de déclarer, t'as fais tes impot ? ;-)

isabelle

MichDenis a écrit :
Bonjour Isabelle,

Si je peux me permettre ... juste pour le plaisir !

Si tu déclares ta variable x as long
Tu n'aurais pas besoin de lui affecter la valeur 1

Tu pourrais simplement faire ceci :

For Each c In plg
x = x + 1
ReDim Preserve liste(x)
liste(x) = c
Next

Et pour la copie des données :
Sheets("Feuil2").Range("A1").Resize(x) = _
Application.Transpose(liste)



"isabelle" a écrit dans le message de groupe de discussion :
#
petit ajout pour récupérer la liste sur la feuille 2 :

Sub Macro1()
Dim liste()
x = 1
Set plg = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
x = x + 1
Next
Sheets("Feuil2").Range("A1").Resize(UBound(liste) + 1) > Application.Transpose(liste)
End Sub

isabelle

a écrit :

Bonjour,

J'ai une table .xls, je filtre sur une ou plusieurs colonnes disons K
et M.
Je désire reprendre dans un array les valeurs visibles de la colonne
D.


Je dois avoir besoin de repos car je ne trouve pas le moyen de faire
ça
par moi-même d'où mon appek à l'aide.

Merci de votre collaboration.

Jean-Paul








Avatar
MichDenis
j'ajouterai ceci ...

si en haut du module, on ne retrouve pas ceci :
Option Base 1

on doit remplacer :
ReDim Preserve liste(x)
Par
ReDim Preserve liste(1 to x)

Pour que les modifications proposées se tiennent !
;-)



"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Isabelle,

Si je peux me permettre ... juste pour le plaisir !

Si tu déclares ta variable x as long
Tu n'aurais pas besoin de lui affecter la valeur 1

Tu pourrais simplement faire ceci :

For Each c In plg
x = x + 1
ReDim Preserve liste(x)
liste(x) = c
Next

Et pour la copie des données :
Sheets("Feuil2").Range("A1").Resize(x) = _
Application.Transpose(liste)



"isabelle" a écrit dans le message de groupe de discussion :
#
petit ajout pour récupérer la liste sur la feuille 2 :

Sub Macro1()
Dim liste()
x = 1
Set plg = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
x = x + 1
Next
Sheets("Feuil2").Range("A1").Resize(UBound(liste) + 1) Application.Transpose(liste)
End Sub

isabelle

a écrit :
Bonjour,

J'ai une table .xls, je filtre sur une ou plusieurs colonnes disons K
et M.
Je désire reprendre dans un array les valeurs visibles de la colonne
D.


Je dois avoir besoin de repos car je ne trouve pas le moyen de faire
ça
par moi-même d'où mon appek à l'aide.

Merci de votre collaboration.

Jean-Paul



Avatar
MichDenis
| en parlant de déclarer, t'as fais tes impot ? ;-)

Absolument pas, la ministre des finances vient de démissionner
il n'y aura personne pour le savoir ;-)))

J'était de bonne humeur juste qu'à maintenant !!!
Je vais le rester jusqu'au 30 avril. ;-)
Avatar
isabelle
MichDenis a écrit :
Absolument pas, la ministre des finances vient de démissionner



c'est ça qu'arrive quand la soupe devient trop chaude, ...la vache à
lait est runner par des con...ça va pété !
isabelle
Avatar
jean-paul.bataille
Bonjour Isabelle et Michdenis,

La discussion est intéressante : détail certe mais c'est la diff qui
fait la procédure pro.
Ici le propos est d'aider - ce qui est fait MERCI Isabelle - et non
pas de faire le boulot de l'autre.

Dans un premier temps, vu l'urgence je prends la seconde proposition
d'Isabelle.

Une question complémentaire : y a t'il un moyen d'éviter les doublons
lorsque l'on constitue le tableau ,


Merci de votre collaboration à tous les deux.
Avatar
jean-paul.bataille
Voici ma solution pour éliminer les doublons :

For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
If x > 1 Then
If liste(x) = liste(x - 1) Then
ReDim Preserve liste(UBound(liste) - 1)
x = x - 1
End If
End If
x = x + 1
Next

En fait je redimensionne le tableau à la taille précédente, lorsque j e
rencontre une valeur déjà présente,
et je décrémente aussi le compteur.
Je ne peux faire cela que parce que mes valeurs sont groupées.
Avatar
isabelle
bonjour Jean-Paul,

Sub Macro1()
Dim liste()
Set plg = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
For Each c In plg
On Error Resume Next
If IsError(Application.Match(c, liste, 0)) And c > 1 Then
ReDim Preserve liste(x)
liste(x) = c
x = x + 1
End If
Err.Clear
Next
Sheets("Feuil2").Range("A1").Resize(UBound(liste) + 1) =
Application.Transpose(liste)
End Sub


isabelle

a écrit :
Voici ma solution pour éliminer les doublons :

For Each c In plg
ReDim Preserve liste(x)
liste(x) = c
If x > 1 Then
If liste(x) = liste(x - 1) Then
ReDim Preserve liste(UBound(liste) - 1)
x = x - 1
End If
End If
x = x + 1
Next

En fait je redimensionne le tableau à la taille précédente, lorsque je
rencontre une valeur déjà présente,
et je décrémente aussi le compteur.
Je ne peux faire cela que parce que mes valeurs sont groupées.



1 2