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

filtre personnalisé

12 réponses
Avatar
Crel
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je n'y arrive pas...
Désolé
Merci beaucoup
Patrcik

10 réponses

1 2
Avatar
Denis Michon
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu devrais obtenir la liste des constante Xldialog et les paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans le message de news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je n'y arrive pas...
Désolé
Merci beaucoup
Patrcik
Avatar
Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.



Avatar
Denis Michon
Bonjour anonymous,


Voici un exemple d'un filtre faisant affiché la boîte de dialogue que tu demandes. Comme la procédure est commentée, je
me ferais avare de commentaires ... ! ;-)

N.B Tu devrais peut être faire un effort pour te trouver un pseudonyme plus original !!!


'--------------------------------
Sub CopiePlageFiltré()

Dim N As Integer, A As Long, R As Variant, Rg As Range
N = 1
With Worksheets(1)
.Activate
.Range("A1").Activate
'pour que la boîte de dialogue s'ouvre,
'une des cellules de la plage à filtrée
'doit être active. IL va de soi que la feuille
'où se déroule le filtre doit aussi être la
'feuille active.
.Range("A1").AutoFilter
'Si l'usager clique sur le bouton "annuler" de
'la boîte de filtre personnalisée
If Application.Dialogs(xlDialogFilter).Show(N) = False Then
MsgBox "Opération annulée"
Set Rg = Nothing: Exit Sub
Else
Set Rg = .AutoFilter.Range
End If

'Nombre Enregistrement trouvé en A
A = .Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Count - 1
End With

'Si aucun enregistrement est trouvé lors du filtre
If A = 0 Then
MsgBox "Aucun enregistrement ne répond à votre critère."
Selection.AutoFilter: Set Rg = Nothing: Exit Sub

'Si au moins un enregistrement est trouvé :
ElseIf A > 0 Then
'Affichage du nombre d'enregistrements trouvés
'Décision quant à l'action à prendre concernant des enregistrements.

R = InputBox(A & " enregistrement(s) trouvé(s)." & vbCrLf & vbCrLf & _
"Quel numéro correspond à l'action à suivre ?" & vbCrLf & vbCrLf & _
"1 . Annuler" & vbCrLf & _
"2 . Copier vers une autre destination" & vbCrLf & _
"3 . Colorer les lignes obtenues par ce filtre" & vbCrLf & _
"4 . Supprimer les lignes obtenues par ce filtre" & vbCrLf & _
"5 . Additionner une colonne de la plage filtrée ", "Actions disponibles sur la plage filtrée")

'Choix des actions possibles
Select Case R
Case Is = faux
Selection.AutoFilter
Case 2
'Effacer la plage déjà existante à la plage destination.
Worksheets(2).Range("A1").CurrentRegion.Clear
'Redimensionne la plage (sans les 2 lignes(titre et critère))
Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2, Rg.Columns.Count)
'Copie les données filtrées vers la destination.
Rg.Copy Worksheets(2).Range("A1")
'Enlève les Flèches du filtre automatique
Selection.AutoFilter
Case 3
'Redimensionne la plage (sans les 2 lignes(titre et critère))
Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2, Rg.Columns.Count)
'Affecte la couleur à la plage
Rg.Interior.ColorIndex = 3
Selection.AutoFilter
Case 4
Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2, Rg.Columns.Count)
Rg.Delete xlUp
Selection.AutoFilter
Case 5
'additionne la première colonne de la plage filtrée
MsgBox Application.Sum(Worksheets(1).Range("_FilterDataBase") _
.Columns(1).SpecialCells(xlCellTypeVisible))
'Bien d'autres fonctions de la feuille sont disponibles et applicable
'à la plage filtrée
Selection.AutoFilter
Case Else
Selection.AutoFilter
End Select
End If
Set Rg = Nothing

End Sub
'--------------------------------


Salutations!


a écrit dans le message de news:010201c394cc$4dd32bb0$
Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.



Avatar
Patrick
Mille merci Denis, c'est vraiment trop sympa de ta part,
c'est vraiment excellent, de pouvoir apprendre de gens
de ta compétence.
Encore une fois, merci beaucoup.
Patrick

-----Message d'origine-----
Bonjour anonymous,


Voici un exemple d'un filtre faisant affiché la boîte de
dialogue que tu demandes. Comme la procédure est

commentée, je
me ferais avare de commentaires ... ! ;-)

N.B Tu devrais peut être faire un effort pour te trouver
un pseudonyme plus original !!!



'--------------------------------
Sub CopiePlageFiltré()

Dim N As Integer, A As Long, R As Variant, Rg As Range
N = 1
With Worksheets(1)
.Activate
.Range("A1").Activate
'pour que la boîte de dialogue s'ouvre,
'une des cellules de la plage à filtrée
'doit être active. IL va de soi que la feuille
'où se déroule le filtre doit aussi être la
'feuille active.
.Range("A1").AutoFilter
'Si l'usager clique sur le bouton "annuler" de
'la boîte de filtre personnalisée
If Application.Dialogs(xlDialogFilter).Show(N) =
False Then

MsgBox "Opération annulée"
Set Rg = Nothing: Exit Sub
Else
Set Rg = .AutoFilter.Range
End If

'Nombre Enregistrement trouvé en A
A = .Range("_FilterDataBase").SpecialCells
(xlCellTypeVisible).Count - 1

End With

'Si aucun enregistrement est trouvé lors du filtre
If A = 0 Then
MsgBox "Aucun enregistrement ne répond à votre
critère."

Selection.AutoFilter: Set Rg = Nothing: Exit Sub

'Si au moins un enregistrement est trouvé :
ElseIf A > 0 Then
'Affichage du nombre d'enregistrements trouvés
'Décision quant à l'action à prendre concernant des
enregistrements.


R = InputBox(A & " enregistrement(s) trouvé(s)." &
vbCrLf & vbCrLf & _

"Quel numéro correspond à l'action à suivre ?" &
vbCrLf & vbCrLf & _

"1 . Annuler" & vbCrLf & _
"2 . Copier vers une autre destination" & vbCrLf
& _

"3 . Colorer les lignes obtenues par ce filtre"
& vbCrLf & _

"4 . Supprimer les lignes obtenues par ce
filtre" & vbCrLf & _

"5 . Additionner une colonne de la plage
filtrée ", "Actions disponibles sur la plage filtrée")


'Choix des actions possibles
Select Case R
Case Is = faux
Selection.AutoFilter
Case 2
'Effacer la plage déjà existante à la
plage destination.

Worksheets(2).Range
("A1").CurrentRegion.Clear

'Redimensionne la plage (sans les 2
lignes(titre et critère))

Set Rg = Rg.Offset(2).Resize
(Rg.Rows.Count - 2, Rg.Columns.Count)

'Copie les données filtrées vers la
destination.

Rg.Copy Worksheets(2).Range("A1")
'Enlève les Flèches du filtre automatique
Selection.AutoFilter
Case 3
'Redimensionne la plage (sans les 2
lignes(titre et critère))

Set Rg = Rg.Offset(2).Resize
(Rg.Rows.Count - 2, Rg.Columns.Count)

'Affecte la couleur à la plage
Rg.Interior.ColorIndex = 3
Selection.AutoFilter
Case 4
Set Rg = Rg.Offset(2).Resize
(Rg.Rows.Count - 2, Rg.Columns.Count)

Rg.Delete xlUp
Selection.AutoFilter
Case 5
'additionne la première colonne de la
plage filtrée

MsgBox Application.Sum(Worksheets
(1).Range("_FilterDataBase") _

.Columns(1).SpecialCells
(xlCellTypeVisible))

'Bien d'autres fonctions de la feuille
sont disponibles et applicable

'à la plage filtrée
Selection.AutoFilter
Case Else
Selection.AutoFilter
End Select
End If
Set Rg = Nothing

End Sub
'--------------------------------


Salutations!


a écrit dans le
message de news:010201c394cc$4dd32bb0$

Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.




.




Avatar
Denis Michon
Bienvenu...


Salutations!


P.S. la variable N de la procédure représente la colonne que tu va voir afficher dans la liste déroulant de la fenêtre
qui s'ouvre, permettant de sélectionner le critère de ton filtre.





"Patrick" a écrit dans le message de news:2dbb401c394e6$35d50e10$
Mille merci Denis, c'est vraiment trop sympa de ta part,
c'est vraiment excellent, de pouvoir apprendre de gens
de ta compétence.
Encore une fois, merci beaucoup.
Patrick

-----Message d'origine-----
Bonjour anonymous,


Voici un exemple d'un filtre faisant affiché la boîte de
dialogue que tu demandes. Comme la procédure est

commentée, je
me ferais avare de commentaires ... ! ;-)

N.B Tu devrais peut être faire un effort pour te trouver
un pseudonyme plus original !!!



'--------------------------------
Sub CopiePlageFiltré()

Dim N As Integer, A As Long, R As Variant, Rg As Range
N = 1
With Worksheets(1)
.Activate
.Range("A1").Activate
'pour que la boîte de dialogue s'ouvre,
'une des cellules de la plage à filtrée
'doit être active. IL va de soi que la feuille
'où se déroule le filtre doit aussi être la
'feuille active.
.Range("A1").AutoFilter
'Si l'usager clique sur le bouton "annuler" de
'la boîte de filtre personnalisée
If Application.Dialogs(xlDialogFilter).Show(N) False Then
MsgBox "Opération annulée"
Set Rg = Nothing: Exit Sub
Else
Set Rg = .AutoFilter.Range
End If

'Nombre Enregistrement trouvé en A
A = .Range("_FilterDataBase").SpecialCells
(xlCellTypeVisible).Count - 1

End With

'Si aucun enregistrement est trouvé lors du filtre
If A = 0 Then
MsgBox "Aucun enregistrement ne répond à votre
critère."

Selection.AutoFilter: Set Rg = Nothing: Exit Sub

'Si au moins un enregistrement est trouvé :
ElseIf A > 0 Then
'Affichage du nombre d'enregistrements trouvés
'Décision quant à l'action à prendre concernant des
enregistrements.


R = InputBox(A & " enregistrement(s) trouvé(s)." &
vbCrLf & vbCrLf & _

"Quel numéro correspond à l'action à suivre ?" &
vbCrLf & vbCrLf & _

"1 . Annuler" & vbCrLf & _
"2 . Copier vers une autre destination" & vbCrLf
& _

"3 . Colorer les lignes obtenues par ce filtre"
& vbCrLf & _

"4 . Supprimer les lignes obtenues par ce
filtre" & vbCrLf & _

"5 . Additionner une colonne de la plage
filtrée ", "Actions disponibles sur la plage filtrée")


'Choix des actions possibles
Select Case R
Case Is = faux
Selection.AutoFilter
Case 2
'Effacer la plage déjà existante à la
plage destination.

Worksheets(2).Range
("A1").CurrentRegion.Clear

'Redimensionne la plage (sans les 2
lignes(titre et critère))

Set Rg = Rg.Offset(2).Resize
(Rg.Rows.Count - 2, Rg.Columns.Count)

'Copie les données filtrées vers la
destination.

Rg.Copy Worksheets(2).Range("A1")
'Enlève les Flèches du filtre automatique
Selection.AutoFilter
Case 3
'Redimensionne la plage (sans les 2
lignes(titre et critère))

Set Rg = Rg.Offset(2).Resize
(Rg.Rows.Count - 2, Rg.Columns.Count)

'Affecte la couleur à la plage
Rg.Interior.ColorIndex = 3
Selection.AutoFilter
Case 4
Set Rg = Rg.Offset(2).Resize
(Rg.Rows.Count - 2, Rg.Columns.Count)

Rg.Delete xlUp
Selection.AutoFilter
Case 5
'additionne la première colonne de la
plage filtrée

MsgBox Application.Sum(Worksheets
(1).Range("_FilterDataBase") _

.Columns(1).SpecialCells
(xlCellTypeVisible))

'Bien d'autres fonctions de la feuille
sont disponibles et applicable

'à la plage filtrée
Selection.AutoFilter
Case Else
Selection.AutoFilter
End Select
End If
Set Rg = Nothing

End Sub
'--------------------------------


Salutations!


a écrit dans le
message de news:010201c394cc$4dd32bb0$

Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.




.




Avatar
gee-dee-
N.B Tu devrais peut être faire un effort pour te trouver un pseudonyme plus
original !!!!!!

pfffff.... CDO %#@!? comme risque de hurler AV....
pourquoi pas PaSaJataba, Denon Michis, Havey ou "maux d'Est" ??? ;-)))

bienheureux ;-))) oui car toi non plus tu ne t'es pas encore frotté à CDO
;-)))
sache que cet interface génial :-(...........beurKKKK
déja qu'il permettait à de petits blageurs(note que je ne cite personne
;-)))
de poster de manière discrète....
maintenant propose directement pour nom d'émetteur ce sympathique pseudo :

nul doute que ce pseudo créve bientot les stats MPFE ;-))))
aussi bien aux questions
qu'aux réponses puisque c'est le répondeur qui doit toujours ajouter "Re:"

nb: ce qui me permettait de figurer en bonne place dans ces mêmes stats, moi
qui ne pose quasiment pas de question....

;-)))
@+

Avatar
Denis Michon
bienheureux ;-))) oui car toi non plus tu ne t'es pas encore frotté à CDO

C'est un fait ! Je ne regarde jamais la provenance non plus des messages et leur support de messagerie !

Avec les propos que tu as tenu cette semaine sur le sujet... disons que je ne suis pas pressé d'en faire la connaissance
...


CDO pour convivialité, démocratisation (accès à tous), Opérationnalité

;-)))


Salutations!




"gee-dee-" a écrit dans le message de news:
N.B Tu devrais peut être faire un effort pour te trouver un pseudonyme plus
original !!!!!!

pfffff.... CDO %#@!? comme risque de hurler AV....
pourquoi pas PaSaJataba, Denon Michis, Havey ou "maux d'Est" ??? ;-)))

bienheureux ;-))) oui car toi non plus tu ne t'es pas encore frotté à CDO
;-)))
sache que cet interface génial :-(...........beurKKKK
déja qu'il permettait à de petits blageurs(note que je ne cite personne
;-)))
de poster de manière discrète....
maintenant propose directement pour nom d'émetteur ce sympathique pseudo :

nul doute que ce pseudo créve bientot les stats MPFE ;-))))
aussi bien aux questions
qu'aux réponses puisque c'est le répondeur qui doit toujours ajouter "Re:"

nb: ce qui me permettait de figurer en bonne place dans ces mêmes stats, moi
qui ne pose quasiment pas de question....

;-)))
@+

Avatar
Alixe
Pendant que vous êtes dans les filtres personnalisés, peut-être pourriez
vous m'aider à résoudre un (petit) problème ?

J'aimerai récupérer les valeurs d'une colonne de mon tableau :
je suis donc partie sur une boucle
Selection.cells(i).value
et je concatène le contenu de toutes les cellules de ma sélection dans une
variable

Le problème est que, bien que ma sélection ne porte théoriquement que sur
les cellules visibles (résultat du filtre), les valeurs récupérées dans ma
variable reflète le contenu des toutes les cellules se trouvant entre la
première et la dernière cellule de ma sélection (le filtre n'est donc pas
pris en compte).

Ce que je ne comprends pas, c'est que lorsque je fais Selection.copy, seules
les cellules visibles sont copiée.

Y-a-t-il un moyen de passer en revue toutes les cellules visibles de ma
selection pour en récupérer les valeurs ?

Merci


"Denis Michon" a écrit dans le message de
news:OIVjb.1511$
Bonjour anonymous,


Voici un exemple d'un filtre faisant affiché la boîte de dialogue que tu
demandes. Comme la procédure est commentée, je

me ferais avare de commentaires ... ! ;-)

N.B Tu devrais peut être faire un effort pour te trouver un pseudonyme
plus original !!!



'--------------------------------
Sub CopiePlageFiltré()

Dim N As Integer, A As Long, R As Variant, Rg As Range
N = 1
With Worksheets(1)
.Activate
.Range("A1").Activate
'pour que la boîte de dialogue s'ouvre,
'une des cellules de la plage à filtrée
'doit être active. IL va de soi que la feuille
'où se déroule le filtre doit aussi être la
'feuille active.
.Range("A1").AutoFilter
'Si l'usager clique sur le bouton "annuler" de
'la boîte de filtre personnalisée
If Application.Dialogs(xlDialogFilter).Show(N) = False Then
MsgBox "Opération annulée"
Set Rg = Nothing: Exit Sub
Else
Set Rg = .AutoFilter.Range
End If

'Nombre Enregistrement trouvé en A
A = .Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Count -
1

End With

'Si aucun enregistrement est trouvé lors du filtre
If A = 0 Then
MsgBox "Aucun enregistrement ne répond à votre critère."
Selection.AutoFilter: Set Rg = Nothing: Exit Sub

'Si au moins un enregistrement est trouvé :
ElseIf A > 0 Then
'Affichage du nombre d'enregistrements trouvés
'Décision quant à l'action à prendre concernant des enregistrements.

R = InputBox(A & " enregistrement(s) trouvé(s)." & vbCrLf & vbCrLf &
_

"Quel numéro correspond à l'action à suivre ?" & vbCrLf & vbCrLf &
_

"1 . Annuler" & vbCrLf & _
"2 . Copier vers une autre destination" & vbCrLf & _
"3 . Colorer les lignes obtenues par ce filtre" & vbCrLf & _
"4 . Supprimer les lignes obtenues par ce filtre" & vbCrLf & _
"5 . Additionner une colonne de la plage filtrée ", "Actions
disponibles sur la plage filtrée")


'Choix des actions possibles
Select Case R
Case Is = faux
Selection.AutoFilter
Case 2
'Effacer la plage déjà existante à la plage destination.
Worksheets(2).Range("A1").CurrentRegion.Clear
'Redimensionne la plage (sans les 2 lignes(titre et
critère))

Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

'Copie les données filtrées vers la destination.
Rg.Copy Worksheets(2).Range("A1")
'Enlève les Flèches du filtre automatique
Selection.AutoFilter
Case 3
'Redimensionne la plage (sans les 2 lignes(titre et
critère))

Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

'Affecte la couleur à la plage
Rg.Interior.ColorIndex = 3
Selection.AutoFilter
Case 4
Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

Rg.Delete xlUp
Selection.AutoFilter
Case 5
'additionne la première colonne de la plage filtrée
MsgBox
Application.Sum(Worksheets(1).Range("_FilterDataBase") _

.Columns(1).SpecialCells(xlCellTypeVisible))
'Bien d'autres fonctions de la feuille sont disponibles et
applicable

'à la plage filtrée
Selection.AutoFilter
Case Else
Selection.AutoFilter
End Select
End If
Set Rg = Nothing

End Sub
'--------------------------------


Salutations!


a écrit dans le message de
news:010201c394cc$4dd32bb0$

Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.







Avatar
Denis Michon
Bonjour Alixe,


Voici 3 exemples de macro. A copier dans un module standard. Tu dois adapter les noms des feuilles de la macro selon
ceux de ton application.


Boucle sur la première colonne d'une plage filtrée (cellules visibles seulement)
'----------------------------
Sub BouclerSurUnePlageFiltrée()

Dim Rg As Range, Are As Range, C As Range
On Error Resume Next
With Worksheets("Feuil1")
'détermine la plage sur laquelle tu as appliqué le filtre
Set Rg = .Range("_FilterDataBase")
'Redimensionne cette plage seulement à la première colonne
'de la plage filtrée pour les cellules visibles de la plage
'filtrée
Set Rg = Rg.Resize(Rg.Rows.Count, 1).SpecialCells(xlCellTypeVisible)
End With

'Une boucle sur les cellules de la colonne 1 de la
'plage filtrée. Va voir l'aide pour l'objet "AREAS"

For Each Are In Rg.Areas
For Each C In Are
MyVar = MyVar & C
Next
Next

'Libère la mémoire des objets
Set Rg = Nothing: Set Are = Nothing: Set C = Nothing

End Sub
'----------------------------


B - Copie les résultats du filtre de la feuille 1 sans la ligne des étiquettes vers la feuil 2 cellule A1
'--------------------------------------------
Sub BouclerSurUnePlageFiltrée1()

Dim Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("_FilterDataBase")
Set Rg = Rg.Offset(1).Resize(Rg.Rows.Count - 1, _
Rg.Count).SpecialCells(xlCellTypeVisible)
Rg.Copy Worksheets("Feuil2").Range("A1")
End With
Set Rg = Nothing

End Sub
'----------------------------------


C ) Copie le résultat du filtre avec la ligne "Étiquette" vers la feuil 2 cellule A1
'----------------------------------
Sub BouclerSurUnePlageFiltrée3()

Dim Rg As Range, Are As Range, C As Range

With Worksheets("Feuil1")
.Range("_FilterDataBase").SpecialCells(xlCellTypeVisible). _
Copy Worksheets("Feuil2").Range("A1")
End With

End Sub
'----------------------------------



Salutations!


"Alixe" a écrit dans le message de news:3f9120e8$0$2781$
Pendant que vous êtes dans les filtres personnalisés, peut-être pourriez
vous m'aider à résoudre un (petit) problème ?

J'aimerai récupérer les valeurs d'une colonne de mon tableau :
je suis donc partie sur une boucle
Selection.cells(i).value
et je concatène le contenu de toutes les cellules de ma sélection dans une
variable

Le problème est que, bien que ma sélection ne porte théoriquement que sur
les cellules visibles (résultat du filtre), les valeurs récupérées dans ma
variable reflète le contenu des toutes les cellules se trouvant entre la
première et la dernière cellule de ma sélection (le filtre n'est donc pas
pris en compte).

Ce que je ne comprends pas, c'est que lorsque je fais Selection.copy, seules
les cellules visibles sont copiée.

Y-a-t-il un moyen de passer en revue toutes les cellules visibles de ma
selection pour en récupérer les valeurs ?

Merci


"Denis Michon" a écrit dans le message de
news:OIVjb.1511$
Bonjour anonymous,


Voici un exemple d'un filtre faisant affiché la boîte de dialogue que tu
demandes. Comme la procédure est commentée, je

me ferais avare de commentaires ... ! ;-)

N.B Tu devrais peut être faire un effort pour te trouver un pseudonyme
plus original !!!



'--------------------------------
Sub CopiePlageFiltré()

Dim N As Integer, A As Long, R As Variant, Rg As Range
N = 1
With Worksheets(1)
.Activate
.Range("A1").Activate
'pour que la boîte de dialogue s'ouvre,
'une des cellules de la plage à filtrée
'doit être active. IL va de soi que la feuille
'où se déroule le filtre doit aussi être la
'feuille active.
.Range("A1").AutoFilter
'Si l'usager clique sur le bouton "annuler" de
'la boîte de filtre personnalisée
If Application.Dialogs(xlDialogFilter).Show(N) = False Then
MsgBox "Opération annulée"
Set Rg = Nothing: Exit Sub
Else
Set Rg = .AutoFilter.Range
End If

'Nombre Enregistrement trouvé en A
A = .Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Count -
1

End With

'Si aucun enregistrement est trouvé lors du filtre
If A = 0 Then
MsgBox "Aucun enregistrement ne répond à votre critère."
Selection.AutoFilter: Set Rg = Nothing: Exit Sub

'Si au moins un enregistrement est trouvé :
ElseIf A > 0 Then
'Affichage du nombre d'enregistrements trouvés
'Décision quant à l'action à prendre concernant des enregistrements.

R = InputBox(A & " enregistrement(s) trouvé(s)." & vbCrLf & vbCrLf &
_

"Quel numéro correspond à l'action à suivre ?" & vbCrLf & vbCrLf &
_

"1 . Annuler" & vbCrLf & _
"2 . Copier vers une autre destination" & vbCrLf & _
"3 . Colorer les lignes obtenues par ce filtre" & vbCrLf & _
"4 . Supprimer les lignes obtenues par ce filtre" & vbCrLf & _
"5 . Additionner une colonne de la plage filtrée ", "Actions
disponibles sur la plage filtrée")


'Choix des actions possibles
Select Case R
Case Is = faux
Selection.AutoFilter
Case 2
'Effacer la plage déjà existante à la plage destination.
Worksheets(2).Range("A1").CurrentRegion.Clear
'Redimensionne la plage (sans les 2 lignes(titre et
critère))

Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

'Copie les données filtrées vers la destination.
Rg.Copy Worksheets(2).Range("A1")
'Enlève les Flèches du filtre automatique
Selection.AutoFilter
Case 3
'Redimensionne la plage (sans les 2 lignes(titre et
critère))

Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

'Affecte la couleur à la plage
Rg.Interior.ColorIndex = 3
Selection.AutoFilter
Case 4
Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

Rg.Delete xlUp
Selection.AutoFilter
Case 5
'additionne la première colonne de la plage filtrée
MsgBox
Application.Sum(Worksheets(1).Range("_FilterDataBase") _

.Columns(1).SpecialCells(xlCellTypeVisible))
'Bien d'autres fonctions de la feuille sont disponibles et
applicable

'à la plage filtrée
Selection.AutoFilter
Case Else
Selection.AutoFilter
End Select
End If
Set Rg = Nothing

End Sub
'--------------------------------


Salutations!


a écrit dans le message de
news:010201c394cc$4dd32bb0$

Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.







Avatar
Alixe
J'essaye dès demain. Merci beaucoup

"Denis Michon" a écrit dans le message de
news:cnakb.2120$
Bonjour Alixe,


Voici 3 exemples de macro. A copier dans un module standard. Tu dois
adapter les noms des feuilles de la macro selon

ceux de ton application.


Boucle sur la première colonne d'une plage filtrée (cellules visibles
seulement)

'----------------------------
Sub BouclerSurUnePlageFiltrée()

Dim Rg As Range, Are As Range, C As Range
On Error Resume Next
With Worksheets("Feuil1")
'détermine la plage sur laquelle tu as appliqué le filtre
Set Rg = .Range("_FilterDataBase")
'Redimensionne cette plage seulement à la première colonne
'de la plage filtrée pour les cellules visibles de la plage
'filtrée
Set Rg = Rg.Resize(Rg.Rows.Count, 1).SpecialCells(xlCellTypeVisible)
End With

'Une boucle sur les cellules de la colonne 1 de la
'plage filtrée. Va voir l'aide pour l'objet "AREAS"

For Each Are In Rg.Areas
For Each C In Are
MyVar = MyVar & C
Next
Next

'Libère la mémoire des objets
Set Rg = Nothing: Set Are = Nothing: Set C = Nothing

End Sub
'----------------------------


B - Copie les résultats du filtre de la feuille 1 sans la ligne des
étiquettes vers la feuil 2 cellule A1

'--------------------------------------------
Sub BouclerSurUnePlageFiltrée1()

Dim Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("_FilterDataBase")
Set Rg = Rg.Offset(1).Resize(Rg.Rows.Count - 1, _
Rg.Count).SpecialCells(xlCellTypeVisible)
Rg.Copy Worksheets("Feuil2").Range("A1")
End With
Set Rg = Nothing

End Sub
'----------------------------------


C ) Copie le résultat du filtre avec la ligne "Étiquette" vers la feuil 2
cellule A1

'----------------------------------
Sub BouclerSurUnePlageFiltrée3()

Dim Rg As Range, Are As Range, C As Range

With Worksheets("Feuil1")
.Range("_FilterDataBase").SpecialCells(xlCellTypeVisible). _
Copy Worksheets("Feuil2").Range("A1")
End With

End Sub
'----------------------------------



Salutations!


"Alixe" a écrit dans le message de
news:3f9120e8$0$2781$

Pendant que vous êtes dans les filtres personnalisés, peut-être pourriez
vous m'aider à résoudre un (petit) problème ?

J'aimerai récupérer les valeurs d'une colonne de mon tableau :
je suis donc partie sur une boucle
Selection.cells(i).value
et je concatène le contenu de toutes les cellules de ma sélection dans une
variable

Le problème est que, bien que ma sélection ne porte théoriquement que sur
les cellules visibles (résultat du filtre), les valeurs récupérées dans ma
variable reflète le contenu des toutes les cellules se trouvant entre la
première et la dernière cellule de ma sélection (le filtre n'est donc pas
pris en compte).

Ce que je ne comprends pas, c'est que lorsque je fais Selection.copy,
seules

les cellules visibles sont copiée.

Y-a-t-il un moyen de passer en revue toutes les cellules visibles de ma
selection pour en récupérer les valeurs ?

Merci


"Denis Michon" a écrit dans le message de
news:OIVjb.1511$
Bonjour anonymous,


Voici un exemple d'un filtre faisant affiché la boîte de dialogue que tu
demandes. Comme la procédure est commentée, je

me ferais avare de commentaires ... ! ;-)

N.B Tu devrais peut être faire un effort pour te trouver un pseudonyme
plus original !!!



'--------------------------------
Sub CopiePlageFiltré()

Dim N As Integer, A As Long, R As Variant, Rg As Range
N = 1
With Worksheets(1)
.Activate
.Range("A1").Activate
'pour que la boîte de dialogue s'ouvre,
'une des cellules de la plage à filtrée
'doit être active. IL va de soi que la feuille
'où se déroule le filtre doit aussi être la
'feuille active.
.Range("A1").AutoFilter
'Si l'usager clique sur le bouton "annuler" de
'la boîte de filtre personnalisée
If Application.Dialogs(xlDialogFilter).Show(N) = False Then
MsgBox "Opération annulée"
Set Rg = Nothing: Exit Sub
Else
Set Rg = .AutoFilter.Range
End If

'Nombre Enregistrement trouvé en A
A .Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Count -
1

End With

'Si aucun enregistrement est trouvé lors du filtre
If A = 0 Then
MsgBox "Aucun enregistrement ne répond à votre critère."
Selection.AutoFilter: Set Rg = Nothing: Exit Sub

'Si au moins un enregistrement est trouvé :
ElseIf A > 0 Then
'Affichage du nombre d'enregistrements trouvés
'Décision quant à l'action à prendre concernant des
enregistrements.



R = InputBox(A & " enregistrement(s) trouvé(s)." & vbCrLf & vbCrLf
&


_
"Quel numéro correspond à l'action à suivre ?" & vbCrLf & vbCrLf
&


_
"1 . Annuler" & vbCrLf & _
"2 . Copier vers une autre destination" & vbCrLf & _
"3 . Colorer les lignes obtenues par ce filtre" & vbCrLf & _
"4 . Supprimer les lignes obtenues par ce filtre" & vbCrLf & _
"5 . Additionner une colonne de la plage filtrée ", "Actions
disponibles sur la plage filtrée")


'Choix des actions possibles
Select Case R
Case Is = faux
Selection.AutoFilter
Case 2
'Effacer la plage déjà existante à la plage destination.
Worksheets(2).Range("A1").CurrentRegion.Clear
'Redimensionne la plage (sans les 2 lignes(titre et
critère))

Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

'Copie les données filtrées vers la destination.
Rg.Copy Worksheets(2).Range("A1")
'Enlève les Flèches du filtre automatique
Selection.AutoFilter
Case 3
'Redimensionne la plage (sans les 2 lignes(titre et
critère))

Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

'Affecte la couleur à la plage
Rg.Interior.ColorIndex = 3
Selection.AutoFilter
Case 4
Set Rg = Rg.Offset(2).Resize(Rg.Rows.Count - 2,
Rg.Columns.Count)

Rg.Delete xlUp
Selection.AutoFilter
Case 5
'additionne la première colonne de la plage filtrée
MsgBox
Application.Sum(Worksheets(1).Range("_FilterDataBase") _

.Columns(1).SpecialCells(xlCellTypeVisible))
'Bien d'autres fonctions de la feuille sont disponibles
et


applicable
'à la plage filtrée
Selection.AutoFilter
Case Else
Selection.AutoFilter
End Select
End If
Set Rg = Nothing

End Sub
'--------------------------------


Salutations!


a écrit dans le message de
news:010201c394cc$4dd32bb0$

Désolé Denis, il s'agit du filtre personnalisé, et non
pas du filtre élaboré.
Merci beaucoup
Patrick

-----Message d'origine-----
Bonjour Crel,


Application.Dialogs(xlDialogFilterAdvanced).Show


Regarde dans l'aide VBA sous la rubrique Dialog, tu
devrais obtenir la liste des constante Xldialog et les

paramètres
qu'ils acceptent.


Salutations!



"Crel" a écrit dans
le message de

news:
Bonjour à toutes et tous
Je désire lancer à partir d'un bouton macro la boite de
filtre personnalisé.
Clément Marcotte m'a indiqué la marche à suivre, mais je
n'y arrive pas...

Désolé
Merci beaucoup
Patrcik




.












1 2