contenu de cellules filtrées => array

Le
jean-paul.bataille
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #19079601
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



isabelle
Le #19079581
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



MichDenis
Le #19079991
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



isabelle
Le #19080371
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








MichDenis
Le #19080341
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"
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



MichDenis
Le #19080301
| 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. ;-)
isabelle
Le #19080811
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
jean-paul.bataille
Le #19083501
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.
jean-paul.bataille
Le #19084911
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.
isabelle
Le #19086111
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.



Publicité
Poster une réponse
Anonyme