1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| Sub Macro1()'
' Flitre les cotations lorsque les 7 valeurs existent pour une date
' M_thode :
' 1- copie les 7 listes (date/valeur) l'une dernière l'autre sur une nouvelle feuille avec 3 colonnes (date, nom, valeur)
' 2- cree un tableau croise dynamique avec les dates en ligne, les noms en colonne et le count des valeurs
' 3- filtre les dates pour lesquelles il y a un count total de 7
' 4- utilise cette liste de date pour un vlookup
Feuille1 = ActiveSheet.Name
Sheets.Add
ActiveSheet.Name = "Liste"
Cells(1, 1) = "Date"
Cells(1, 2) = "Valeur"
Cells(1, 3) = "Nom"
Position = 2 'prochaine position a coller dans la liste globale
For Serie = 1 To 7 ' met les 7 series en une seule colonne
Sheets(Feuille1).Select
Nom = Cells(1, 2 + (Serie - 1) * 3)
NbLignes = Cells(7, 1 + (Serie - 1) * 3).CurrentRegion.Rows.Count - 2 ' je retire 2 pour l'entête en ligne 7 et le #Name en ligne 8
Range(Cells(9, 1 + (Serie - 1) * 3), Cells(8 + NbLignes, 2 + (Serie - 1) * 3)).Copy
Sheets("Liste").Select
Cells(Position, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range(Cells(Position, 3), Cells(Position - 1 + NbLignes, 3)) = Nom
Position = Position + NbLignes
Next Serie
Columns("A:A").NumberFormat = "dd/mm/yy;@" ' changer en jj/mm/aa si version francçaise !
'creation d'un tableau croise dynamique avec le nombre de valeur par date
Range("A1").CurrentRegion.Select
ActiveWorkbook.Names.Add Name:="BDATA", RefersToR1C1:=Selection
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"BDATA").CreatePivotTable TableDestination:="", TableName:= _
"PivotTable1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Name = "Pivot"
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Date")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables("PivotTable1").PivotFields("Valeur"), "S#Valeur", xlCount
'pour chaque serie, chaque ligne, ajoute le nombre de serie pour la date donnee
Sheets(Feuille1).Select
For Serie = 1 To 7
NbLignes = Cells(7, 1 + (Serie - 1) * 3).CurrentRegion.Rows.Count - 2 ' idem premieère boucle
Range(Cells(9, 3 + (Serie - 1) * 3), Cells(8 + NbLignes, 3 + (Serie - 1) * 3)).FormulaR1C1 = "=VLOOKUP(RC[-2],Pivot!C1:C2,2,FALSE)"
J = 9
While J < (NbLignes + 9)
If Cells(J, 3 + (Serie - 1) * 3) <> 7 Then 'la date n'a pas les 7 series, on supprime
Range(Cells(J, 1 + (Serie - 1) * 3), Cells(J, 3 + (Serie - 1) * 3)).Delete shift:=xlUp
NbLignes = NbLignes - 1
Else
J = J + 1
End If
Wend
' Efface la colonne Vlookup
Range(Cells(9, 3 + (Serie - 1) * 3), Cells(8 + NbLignes, 3 + (Serie - 1) * 3)).ClearContents
Next Serie
Sheets("Pivot").Delete
Sheets("Liste").Delete
End Sub |
Partager