XL 2016 Trier une liste en fonction de plusieurs critères en VBA? (et pas en mode enregistrement macro)

doublenico

XLDnaute Junior
Bonjour,

Ca faisait longtemps ue je n'étais pas revenu sur ce site :p mais un petit besoin VBA m'a rappelé ce site.

Voici mon besoin :

Je suis responsable de 3 applications parmi des dizaines d'appli.
J'ai DLVY (fiches) qui concernent parfois plusieurs de mes 3 applis mais aussi d'autres applis.

Je souhaite une fois mes 3 applis sélectionnées (mon périmètre) supprimer mes DLVY en double (pas gênant de perdre le nom de l'appli concernée dans la mesure où je sais ue ma DLVY appartient à mon périmètre) le tout seulement pour les sprints en 2018 ou 2019 (pas 2017).
Une fois le tri fait, je ferai un TCD de mes résultats pour ensuite générer un graph.

Je souhaite donc automatiser toutes ces actions car mon fichier d'origine est très long et la fonction de suppression de doublons me donne parfois de drôle de résultats et on peut me demander plusieurs fois dans la journée des extracts.
Voici à uoi ressemble mon fichier et voici le lien du doc avec la macro
https://www.cjoint.com/c/HAAwB42qO5X


Appli DLVY Sprint SFG SFD
isos DLVY-21 oct.-17 oui Validée
isos DLVY-21 oct.-18 oui Validée
cronas DLVY-22 oct.-19 oui Validée
......... ............. ......... .... ..........


et voici mon code dégueux fait avec l'enregistreur VBA.
Je pense une boucle aurait plus de sens mais je ne sais pas faire.
Merci d'avance pour votre aide

Sub Macro1()
'
' Macro1 Macro
'

'je sélectionne la colonne Appli et je filtre sur mes 3 applications

ActiveSheet.Range("$A$1:$F$131").AutoFilter Field:=1, Criteria1:=Array( _
"cronas", "geis", "isos"), Operator:=xlFilterValues

'je sélectionne la colonne Sprint et je filtre sur les dates supérieures à 2017
ActiveSheet.Range("$A$1:$F$131").AutoFilter Field:=3, Operator:= _
xlFilterValues, Criteria2:=Array(0, "1/1/2019", 0, "10/1/2018")
'je sélectionne mon tableau pour faire le traitement des doublons dans la feuille extract

Columns("A:F").Select
Selection.Copy
Sheets("extract").Select
Columns("A:A").Select
ActiveSheet.Paste
Range("A1:E1").Select
Application.CutCopyMode = False
Selection.AutoFilter

'je lance la fonction de suppression des doublons

Columns("B:B").Select
ActiveSheet.Range("$A$1:$E$1048498").RemoveDuplicates Columns:=Array(1, 2, 3, 4, _
5), Header:=xlYes
ActiveWorkbook.Worksheets("extract").AutoFilter.Sort.SortFields.Clear

'je trie mes DLVY pour vérifier u'il n'y a plus de doublons
ActiveWorkbook.Worksheets("extract").AutoFilter.Sort.SortFields.Add Key:= _
Range("B1:B35"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal

'je sélectionne les valeurs de mon tableau pour générer mon TCD dans une nouvelle feuille
With ActiveWorkbook.Worksheets("extract").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWindow.SmallScroll Down:=-40
Range("A1:E35").Select
ActiveWindow.SmallScroll Down:=-130
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"extract!R1C1:R35C5", Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="Feuil3!R3C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion15
Sheets("Feuil3").Select
Cells(3, 1).Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique1").PivotFields("DLVY"), "Nombre de DLVY" _
, xlCount
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Sprint")
.Orientation = xlRowField
.Position = 1
End With

'je génère mon graph
Range("A4:B7").Select
Range("B7").Activate
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Feuil3!$A$3:$B$8")
ActiveSheet.Shapes("Graphique 1").IncrementLeft 42
ActiveSheet.Shapes("Graphique 1").IncrementTop -15
End Sub
 

doublenico

XLDnaute Junior
La nuit portant conseil, je viens de penser à une autre approche : une boucle avec des conditions:
Pour chaque DLVY
si elle appartient à une de mes 3 applis
ET si sprint >2017
ET si elle n'a pas déjà rempli les 2 premières conditions
Alors alors il faut copier la ligne dans une autre feuille

Merci pour votre aide

Edit
la fonction filtre élaboré a résolu mon problème
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 868
dernier inscrit
JJV