Microsoft 365 Filtre et suppression avec vba sur liste

JBL07

XLDnaute Occasionnel
Bonjour le Forum,

J'aurais besoin d'un petit bout de code pour agir sur un tableau :

Dans le tableau en PJ, on voit des articles ( fruits ) avec des dates de ventes
Je souhaiterais qu'après lancement du code, les lignes avec une date identique par fruit soient supprimées, et que ne subsistent dans le tableau que les fruits avec dates de vente différentes ( voir résultat dans le tableau 2 )

Un grand merci par avance !
 

Pièces jointes

  • test vente.xls
    29 KB · Affichages: 8
Solution
Bonjour,

Je vous avais fait un truc pour un .xls donc je vous le donne.
La macro crée une colonne provisoire avec la formule : "=SUMPRODUCT(($B$3:$B$17=$B3)*($D$3:$D$17<>$D3)))" en adaptant le nombre de lignes bien-sûr.
cette formule compte le nombre de ventes avec dates différentes.
Ensuite la macro fait un filtre avancé sur les lignes >0 et copie les données en i2:n2
puis effacement de la colonne provisoire et de la zone de critères (P1: P 2)

Cordialement

[Edition] Hier j'avais rédigé ce message, sans l'avoir validé [/Edition]

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

Votre tableau de résultat ne semble pas remplir les conditions dont vous parlez . Ou sont les Pommes et les Poires, les kiwis ont 2 dates de vente identiques ????

Vous avez excel 365. Pourquoi un fichier dont le format est dépassé depuis la version 2007 ?
Vous pouvez faire ce que vous demandez directement par l'interface, dans l'onglet 'Outils de données' vous avez un bouton qui supprime automatiquement les doublons sur les colonnes que vous voulez :
1652173572328.png


Il est très efficace.

Avec l'enregistreur de macro activé, cela donne ça :
VB:
ActiveSheet.Range("$A$2:$F$17").RemoveDuplicates Columns:=Array(2, 4), Header:=xlYes

Cordialement
 
Dernière édition:

JBL07

XLDnaute Occasionnel
Bonjour Hasco,

Il s'agit d'un export ( et une utilisation finale ) dans un environnement de travail qui n'a pas Office 365
Le tableau est juste : Les 2 lignes Pomme ont une date de vente identique, donc suppression, idem pour Poire et Banane.
Par contre, les 3 dates de vente de Kiwi ne sont pas identiques, donc je garde les 3 lignes Kiwi, idem pour Mangue, Orange et Prune
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Par contre, les 3 dates de vente de Kiwi ne sont pas identiques,
Dans votre tableau résultat comme dans le tableau d'origine :
Ship-to partyName of the ship-to partysaisiVenteNbCode P
250Kiwi09/05/202210/05/2022344860
250Kiwi09/05/202210/05/2022344860
250Kiwi09/05/202211/05/2022344860

Les deux premières lignes Kiwi ont bien deux dates de vente identiques ou ai-je la berlue ? :)
Demande originale :
et que ne subsistent dans le tableau que les fruits avec dates de vente différentes
Deuxième question : Peut-on se fier au Code P plutôt qu'à la dénomination ?

Troisième question : quelle version excel avez-vous dans votre environnement de travail ?

Cordialement
 
Dernière édition:

JBL07

XLDnaute Occasionnel
Vous n'avez point la berlue, lol, mais si une seule ligne pour 1 fruit a une date différente, je veux conserver toutes les lignes de ce fruit.
On ne peux se fier au CP : en fait le fichier que je vais utiliser, c'est la colonne Ship-to-party qui servira de ref
Pour la version Excel, j'ai Microsoft 365, mais c'est un classeur qui m'est envoyé; ceci dit je peux le ré enregistrer
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Je vous avais fait un truc pour un .xls donc je vous le donne.
La macro crée une colonne provisoire avec la formule : "=SUMPRODUCT(($B$3:$B$17=$B3)*($D$3:$D$17<>$D3)))" en adaptant le nombre de lignes bien-sûr.
cette formule compte le nombre de ventes avec dates différentes.
Ensuite la macro fait un filtre avancé sur les lignes >0 et copie les données en i2:n2
puis effacement de la colonne provisoire et de la zone de critères (P1: P 2)

Cordialement

[Edition] Hier j'avais rédigé ce message, sans l'avoir validé [/Edition]
 

Pièces jointes

  • test vente.xls
    98.5 KB · Affichages: 3
Dernière édition:

JBL07

XLDnaute Occasionnel
Merci Hasco !

Celà fonctionne très bien, mais j'ai voulu l'adapter à mon tableau définitif, qui comporte 21 colonnes, en modifiant noms de colonne et cellules, mais celà ne va pas - Voici le code "transformé", je ne peux hélas pas mettre le vrai tableau en PJ..; voyez-vous qq chose qui serait mal transposé ?

Const FML As String = "=SUMPRODUCT(($D$2:$D$#=$D2)*($G$2:$G$#<>$G2))"
Dim plg As Range
Set plg = ThisWorkbook.Sheets("Consolidation").Range("C1").CurrentRegion
'
'
' Création critères filtre
plg.Parent.Range("Y1:Y2") = Application.Transpose(Array("Nb Creations", ">0"))
'
' Création colonne supplémentaire provisoire pour la formule de comptage
With plg.Offset(1, plg.Columns.Count).Resize(plg.Rows.Count - 1, 1)
'
.Formula = Replace(FML, "#", CStr(.Row + .Rows.Count))
'
' Laisser le temps à l'application de calculer si de nombreuses lignes
Do
DoEvents
Loop Until Application.CalculationState = xlDone
'
' Entête de la colonne
.Cells(0, 1) = "Nb Creations"
'
' Filtrage du tableau
.CurrentRegion.AdvancedFilter xlFilterCopy, plg.Parent.Range("Y1:Y2"), plg.Parent.Range("AA1:AA22")
'
' Nettoyage de la colonne de calcul
.ClearContents
.Cells(0, 1).ClearContents
End With
'
' Nettoyage de la zone de critères
plg.Parent.Range("Y1:Y2").ClearContents

End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour
je ne peux hélas pas mettre le vrai tableau en PJ..

Avec de fausses données.

Sinon faites tourner la macro en pas à pas (F8) et à chaque étape, vérifier les plages de cellule dans la fenêtre exécution (CTRL+G), en y tapant (ou collant ) par exemple (point d'interrogation compris) :
?plg.Offset(1, plg.Columns.Count).Resize(plg.Rows.Count - 1, 1).Address
Puis ENTREE.
vous verrez s'afficher l'adresse de la plage de cellule correspondant.


cordialement
 

JBL07

XLDnaute Occasionnel
Bonjour Hasco

Voilà en PJ le fichier avec de fausses données
J'ai positionné la plage après filtre en AA1 : AA22, mas idéalement, je la souhaiterais si possible et par ordre de préférence :
choix 1 : carrément à la place du fichier ( A1 : U1 )
choix 2 : sur la seconde feuille du classeur "Filtre"

Après filtre, basé sur les colonnes 3 et 7, les Pion et Fou doivent donc avoir disparu :)

Un grand merci à toi pour le temps passé à m'aider !
 

Pièces jointes

  • Consolidation BL.xlsm
    24.5 KB · Affichages: 2

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour

Et changer D pour C dans la formule : "=SUMPRODUCT(($D$2:$D$#=$D2)*($G$2:$G$#<>$G2))" ?

Pour la destination il suffit de changer l'adresse et rajouter le nom de la feuille

Attention: pour les filtres avancés, les noms de colonnes doivent être strictement les mêmes dans la source ET la destination.
Vous pouvez omettre celles que vous ne voulez pas dans la destination. Mais celles qui y sont doivent avoir les même entête.

Cordialement
 

Pièces jointes

  • JBL07-Consolidation BL.xlsm
    30.9 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 931
Messages
2 093 718
Membres
105 794
dernier inscrit
mallet