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
| Sub test()
'Réf. Camembert et histogramme vba - Copie.xls gaston64
Dim Plage As Range, c As Range, Dico As Object, Ctr As Integer
Dim TablSeries(100), TablHisto(100, 1), S As Series
Ctr = -1
With Sheets("Feuil1")
Set Plage = .AutoFilter.Range.Offset(1, 1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
Set Dico = CreateObject("Scripting.Dictionary")
For Each c In Plage
If Not Dico.exists(c.Value) Then
Dico.Add c.Value, c.Value
Ctr = Ctr + 1
TablSeries(Ctr) = c.Value
End If
Var = Application.Match(c.Value, TablSeries(), 0)
If Application.CountA(Range(c.Offset(, 2), c.Offset(, 4))) > 0 Then
TablHisto(Var - 1, 0) = TablHisto(Var - 1, 0) + 1
Else
TablHisto(Var - 1, 1) = TablHisto(Var - 1, 1) + 1
End If
Next c
.[I:L].ClearContents
.[I1] = "Série"
.[J1] = "Rempli"
.[K1] = "Vide"
.[L1] = "Tot"
Ctr = 0
Do While TablSeries(Ctr) <> ""
.Cells(Ctr + 2, 9) = TablSeries(Ctr)
.Cells(Ctr + 2, 10) = TablHisto(Ctr, 0)
.Cells(Ctr + 2, 11) = TablHisto(Ctr, 1)
.Cells(Ctr + 2, 12) = TablHisto(Ctr, 0) + TablHisto(Ctr, 1)
Ctr = Ctr + 1
Loop
Set Plage = Range(.[I1], .Cells(.Rows.Count, 12).End(xlUp))
Plage.Sort .[L1], xlDescending, Header:=xlYes
ligne = .Cells(.Rows.Count, 9).End(xlUp).Row
Set sh = Sheets("Feuil1")
With .ChartObjects("Graphique 2").Chart
For Each S In .SeriesCollection
S.Delete
Next S
For i = 0 To 1
Set S = .SeriesCollection.NewSeries
S.Name = sh.Cells(1, 10).Offset(, i).Value
Var = Application.Transpose(Application.Transpose(sh.Cells(2, 9).Resize(ligne - 1).Offset(, i + 1)))
S.Values = Var
Var = Application.Transpose(Application.Transpose(sh.Cells(2, 9).Resize(ligne - 1)))
S.XValues = Var
Next i
End With
.[I:L].ClearContents
End With
End Sub |