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

VBA-filtres elabores

4 réponses
Avatar
Pierre.M
Bonjour,

lorsqu'on fait une extraction de donnees à l'aide d'un filtre elabore
(en VBA dans mon cas), c'est la totalité des lignes issues du filtre
qui est recopiée.
Serait-il possible de rajouter un bout de code à ma macro pour que
seules une ou deux colonnes soient recopiées a l'endroit de
l'extraction ?
J'aimerais si possible eviter de passer par une extraction provisoire
sur une feuille intermediaire suivie d'un copier-coller puis de
l'effacement de l'extraction.

Merci a tous pour vos idees et bon après-midi.

Pierre.M

4 réponses

Avatar
michdenis
Dans ton code, tu dois stipuler la plage de cellules où tu
désires copier le résultat. Comme tu désires n'avoir que
2 colonnes de données de ta plage de données source,
tu dois indiquer en vba 2 choses :

A ) Plage où doit débuter la copie des données du résultat
du filtre . Exemple : I1:J1
B ) Dans chacune des colones I1:J1, tu dois copier l'étiquette
de colonne de chacune des colonnes de ta plage source,
évidemment, il s'agit de l'étiquette de colonne de chacune
des colonnes que le résultat de ton filtre doit retenir.
Range("I1") = "Nom_étiquette_colonne1"
Range("J5") = "Nom_étiquette_Colonne 5"
'--------------------------------------
With Worksheets("Feuil1")
.Range("i1") = .Range("A1")
.Range("j1") = .Range("G1")
.Range("A1:G10").AdvancedFilter xlFilterCopy, _
.Range("L1:L2"), .Range("I1:j1")
End With
'--------------------------------------
Et tu peux même inverser l'ordre de présentation des colonnes
dans la plage résultat, tu n'as qu'à inverser l'étiquette en haut de
chacune des étiquettes de la plage où sont copiées les données.




"Pierre.M" a écrit dans le message de news:

Bonjour,

lorsqu'on fait une extraction de donnees à l'aide d'un filtre elabore
(en VBA dans mon cas), c'est la totalité des lignes issues du filtre
qui est recopiée.
Serait-il possible de rajouter un bout de code à ma macro pour que
seules une ou deux colonnes soient recopiées a l'endroit de
l'extraction ?
J'aimerais si possible eviter de passer par une extraction provisoire
sur une feuille intermediaire suivie d'un copier-coller puis de
l'effacement de l'extraction.

Merci a tous pour vos idees et bon après-midi.

Pierre.M
Avatar
Pierre.M
Merci beaucoup, ça resoud tout a fait mon probleme.

2 questions cependant et comme tu sembles maitriser le sujet :

- Suis-je oblige de garder la base de donnees et le tableau
d'extraction sur la meme feuille ?

- Dans ce genre de macro il y a souvent un "CriteriaRange" qui fait
reference a l'adresse d'une cellule ou se trouve le parametre de tri du
filtre. Peut-on integrer ce parametre directement dans la macro, sans
passer par l'adresse d'une cellule ?
Par exemple une BDD avec dans une colonne des noms de villes que je
veux filtrer tous les jours sur le nom "Lyon". Comment integrer un
"CriteriaRange="Lyon"" dans la macro sans passer par une cellule dédiee
ou une plage nommee? Possible ?

Merci encore pour ton aide (et surtout pour les explications donnees
qui permettent de comprendre ce qu'on fait). Bonne soirée.

Pierre.M




On 2008-12-22 16:43:32 +0100, "michdenis" said:

Dans ton code, tu dois stipuler la plage de cellules où tu
désires copier le résultat. Comme tu désires n'avoir que
2 colonnes de données de ta plage de données source,
tu dois indiquer en vba 2 choses :

A ) Plage où doit débuter la copie des données du résultat
du filtre . Exemple : I1:J1
B ) Dans chacune des colones I1:J1, tu dois copier l'étiquette
de colonne de chacune des colonnes de ta plage source,
évidemment, il s'agit de l'étiquette de colonne de chacune
des colonnes que le résultat de ton filtre doit retenir.
Range("I1") = "Nom_étiquette_colonne1"
Range("J5") = "Nom_étiquette_Colonne 5"
'--------------------------------------
With Worksheets("Feuil1")
.Range("i1") = .Range("A1")
.Range("j1") = .Range("G1")
.Range("A1:G10").AdvancedFilter xlFilterCopy, _
.Range("L1:L2"), .Range("I1:j1")
End With
'--------------------------------------
Et tu peux même inverser l'ordre de présentation des colonnes
dans la plage résultat, tu n'as qu'à inverser l'étiquette en haut de
chacune des étiquettes de la plage où sont copiées les données.




"Pierre.M" a écrit dans le message de news:

Bonjour,

lorsqu'on fait une extraction de donnees à l'aide d'un filtre elabore
(en VBA dans mon cas), c'est la totalité des lignes issues du filtre
qui est recopiée.
Serait-il possible de rajouter un bout de code à ma macro pour que
seules une ou deux colonnes soient recopiées a l'endroit de
l'extraction ?
J'aimerais si possible eviter de passer par une extraction provisoire
sur une feuille intermediaire suivie d'un copier-coller puis de
l'effacement de l'extraction.

Merci a tous pour vos idees et bon après-midi.

Pierre.M


Avatar
michdenis
| - Suis-je oblige de garder la base de donnees et le tableau
| d'extraction sur la meme feuille ?

*** Non. Cependant, dans ta macro, tu dois t'assurer que tu
Indiques correctement la référence de la feuille dans la ligne
de code "Range().Autofilter"

| - Dans ce genre de macro il y a souvent un "CriteriaRange" qui fait
| reference a l'adresse d'une cellule ou se trouve le parametre de tri du
| filtre. Peut-on integrer ce parametre directement dans la macro, sans
| passer par l'adresse d'une cellule ?

*** Non. Mais tu peux définir ta zone de critère dans une plage de cellules
seulement au moment de l'exécution de ta macro. Tu définis ta zone
de critère dans ta macro ...et , encore une fois, tu t'assures que tu
indiques correctement la référence à la feulle pour ta zone de critère


| Par exemple une BDD avec dans une colonne des noms de villes que je
| veux filtrer tous les jours sur le nom "Lyon". Comment integrer un
| "CriteriaRange="Lyon"" dans la macro sans passer par une cellule dédiee
| ou une plage nommee? Possible ?

*** Impossible dans passer par une plage de cellules d'une feuille de calcul
zone de critère Range("Z1:Z2")
With Worksheets("NomFeuille")
.Range("Z1") = "Étiquette de la colonne"
.Range("Z2") = "Valeur recherchée" (Lyon)
End With

Si dans la ligne de code "Range(...).autofilter" ta zone de critère
n'est pas sur la feuille active au moment de l'exécution, n'oublie
pas d'indiquer encore une fois, le nom de la feuille lorsque tu définis
la zone de critere :

Et à la fin de la macro, tu effaces le contenu de ces 2 cellules.






On 2008-12-22 16:43:32 +0100, "michdenis" said:

Dans ton code, tu dois stipuler la plage de cellules où tu
désires copier le résultat. Comme tu désires n'avoir que
2 colonnes de données de ta plage de données source,
tu dois indiquer en vba 2 choses :

A ) Plage où doit débuter la copie des données du résultat
du filtre . Exemple : I1:J1
B ) Dans chacune des colones I1:J1, tu dois copier l'étiquette
de colonne de chacune des colonnes de ta plage source,
évidemment, il s'agit de l'étiquette de colonne de chacune
des colonnes que le résultat de ton filtre doit retenir.
Range("I1") = "Nom_étiquette_colonne1"
Range("J5") = "Nom_étiquette_Colonne 5"
'--------------------------------------
With Worksheets("Feuil1")
.Range("i1") = .Range("A1")
.Range("j1") = .Range("G1")
.Range("A1:G10").AdvancedFilter xlFilterCopy, _
.Range("L1:L2"), .Range("I1:j1")
End With
'--------------------------------------
Et tu peux même inverser l'ordre de présentation des colonnes
dans la plage résultat, tu n'as qu'à inverser l'étiquette en haut de
chacune des étiquettes de la plage où sont copiées les données.




"Pierre.M" a écrit dans le message de news:

Bonjour,

lorsqu'on fait une extraction de donnees à l'aide d'un filtre elabore
(en VBA dans mon cas), c'est la totalité des lignes issues du filtre
qui est recopiée.
Serait-il possible de rajouter un bout de code à ma macro pour que
seules une ou deux colonnes soient recopiées a l'endroit de
l'extraction ?
J'aimerais si possible eviter de passer par une extraction provisoire
sur une feuille intermediaire suivie d'un copier-coller puis de
l'effacement de l'extraction.

Merci a tous pour vos idees et bon après-midi.

Pierre.M


Avatar
Pierre.M
Super, aujourd'hui j'ai progresse ! Merci pour tout et bonne continuation.
Pierre.M




On 2008-12-22 20:01:14 +0100, "michdenis" said:



| - Suis-je oblige de garder la base de donnees et le tableau
| d'extraction sur la meme feuille ?

*** Non. Cependant, dans ta macro, tu dois t'assurer que tu
Indiques correctement la référence de la feuille dans la ligne
de code "Range().Autofilter"

| - Dans ce genre de macro il y a souvent un "CriteriaRange" qui fait
| reference a l'adresse d'une cellule ou se trouve le parametre de tri du
| filtre. Peut-on integrer ce parametre directement dans la macro, sans
| passer par l'adresse d'une cellule ?

*** Non. Mais tu peux définir ta zone de critère dans une plage de cellules
seulement au moment de l'exécution de ta macro. Tu définis ta zone
de critère dans ta macro ...et , encore une fois, tu t'assures que tu
indiques correctement la référence à la feulle pour ta zone de critère


| Par exemple une BDD avec dans une colonne des noms de villes que je
| veux filtrer tous les jours sur le nom "Lyon". Comment integrer un
| "CriteriaRange="Lyon"" dans la macro sans passer par une cellule dédiee
| ou une plage nommee? Possible ?

*** Impossible dans passer par une plage de cellules d'une feuille de calcul
zone de critère Range("Z1:Z2")
With Worksheets("NomFeuille")
.Range("Z1") = "Étiquette de la colonne"
.Range("Z2") = "Valeur recherchée" (Lyon)
End With

Si dans la ligne de code "Range(...).autofilter" ta zone de critère
n'est pas sur la feuille active au moment de l'exécution, n'oublie
pas d'indiquer encore une fois, le nom de la feuille lorsque tu définis
la zone de critere :

Et à la fin de la macro, tu effaces le contenu de ces 2 cellules.






On 2008-12-22 16:43:32 +0100, "michdenis" said:

Dans ton code, tu dois stipuler la plage de cellules où tu
désires copier le résultat. Comme tu désires n'avoir que
2 colonnes de données de ta plage de données source,
tu dois indiquer en vba 2 choses :

A ) Plage où doit débuter la copie des données du résultat
du filtre . Exemple : I1:J1
B ) Dans chacune des colones I1:J1, tu dois copier l'étiquette
de colonne de chacune des colonnes de ta plage source,
évidemment, il s'agit de l'étiquette de colonne de chacune
des colonnes que le résultat de ton filtre doit retenir.
Range("I1") = "Nom_étiquette_colonne1"
Range("J5") = "Nom_étiquette_Colonne 5"
'--------------------------------------
With Worksheets("Feuil1")
.Range("i1") = .Range("A1")
.Range("j1") = .Range("G1")
.Range("A1:G10").AdvancedFilter xlFilterCopy, _
.Range("L1:L2"), .Range("I1:j1")
End With
'--------------------------------------
Et tu peux même inverser l'ordre de présentation des colonnes
dans la plage résultat, tu n'as qu'à inverser l'étiquette en haut de
chacune des étiquettes de la plage où sont copiées les données.




"Pierre.M" a écrit dans le message de news:

Bonjour,

lorsqu'on fait une extraction de donnees à l'aide d'un filtre elabore
(en VBA dans mon cas), c'est la totalité des lignes issues du filtre
qui est recopiée.
Serait-il possible de rajouter un bout de code à ma macro pour que
seules une ou deux colonnes soient recopiées a l'endroit de
l'extraction ?
J'aimerais si possible eviter de passer par une extraction provisoire
sur une feuille intermediaire suivie d'un copier-coller puis de
l'effacement de l'extraction.

Merci a tous pour vos idees et bon après-midi.

Pierre.M