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

filtre elaboré pour soustraire à une liste une "sous liste" ?.

11 réponses
Avatar
Alfred WALLACE
Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la r=E9sultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elabor=E9 peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

Jos=E9

10 réponses

1 2
Avatar
Jacquouille
Bonjour Alfred

Perso, je ferais ceci (si j'ai bien compris):
Sur une troisième feuille, copier la liste A ET la liste B.
Ensuite, je filtrerais sur place avec l'option "sans doux blonds".



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Alfred WALLACE" a écrit dans le message de groupe de discussion :


Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la résultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elaboré peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

José
Avatar
LSteph
Bonjour,

Supposons tes Listes en Feuil1 2 3 de A2:A50 et en A le titre Objet

et que la listeB soity composée d'items issus de la Liste A
par filtre élaboré ne semble pas pratique dans ce cas, par macro
forcément on boucle et ca y est,

je choisis donc une proposition par formule puisque prioritairement
c'est possible ainsi:

en colonne b adjacente à ta liste de Feuil1
=NB.SI(Feuil2!$A$2:$A$50;Feuil1!A2)+LIGNE()/10000
en A2:A50 de Feuil3
=SI(LIGNE()-1>(NBVAL(Feuil1!$A$2:$A$50)-NBVAL(Feuil2!$A$2:$A$50));"";
INDEX(Feuil1!$A$2:A50;EQUIV(PETITE.VALEUR(Feuil1!$B$2:$B
$50;LIGNE()-1);Feuil1!$B$2:$B$50;0)))

--
LSteph



On 22 fév, 10:31, Alfred WALLACE wrote:
Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la résultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elaboré peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

José
Avatar
LSteph
Bonjour Jacquouille,

il me semble que le résultat de cette extraction reprend la liste en
A
certes sans doublons mais sans éliminer ceux qui sont en la liste B

Cordialement.

--
LSteph
(Mieux vaut partir à point que d'arriver saignant )


On 22 fév, 12:26, "Jacquouille" wrote:
Bonjour Alfred

Perso, je ferais ceci (si j'ai bien compris):
Sur une troisi me feuille, copier la liste A  ET la liste B.
Ensuite, je filtrerais sur place avec l'option "sans doux blonds".

Jacquouille

" Le vin est au repas ce que le parfum est la femme."
"Alfred WALLACE"  a crit dans le message de groupe de discussion :


Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la r sultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elabor peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

Jos
Avatar
Alfred WALLACE
Bonjour à vous deux, merci.

pour Jacquouille, effectivement, celà enleve les doublons, mais celà
laisse les valeurs initiales,
c'est à dire que, si j'ai 3 objets A, il m'en laisse 1.


Pour Lsteph :
je vais essayer de faire fonctionner tes formules, mais je voulais
préciser que
liste A = liste GLOBALE (plus de 1000 lignes)
liste B = une liste saisie "a la mano" : ce sont les objets que l'on
souhaite "sortir" de la liste A.
la liste C = c'est le resultat, c'est à dire Liste A moins liste B.

bon, ceci dit, j'essaye de comprendre .... ta première formule permet
de savoir
si, dans la liste globale, le nom de la ligne en cours est présent
dans la liste B...
mais, pourquoi tu rajoutes le numéro de ligne en cours / 10000 ?

pour ta 2ieme formule ... heu ... j'é malalatêêêêteuuuuu....

-> SI ! bon, là..... je comprend ...

=SI(

-> là je comprend pas, mais, c'est le cas où l'objet ne doit pas être
remis en liste C

LIGNE()-1 > ( NBVAL(Feuil1!$A$2:$A$50) - NBVAL(Feuil2!$A$2:$A
$50) )


-> dans ce cas tu mets "" dans la cellule.

;

-> valeur vide. OK, là je comprend !!! lol...
""

-> SINON ... heu et alors là ... heu .... je capte plus rien !!!!

;
-> heu, l'aide sur INDEX .... me dit pas trop comment tu utilises ces
formules.....

INDEX(

Feuil1!$A$2:A50 ;

EQUIV(

PETITE.VALEUR(Feuil1!$B$2:$B$50 ; LIGNE()-1 );

Feuil1!$B$2:$B$50;0
)
)
)

EN TOUT CAS Çà marche !!!! (et je ne cris pas...)

MERCI pour ton aide ! et j'espère que tu voudras bien m'expliquer
comment çà fonctionne...

cordialement
José







Lsteph à écrit :
Bonjour,

Supposons tes Listes en Feuil1 2 3 de A2:A50 et en A le titre Objet

et que la listeB soity composée d'items issus de la Liste A
par filtre élaboré ne semble pas pratique dans ce cas, par macro
forcément on boucle et ca y est,

je choisis donc une proposition par formule puisque prioritairement
c'est possible ainsi:

en colonne b adjacente à ta liste de Feuil1
=NB.SI(Feuil2!$A$2:$A$50;Feuil1!A2)+LIGNE()/10000
en A2:A50 de Feuil3
=SI(LIGNE()-1>(NBVAL(Feuil1!$A$2:$A$50)-NBVAL(Feuil2!$A$2:$A$50));"";
INDEX(Feuil1!$A$2:A50;EQUIV(PETITE.VALEUR(Feuil1!$B$2:$B
$50;LIGNE()-1);Feuil1!$B$2:$B$50;0)))

--
LSteph

On 22 fév, 10:31, Alfred WALLACE wrote:
Avatar
Igor
Bonjour
Un filtre élaboré avec une formule semble pas mal aussi...
A condition qu'il y ait une colonne qui serve de comparaison pour le "dédoublonnage" entre Feuil1 et Feuil2.
(Et s'il faut comparer plusieurs infos : une petite concaténation dans chaque feuille)
On va dire qu'on compare la colonne F de Feuil1 à la colonne G de Feuil2.

On veut extraire de Feuil1 en Feuil3 : se placer dans une zone vide de Feuil3.

La plage de données source : la liste de données de Feuil1.

Le critère est par exemple en Feuil3, cellules Feuil3!A1:A2
La cellule A1 est vide (cause critère sur formule).
La cellule A2 contient la formule
=NB.SI(Feuil2!$G$2:$G$2000;Feuil1!F2)=0
Le filtre élaboré va compter le nombre d'occurences de chaque cellule de la colonne F de Feuil1 dans la G2:G2000 de Feuil2.
Egal à 0, la ligne est extraite.

La destination, par exemple Feuil3!A4

Et hop.
Igor

"Alfred WALLACE" a écrit dans le message de
news:
Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la résultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elaboré peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

José
Avatar
LSteph
....
L'explication:
en colonne b adjacente à ta liste de Feuil1
=NB.SI(Feuil2!$A$2:$A$50;Feuil1!A2)+LIGNE()/10000

sert à determiner si la valeur liste Feuil1 est dans l'autre liste
Feuil2
et à lui attribuer ainsi la valeur zero si on a pas trouvé + sa
position en décimal lorsque on ajoute son num de ligne/10000
on obtient ainsi un classement 0,000..le num de ligne
ou 1,000..le num de ligne qui sera forcément plus grand si la valeur a
été trouvée
donc si tu as vraiment beaucoup de lignes /1000000 au lieu de 10000

Ensuite on s'en servira dans le index equiv pour renvoyer la valeur de
colonne A selon le rang en colonne B

Petite.valeur (matrice;k)
k est l'indice donc le rang pris en compte soit, 1 la plus petite 2
la suivante ..etc .. le but est de s'arrêter et mettre "" quand il n'y
en a plus
c'est pourquoi on prends le nb de liste A - le nombre de liste B
SI(LIGNE()-1>(NBVAL(Feuil1!$A$2:$A$50)-NBVAL(Feuil2!$A$2:$A$50));"";

...liste GLOBALE (plus de 1000 lignes)



dans ce cas tu peux adapter
SI(LIGNE()-1>(NBVAL(Feuil1!$A$2:$A$5000)-NBVAL(Feuil2!$A$2:$A
$5000));"";
INDEX(Feuil1!$A$2:A5000;EQUIV(PETITE.VALEUR(Feuil1!$B$2:$B
$5000;LIGNE()-1);Feuil1!$B$2:$B$5000;0))

Exemple en Feuil1
Objet
truc1
truc2
truc3
truc4
truc5

en Feuil2
Objet
truc2
truc3

on obtient les rangs suivants
Objet rang
truc1 0.000002
truc2 1.000003
truc3 1.000004
truc4 0.000005
truc5 0.000006

Ainsi au delà des 5-2 = 3 éléments restants
SI(LIGNE()-1>(NBVAL(Feuil1!$A$2:$A$6)-NBVAL(Feuil2!$A$2:$A$6));"";
renverra "" sinon
matriceþuil1!$B$2:$B$6
petite.valeur(matrice;1) renverra 0.00002
petite.valeur(matrice;2) ..... 0.00005
petite.valeur(matrice;3) ...... 0.00006

soit ainsi
index(listeFeuil1colonnea;equiv(petite.valeur(..);matrice;0)
renverra respectivement
truc1
truc4
truc5

J'espère que cette explication ne donne pas plus mal à latête ;o))

--
LSteph





On 22 fév, 14:19, Alfred WALLACE wrote:
Bonjour à vous deux, merci.
Avatar
LSteph
...autre solution , cette fois en VBA

'dans Thisworkbook

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
If Not (Sh.Name = "Feuil1" Or Sh.Name = "Feuil2") Then Exit Sub
Application.EnableEvents = False
If Target.Column = 1 Then Call faitliste
Application.EnableEvents = True
End Sub

'dans Module1

Sub faitliste()
Dim c As Range, d As Range, x As Boolean
Feuil3.[a2:a5000].ClearContents
For Each c In Feuil1.[a2:a5000].Cells
x = False
For Each d In Feuil2.[a2:a5000].Cells
If d = c Then x = True: Exit For
Next
If Not x Then Feuil3.[a65536].End(xlUp)(2) = c.Value
Next
End Sub

'--
'LSteph
Avatar
isabelle
bonjour José,

Sub Macro1()
Dim c As Range, plg1 As Range, plg2 As Range, ligne As Integer
Set plg1 = Sheets("Feuil1").Range("A2:A" &
Sheets("Feuil1").Range("A65536").End(xlUp).Row)
Set plg2 = Sheets("Feuil2").Range("A2:A" &
Sheets("Feuil2").Range("A65536").End(xlUp).Row)
For Each c In plg1
If IsError(Application.Match(c, plg2, 0)) Then
ligne = Sheets("Feuil3").Range("A65536").End(xlUp).Row + 1
Sheets("Feuil1").Rows(c.Row).Copy Sheets("Feuil3").Rows(ligne)
Application.CutCopyMode = False
End If
Next
End Sub

isabelle


Le 2011-02-22 04:31, Alfred WALLACE a écrit :
Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la résultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elaboré peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

José

Avatar
LSteph
..j'ai oublié de préciser que la liste se met à jour qd on modifie un e
valeur dans liste feuil1 ou feuil2
mais tu l'aura sans doute compris en lisant le code


On 22 fév, 16:02, LSteph wrote:
...autre solution , cette fois en VBA
Avatar
michdenis
Bonjour,

une autre approche,

Tu pourrais utiliser une formule comme RechecheV ou la combinaison Index-equiv()

Dans une colonne, tu inscris que tu recopies sur la colonne.
=Recherche(Feuil1!A1;Feuil2!A1:A50;1;Faux)
Si la donnée en Feuil1!A1 n'est pas présente dans la feuil2, tu obtiens NA

Tu fais un filtre automatique pour afficher seulement les NA
et tu supprimes les lignes visibles seulement




MichD
--------------------------------------------
"Alfred WALLACE" a écrit dans le message de groupe de discussion :


Bonjour,

j'aimerai faite la chose suivante :

en feuille 1, j'ai une liste "A" d'objets.
en feuille 2, j'ai une liste "B" d'objets.

J'aimerai, en feuille 3 (ou ailleurs) une liste "C"
qui serait la résultante de A moins B.

En d'autre terme, j'aimerai retrouver la liste "A" SANS
les objets de la liste "B".

est ce qu'un filtre elaboré peut le faire ? ou une formule ? ou une
macro ?

merci pour vos conseils.

José
1 2