Je souhaite recopier dans une feuille différente, le résultat (les lignes
visibles) d'un filtre élaboré.
Pour ce faire, j'ai écrit (inspiré d'un post du 18/10/2003 de Denis Michon),
mais cela "coince" au niveau du copier.
Dim Rg As Range
With Worksheets("BasedeDonnées")
Set Rg = .Range("_FilterDatabase")
Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells
(xlCellTypeVisible)
Rg.Copy Worksheets("Archive").Range("a65536").End(xlUp).Row + 1
'<== Ligne qui coince
End With
Set Rg = Nothing
Au moment où ces lignes de commande s'exécutent, toutes les feuilles
concernées sont visibles.
Problème de syntaxe ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Péhemme,
Cette ligne de code s'applique UNIQUEMENT dans le cas d'un filtre automatique.
"Set Rg = .Range("_FilterDatabase")"
La raison, c'est à cause de de ce truc. (_FilterDatabase). Ceci est si l'on veut le nom qu'excel donne automatiquement à la plage de cellule (non le résultat du filtre) sur lequel s'est effectué le dernier filtre automatique sur une feuille. Ce nom demeure même si tu as enlevé le filtre et tu as refermé excel. Lorsque tu ouvriras ton classeur à nouveau, ("_FilterDatabase") est encore valide et désigne toujours le nom de la dernière plage de cellules sur lequel le dernier automatique a été exécuté. Pour modifier cette plage désignée par ("_FilterDatabase"), il faut simplement exécuter un nouveau filtre automatique.
Et pas besoin de vérifier, il n'apparaît pas dans la liste de "Nom" du menu barre des menus / insertion / nom / définir /
Comme tu utilises ("_FilterDatabase") dans un filtre élaboré, la procédure ne tient plus !
et si le code ne bloque pas à cette ligne de code : Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
je présume que ta feuille a déjà eu un filtre automatique sinon Rg serait égal à Nothing et la ligne de code ne fait plus de sens.
Salutations !
"Péhemme" a écrit dans le message de news: 41a8c3eb$0$784$ Bonsoir à Toutes et à Tous,
Je souhaite recopier dans une feuille différente, le résultat (les lignes visibles) d'un filtre élaboré. Pour ce faire, j'ai écrit (inspiré d'un post du 18/10/2003 de Denis Michon), mais cela "coince" au niveau du copier.
Dim Rg As Range With Worksheets("BasedeDonnées") Set Rg = .Range("_FilterDatabase") Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells (xlCellTypeVisible) Rg.Copy Worksheets("Archive").Range("a65536").End(xlUp).Row + 1 '<== Ligne qui coince End With
Set Rg = Nothing
Au moment où ces lignes de commande s'exécutent, toutes les feuilles concernées sont visibles. Problème de syntaxe ?
Merci d'avance de votre aide
Michel
Bonjour Péhemme,
Cette ligne de code s'applique UNIQUEMENT dans le cas d'un filtre automatique.
"Set Rg = .Range("_FilterDatabase")"
La raison, c'est à cause de de ce truc. (_FilterDatabase). Ceci est si l'on veut le nom qu'excel donne automatiquement à
la plage de cellule (non le résultat du filtre) sur lequel s'est effectué le dernier filtre automatique sur une feuille.
Ce nom demeure même si tu as enlevé le filtre et tu as refermé excel. Lorsque tu ouvriras ton classeur à nouveau,
("_FilterDatabase") est encore valide et désigne toujours le nom de la dernière plage de cellules sur lequel le dernier
automatique a été exécuté. Pour modifier cette plage désignée par ("_FilterDatabase"), il faut simplement exécuter un
nouveau filtre automatique.
Et pas besoin de vérifier, il n'apparaît pas dans la liste de "Nom" du menu barre des menus / insertion / nom / définir
/
Comme tu utilises ("_FilterDatabase") dans un filtre élaboré, la procédure ne tient plus !
et si le code ne bloque pas à cette ligne de code :
Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
je présume que ta feuille a déjà eu un filtre automatique sinon Rg serait égal à Nothing et la ligne de code ne fait
plus de sens.
Salutations !
"Péhemme" <Pehemme@yahoo.com> a écrit dans le message de news: 41a8c3eb$0$784$8fcfb975@news.wanadoo.fr...
Bonsoir à Toutes et à Tous,
Je souhaite recopier dans une feuille différente, le résultat (les lignes
visibles) d'un filtre élaboré.
Pour ce faire, j'ai écrit (inspiré d'un post du 18/10/2003 de Denis Michon),
mais cela "coince" au niveau du copier.
Dim Rg As Range
With Worksheets("BasedeDonnées")
Set Rg = .Range("_FilterDatabase")
Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells
(xlCellTypeVisible)
Rg.Copy Worksheets("Archive").Range("a65536").End(xlUp).Row + 1
'<== Ligne qui coince
End With
Set Rg = Nothing
Au moment où ces lignes de commande s'exécutent, toutes les feuilles
concernées sont visibles.
Problème de syntaxe ?
Cette ligne de code s'applique UNIQUEMENT dans le cas d'un filtre automatique.
"Set Rg = .Range("_FilterDatabase")"
La raison, c'est à cause de de ce truc. (_FilterDatabase). Ceci est si l'on veut le nom qu'excel donne automatiquement à la plage de cellule (non le résultat du filtre) sur lequel s'est effectué le dernier filtre automatique sur une feuille. Ce nom demeure même si tu as enlevé le filtre et tu as refermé excel. Lorsque tu ouvriras ton classeur à nouveau, ("_FilterDatabase") est encore valide et désigne toujours le nom de la dernière plage de cellules sur lequel le dernier automatique a été exécuté. Pour modifier cette plage désignée par ("_FilterDatabase"), il faut simplement exécuter un nouveau filtre automatique.
Et pas besoin de vérifier, il n'apparaît pas dans la liste de "Nom" du menu barre des menus / insertion / nom / définir /
Comme tu utilises ("_FilterDatabase") dans un filtre élaboré, la procédure ne tient plus !
et si le code ne bloque pas à cette ligne de code : Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
je présume que ta feuille a déjà eu un filtre automatique sinon Rg serait égal à Nothing et la ligne de code ne fait plus de sens.
Salutations !
"Péhemme" a écrit dans le message de news: 41a8c3eb$0$784$ Bonsoir à Toutes et à Tous,
Je souhaite recopier dans une feuille différente, le résultat (les lignes visibles) d'un filtre élaboré. Pour ce faire, j'ai écrit (inspiré d'un post du 18/10/2003 de Denis Michon), mais cela "coince" au niveau du copier.
Dim Rg As Range With Worksheets("BasedeDonnées") Set Rg = .Range("_FilterDatabase") Set Rg = Rg.Resize(Rg.Rows.Count - 1).Offset(1).SpecialCells (xlCellTypeVisible) Rg.Copy Worksheets("Archive").Range("a65536").End(xlUp).Row + 1 '<== Ligne qui coince End With
Set Rg = Nothing
Au moment où ces lignes de commande s'exécutent, toutes les feuilles concernées sont visibles. Problème de syntaxe ?
Merci d'avance de votre aide
Michel
AV
Un rappel de qques principes concernant le filtre élaboré : ** Les données et la zone de critère peuvent être sur des feuilles différentes du classeur ** Pour faire une extraction sur une autre feuille que celle contenant les données il faut lancer la procédure à partir de la FEUILLE CIBLE
Exemple simplifié (à adapter) avec les données en A1:Cx de Feuil1, la zone de critère en A1:A2 de Feuil2 Tu souhaites extraire en A1 de Feuil3
Sub zzz() Application.Goto [Feuil3!A1] [Feuil1!A1].CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=[Feuil2!A1:A2], CopyToRange:=[A1] End Sub
AV
Un rappel de qques principes concernant le filtre élaboré :
** Les données et la zone de critère peuvent être sur des feuilles différentes
du classeur
** Pour faire une extraction sur une autre feuille que celle contenant les
données il faut lancer la procédure à partir de la FEUILLE CIBLE
Exemple simplifié (à adapter) avec les données en A1:Cx de Feuil1, la zone de
critère en A1:A2 de Feuil2
Tu souhaites extraire en A1 de Feuil3
Sub zzz()
Application.Goto [Feuil3!A1]
[Feuil1!A1].CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=[Feuil2!A1:A2], CopyToRange:=[A1]
End Sub
Un rappel de qques principes concernant le filtre élaboré : ** Les données et la zone de critère peuvent être sur des feuilles différentes du classeur ** Pour faire une extraction sur une autre feuille que celle contenant les données il faut lancer la procédure à partir de la FEUILLE CIBLE
Exemple simplifié (à adapter) avec les données en A1:Cx de Feuil1, la zone de critère en A1:A2 de Feuil2 Tu souhaites extraire en A1 de Feuil3
Sub zzz() Application.Goto [Feuil3!A1] [Feuil1!A1].CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=[Feuil2!A1:A2], CopyToRange:=[A1] End Sub
AV
Péhemme
Denis et Alain, je vous souhaite le bonjour.
Votre efficacité a encore frappé. Il y a des moments dans la vie où le mot merci devient un peu fade par rapport à la joie réelle procurée par de nouvelles découvertes. Malgré sa fadeur dans le cas présent je vous dis MERCI à l'un et à l'autre. Maintenant, je peux vous assurer que vous allez être bombardés de questions... ;-))
D'abord merci, pourquoi ? Simplement parce que : 1°) j'ai découvert que le filtre automatique pouvait être personnalisé par l'utilisation de plusieurs critères (la vraie question : pourquoi ne l'ai-je pas vu plus tôt ?) 2°) j'ai fait fonctionner ma "copie, puis destruction des lignes d'origine"
Ensuite les questions : 1°) Pourquoi, après avoir "retaillé" (resize) la plage d'extraction (et copié celle-ci dans une page de destination) je dois de nouveau retailler cette plage d'extraction pour supprimer les lignes filtrées. Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _ .Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Dest puis : Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _ .Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete ce qui fonctionne parfaitement bien, mais je ne comprends pas pourquoi ("_FilterDatabase") ne conserve pas sa nouvelle dimension avec laquelle on pourrait continuer de travailler (et économiser une ligne de code). Sh1.Range("_FilterDatabase").EntireRow.Delete mais cela me supprimait mes étiquettes. 2°) quelle est la différence fondamentale entre un filtre automatique personnalisé et un filtre élaboré ?
Voyez, maintenant, c'est vous qui avez des problèmes... ;-)))
Bien amicalement
Michel
Denis et Alain,
je vous souhaite le bonjour.
Votre efficacité a encore frappé.
Il y a des moments dans la vie où le mot merci devient un peu fade par
rapport à la joie réelle procurée par de nouvelles découvertes.
Malgré sa fadeur dans le cas présent je vous dis MERCI à l'un et à l'autre.
Maintenant, je peux vous assurer que vous allez être bombardés de
questions... ;-))
D'abord merci, pourquoi ?
Simplement parce que :
1°) j'ai découvert que le filtre automatique pouvait être personnalisé par
l'utilisation de plusieurs critères (la vraie question : pourquoi ne l'ai-je
pas vu plus tôt ?)
2°) j'ai fait fonctionner ma "copie, puis destruction des lignes d'origine"
Ensuite les questions :
1°) Pourquoi, après avoir "retaillé" (resize) la plage d'extraction (et
copié celle-ci dans une page de destination) je dois de nouveau retailler
cette plage d'extraction pour supprimer les lignes filtrées.
Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _
.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Dest
puis :
Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _
.Rows.Count -
1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ce qui fonctionne parfaitement bien, mais je ne comprends pas pourquoi
("_FilterDatabase") ne conserve pas sa nouvelle dimension avec laquelle on
pourrait continuer de travailler (et économiser une ligne de code).
Sh1.Range("_FilterDatabase").EntireRow.Delete
mais cela me supprimait mes étiquettes.
2°) quelle est la différence fondamentale entre un filtre automatique
personnalisé et un filtre élaboré ?
Voyez, maintenant, c'est vous qui avez des problèmes...
;-)))
Votre efficacité a encore frappé. Il y a des moments dans la vie où le mot merci devient un peu fade par rapport à la joie réelle procurée par de nouvelles découvertes. Malgré sa fadeur dans le cas présent je vous dis MERCI à l'un et à l'autre. Maintenant, je peux vous assurer que vous allez être bombardés de questions... ;-))
D'abord merci, pourquoi ? Simplement parce que : 1°) j'ai découvert que le filtre automatique pouvait être personnalisé par l'utilisation de plusieurs critères (la vraie question : pourquoi ne l'ai-je pas vu plus tôt ?) 2°) j'ai fait fonctionner ma "copie, puis destruction des lignes d'origine"
Ensuite les questions : 1°) Pourquoi, après avoir "retaillé" (resize) la plage d'extraction (et copié celle-ci dans une page de destination) je dois de nouveau retailler cette plage d'extraction pour supprimer les lignes filtrées. Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _ .Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Dest puis : Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _ .Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete ce qui fonctionne parfaitement bien, mais je ne comprends pas pourquoi ("_FilterDatabase") ne conserve pas sa nouvelle dimension avec laquelle on pourrait continuer de travailler (et économiser une ligne de code). Sh1.Range("_FilterDatabase").EntireRow.Delete mais cela me supprimait mes étiquettes. 2°) quelle est la différence fondamentale entre un filtre automatique personnalisé et un filtre élaboré ?
Voyez, maintenant, c'est vous qui avez des problèmes... ;-)))
Bien amicalement
Michel
AV
2°) quelle est la différence fondamentale entre un filtre automatique personnalisé et un filtre élaboré ?
* Le filtre auto personnalisé est limité à 2 critères * Le filtre élaboré n'a pas cette limite en offrant, de plus, la possiblité de critères calculés Ca ouvre(devrait ouvrir) des horizons....
AV
2°) quelle est la différence fondamentale entre un filtre automatique
personnalisé et un filtre élaboré ?
* Le filtre auto personnalisé est limité à 2 critères
* Le filtre élaboré n'a pas cette limite en offrant, de plus, la possiblité de
critères calculés
Ca ouvre(devrait ouvrir) des horizons....
2°) quelle est la différence fondamentale entre un filtre automatique personnalisé et un filtre élaboré ?
* Le filtre auto personnalisé est limité à 2 critères * Le filtre élaboré n'a pas cette limite en offrant, de plus, la possiblité de critères calculés Ca ouvre(devrait ouvrir) des horizons....
AV
Péhemme
Merci Alain pour ces explications. Bien amicalement Michel
"AV" a écrit dans le message de news:
2°) quelle est la différence fondamentale entre un filtre automatique personnalisé et un filtre élaboré ?
* Le filtre auto personnalisé est limité à 2 critères * Le filtre élaboré n'a pas cette limite en offrant, de plus, la possiblité de critères calculés Ca ouvre(devrait ouvrir) des horizons....
AV
Merci Alain pour ces explications.
Bien amicalement
Michel
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
eRLF1TW1EHA.2572@tk2msftngp13.phx.gbl...
2°) quelle est la différence fondamentale entre un filtre automatique
personnalisé et un filtre élaboré ?
* Le filtre auto personnalisé est limité à 2 critères
* Le filtre élaboré n'a pas cette limite en offrant, de plus, la
possiblité de
critères calculés
Ca ouvre(devrait ouvrir) des horizons....
Merci Alain pour ces explications. Bien amicalement Michel
"AV" a écrit dans le message de news:
2°) quelle est la différence fondamentale entre un filtre automatique personnalisé et un filtre élaboré ?
* Le filtre auto personnalisé est limité à 2 critères * Le filtre élaboré n'a pas cette limite en offrant, de plus, la possiblité de critères calculés Ca ouvre(devrait ouvrir) des horizons....