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

[2003] Filtre Elaboré

8 réponses
Avatar
Péhemme
Bonjour à Tous,

Avant que je ne me jette par la fenêtre, quelqu'un peut-il me dire pourquoi,
dans ce p#£$°& de fichier joint mon simple filtre élaboré (qu'il disait) ne
fonctionne pas ?
Les n° de comptes de la colonne M ne sont que la recopie des colonnes B, F
et J.
Je trie ces n° de comptes en ordre croissant.
Je souhaite extraire et recopier en colonne P ligne 5 cette même liste, mais
sans doublons.
J'ai une macro (issue de l'enregistreur de macro) qui devrait le faire :
Sub Macro3()
Range("M5:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P5"), Unique:=True
End Sub

Cela fonctionne pour le n° 658100, mais pas pour le n° 101000.

Où merde-je ? À traduire par "Quéquiya-quivapa" ?
;-))
Pour vous faire gagner du temps, un extrait :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijfqNCkRo.xls
À l'ouverture du dossier, ne mettez pas à jour les liaisons.

Merci d'avance à toutes les bonnes volontés.
Michel

8 réponses

Avatar
isabelle
bonjour Michel,

il faut inclure la ligne de titre

Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True

isabelle
------------------------------------------------------------------

Le 2011-03-29 10:06, Péhemme a écrit :
Bonjour à Tous,

Avant que je ne me jette par la fenêtre, quelqu'un peut-il me dire
pourquoi, dans ce p#£$°& de fichier joint mon simple filtre élaboré
(qu'il disait) ne fonctionne pas ?
Les n° de comptes de la colonne M ne sont que la recopie des colonnes
B, F et J.
Je trie ces n° de comptes en ordre croissant.
Je souhaite extraire et recopier en colonne P ligne 5 cette même
liste, mais sans doublons.
J'ai une macro (issue de l'enregistreur de macro) qui devrait le faire :
Sub Macro3()
Range("M5:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P5"), Unique:=True
End Sub

Cela fonctionne pour le n° 658100, mais pas pour le n° 101000.

Où merde-je ? À traduire par "Quéquiya-quivapa" ?
;-))
Pour vous faire gagner du temps, un extrait :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijfqNCkRo.xls
À l'ouverture du dossier, ne mettez pas à jour les liaisons.

Merci d'avance à toutes les bonnes volontés.
Michel



Avatar
Péhemme
Bonjour Isabelle,

et Merci.
Pourquoi les choses simples, quand on n'en a pas le reflexe, deviennent
compliquées ?
Mille Mercis
Bien amicalement
Michel


"isabelle" a écrit dans le message de
news:imsqpc$phj$
bonjour Michel,

il faut inclure la ligne de titre

Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True

isabelle
------------------------------------------------------------------

Le 2011-03-29 10:06, Péhemme a écrit :
Bonjour à Tous,

Avant que je ne me jette par la fenêtre, quelqu'un peut-il me dire
pourquoi, dans ce p#£$°& de fichier joint mon simple filtre élaboré
(qu'il disait) ne fonctionne pas ?
Les n° de comptes de la colonne M ne sont que la recopie des colonnes B,
F et J.
Je trie ces n° de comptes en ordre croissant.
Je souhaite extraire et recopier en colonne P ligne 5 cette même liste,
mais sans doublons.
J'ai une macro (issue de l'enregistreur de macro) qui devrait le faire :
Sub Macro3()
Range("M5:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P5"), Unique:=True
End Sub

Cela fonctionne pour le n° 658100, mais pas pour le n° 101000.

Où merde-je ? À traduire par "Quéquiya-quivapa" ?
;-))
Pour vous faire gagner du temps, un extrait :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijfqNCkRo.xls
À l'ouverture du dossier, ne mettez pas à jour les liaisons.

Merci d'avance à toutes les bonnes volontés.
Michel



Avatar
MichD
Bonjour,

Ta macro fonctionne très bien :

Un filtre élaboré requiert une étiquette de colonne, j'ai modifié
tes plages de cellules dans la macro pour les y inclure.
'---------------------------------------
Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True
'---------------------------------------

Assure-toi que dans ton classeur l'étiquette Compte N° est identique pour
chacune des colonnes où cette appellation est mentionnée. Une façon de
faire, utiliser un copier-coller...


MichD
--------------------------------------------
Avatar
Péhemme
Bonsoir Denis,

Mille Mercis.

Cela fonctionne parfaitement bien.
Je m'interroge cependant.
Je crains, qu'à l'issue du filtre élaboré, il y ait une différence entre :
. copier vers un autre emplacement, sur la même feuille
. copier vers un autre emplacement, sur une feuille différente
et qu'il faut définir les plages avec ou sans titre en fonction du choix de
la cible.
En fait, je n'en sais rien... Je teste...
Et je compliquerai le tout en nommant mes plages...
Si j'ai un problème, je reviens.
Bien amicalement
Michel



"MichD" a écrit dans le message de
news:imssak$t9m$
Bonjour,

Ta macro fonctionne très bien :

Un filtre élaboré requiert une étiquette de colonne, j'ai modifié
tes plages de cellules dans la macro pour les y inclure.
'---------------------------------------
Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True
'---------------------------------------

Assure-toi que dans ton classeur l'étiquette Compte N° est identique pour
chacune des colonnes où cette appellation est mentionnée. Une façon de
faire, utiliser un copier-coller...


MichD
--------------------------------------------

Avatar
Péhemme
Chers Isabelle et Denis,

Mille mercis pour tout, mais ça, vous le savez déjà.
Pouvez-vous un instant revenir sur les réponses que vous avez faites la
question d'achille en date du 24/03/2010 à 15:14.
À la suite de vos réponses, j'avais monté un petit fichier pouvant me servir
de modèle...
À force de tâtonnements, je m'aperçois que si les 2 premières lignes ont un
nom de client identique, vos macros ne fonctionnent pas de façon
satisfaisante.
Si c'est moi qui n'ait rien compris, merci de ne pas me frapper sur la tête.
;-))
Mon fichier exemple tiré de vos réponses est là :
http://www.cijoint.fr/cjlink.php?file=cj201103/cij5LJAoEo.xls

Bien amicalement
Michel




"MichD" a écrit dans le message de
news:imssak$t9m$
Bonjour,

Ta macro fonctionne très bien :

Un filtre élaboré requiert une étiquette de colonne, j'ai modifié
tes plages de cellules dans la macro pour les y inclure.
'---------------------------------------
Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True
'---------------------------------------

Assure-toi que dans ton classeur l'étiquette Compte N° est identique pour
chacune des colonnes où cette appellation est mentionnée. Une façon de
faire, utiliser un copier-coller...


MichD
--------------------------------------------

Avatar
isabelle
bonjour Michel,

voilà,

Sub Macro1()
'isabelle
Dim c As Range, Client As Range, Facture As Range, x As Range, y As Range

Application.ScreenUpdating = False

With Sheets("Détail") '<--- Adapter au nom de la feuille du tableau
Set Client = .Range("F6:F" & .Range("F65536").End(xlUp).Row)
Set Facture = .Range("I6:I" & .Range("I65536").End(xlUp).Row)
Set x = .Range(Client(2).Address & ":" &
Client(Client.Count).Address)
Set y = .Range(Facture(2).Address & ":" &
Facture(Facture.Count).Address)
ActiveWorkbook.Names.Add Name:="cl", RefersTo:=x
ActiveWorkbook.Names.Add Name:="fact", RefersTo:=y
End With

With Sheets("CA_2010")
Call Vide
Client.AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=.Range("A1"), Unique:=True
For Each c In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
.Range("B" & c.Row).Formula = "=SumProduct((cl =" &
c.Address & ")*(fact))"
Next
With .Range("B1:B" & .Range("A65536").End(xlUp).Row)
.Value = .Value
End With
.Range("G1").Select
End With

With Application
.Names("cl").Delete
.Names("fact").Delete
.ScreenUpdating = True
End With

End Sub


isabelle
------------------------------------------------------------------

Le 2011-03-29 13:20, Péhemme a écrit :
Chers Isabelle et Denis,

Mille mercis pour tout, mais ça, vous le savez déjà.
Pouvez-vous un instant revenir sur les réponses que vous avez faites
la question d'achille en date du 24/03/2010 à 15:14.
À la suite de vos réponses, j'avais monté un petit fichier pouvant me
servir de modèle...
À force de tâtonnements, je m'aperçois que si les 2 premières lignes
ont un nom de client identique, vos macros ne fonctionnent pas de
façon satisfaisante.
Si c'est moi qui n'ait rien compris, merci de ne pas me frapper sur la
tête.
;-))
Mon fichier exemple tiré de vos réponses est là :
http://www.cijoint.fr/cjlink.php?file=cj201103/cij5LJAoEo.xls

Bien amicalement
Michel




"MichD" a écrit dans le message de
news:imssak$t9m$
Bonjour,

Ta macro fonctionne très bien :

Un filtre élaboré requiert une étiquette de colonne, j'ai modifié
tes plages de cellules dans la macro pour les y inclure.
'---------------------------------------
Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True
'---------------------------------------

Assure-toi que dans ton classeur l'étiquette Compte N° est identique
pour
chacune des colonnes où cette appellation est mentionnée. Une façon de
faire, utiliser un copier-coller...


MichD
--------------------------------------------



Avatar
Péhemme
Wouaouh !

Cela fonctionne "formidable".
Avec ta permission, je décortiquerai tout cela (les x et y) dès demain.
Merci encore
Bien amicalement
Michel


"isabelle" a écrit dans le message de
news:imt60j$mud$
bonjour Michel,

voilà,

Sub Macro1()
'isabelle
Dim c As Range, Client As Range, Facture As Range, x As Range, y As Range

Application.ScreenUpdating = False

With Sheets("Détail") '<--- Adapter au nom de la feuille du tableau
Set Client = .Range("F6:F" & .Range("F65536").End(xlUp).Row)
Set Facture = .Range("I6:I" & .Range("I65536").End(xlUp).Row)
Set x = .Range(Client(2).Address & ":" &
Client(Client.Count).Address)
Set y = .Range(Facture(2).Address & ":" &
Facture(Facture.Count).Address)
ActiveWorkbook.Names.Add Name:="cl", RefersTo:=x
ActiveWorkbook.Names.Add Name:="fact", RefersTo:=y
End With

With Sheets("CA_2010")
Call Vide
Client.AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=.Range("A1"), Unique:=True
For Each c In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
.Range("B" & c.Row).Formula = "=SumProduct((cl =" & c.Address
& ")*(fact))"
Next
With .Range("B1:B" & .Range("A65536").End(xlUp).Row)
.Value = .Value
End With
.Range("G1").Select
End With

With Application
.Names("cl").Delete
.Names("fact").Delete
.ScreenUpdating = True
End With

End Sub


isabelle
------------------------------------------------------------------

Le 2011-03-29 13:20, Péhemme a écrit :
Chers Isabelle et Denis,

Mille mercis pour tout, mais ça, vous le savez déjà.
Pouvez-vous un instant revenir sur les réponses que vous avez faites la
question d'achille en date du 24/03/2010 à 15:14.
À la suite de vos réponses, j'avais monté un petit fichier pouvant me
servir de modèle...
À force de tâtonnements, je m'aperçois que si les 2 premières lignes ont
un nom de client identique, vos macros ne fonctionnent pas de façon
satisfaisante.
Si c'est moi qui n'ait rien compris, merci de ne pas me frapper sur la
tête.
;-))
Mon fichier exemple tiré de vos réponses est là :
http://www.cijoint.fr/cjlink.php?file=cj201103/cij5LJAoEo.xls

Bien amicalement
Michel




"MichD" a écrit dans le message de
news:imssak$t9m$
Bonjour,

Ta macro fonctionne très bien :

Un filtre élaboré requiert une étiquette de colonne, j'ai modifié
tes plages de cellules dans la macro pour les y inclure.
'---------------------------------------
Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True
'---------------------------------------

Assure-toi que dans ton classeur l'étiquette Compte N° est identique
pour
chacune des colonnes où cette appellation est mentionnée. Une façon de
faire, utiliser un copier-coller...


MichD
--------------------------------------------



Avatar
Péhemme
Oh !? Trop fort dis !
Je n'ai pas pu résister à l'envie de décortiquer "cela" dès ce soir.
Et le coup des déclarations des x et y en gardant les noms des ranges en les
décalant à la 2ème ligne au début tout en conservant la dernière ligne de
ces mêmes ranges déclarés... mon petit cerveau n'avait pas compris du
premier coup (et je me demande si ma phrase est bien claire).
Maintenant que j'ai bien compris les subtilités de "l'écriture", toujours
pour mon petit cerveau, je l'ai modifiée (en déclarant R as Long) en :

R = .Range("F65536").End(xlUp).Row
Set Client = .Range("F6:F" & R)
Set x = .Range("F7:F" & R)
Set y = .Range("I7:I" & R)
ActiveWorkbook.Names.Add Name:="cl", RefersTo:=x
ActiveWorkbook.Names.Add Name:="fact", RefersTo:=y
Et plus besoin de déclarer "Facture" qui n'existait que pour définir y du
RefersTo.
Enfin... c'est ce que j'ai cru comprendre.
Maintenant j'adapte tout cela dans ma petite application.
Encore merci pour toute ton (tes) aide.
Bien amicalement
Michel



"isabelle" a écrit dans le message de
news:imt60j$mud$
bonjour Michel,

voilà,

Sub Macro1()
'isabelle
Dim c As Range, Client As Range, Facture As Range, x As Range, y As Range

Application.ScreenUpdating = False

With Sheets("Détail") '<--- Adapter au nom de la feuille du tableau
Set Client = .Range("F6:F" & .Range("F65536").End(xlUp).Row)
Set Facture = .Range("I6:I" & .Range("I65536").End(xlUp).Row)
Set x = .Range(Client(2).Address & ":" &
Client(Client.Count).Address)
Set y = .Range(Facture(2).Address & ":" &
Facture(Facture.Count).Address)
ActiveWorkbook.Names.Add Name:="cl", RefersTo:=x
ActiveWorkbook.Names.Add Name:="fact", RefersTo:=y
End With

With Sheets("CA_2010")
Call Vide
Client.AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=.Range("A1"), Unique:=True
For Each c In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
.Range("B" & c.Row).Formula = "=SumProduct((cl =" & c.Address
& ")*(fact))"
Next
With .Range("B1:B" & .Range("A65536").End(xlUp).Row)
.Value = .Value
End With
.Range("G1").Select
End With

With Application
.Names("cl").Delete
.Names("fact").Delete
.ScreenUpdating = True
End With

End Sub


isabelle
------------------------------------------------------------------

Le 2011-03-29 13:20, Péhemme a écrit :
Chers Isabelle et Denis,

Mille mercis pour tout, mais ça, vous le savez déjà.
Pouvez-vous un instant revenir sur les réponses que vous avez faites la
question d'achille en date du 24/03/2010 à 15:14.
À la suite de vos réponses, j'avais monté un petit fichier pouvant me
servir de modèle...
À force de tâtonnements, je m'aperçois que si les 2 premières lignes ont
un nom de client identique, vos macros ne fonctionnent pas de façon
satisfaisante.
Si c'est moi qui n'ait rien compris, merci de ne pas me frapper sur la
tête.
;-))
Mon fichier exemple tiré de vos réponses est là :
http://www.cijoint.fr/cjlink.php?file=cj201103/cij5LJAoEo.xls

Bien amicalement
Michel




"MichD" a écrit dans le message de
news:imssak$t9m$
Bonjour,

Ta macro fonctionne très bien :

Un filtre élaboré requiert une étiquette de colonne, j'ai modifié
tes plages de cellules dans la macro pour les y inclure.
'---------------------------------------
Range("M4:M18").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("P4"), Unique:=True
'---------------------------------------

Assure-toi que dans ton classeur l'étiquette Compte N° est identique
pour
chacune des colonnes où cette appellation est mentionnée. Une façon de
faire, utiliser un copier-coller...


MichD
--------------------------------------------