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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
| Sub MAJ_Graph()
Dim B As Object 'déclare la variable B (onglet Base)
Dim E As Object 'déclare la variable E (onglet essai_VBA)
Dim date_debut As Date
Dim date_fin As Date
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim COL_OK_R As Integer 'déclare la variable colonne pour consigne respectée
Dim COL_OK_UP As Integer 'déclare la variable colonne pour consigne modifiée Sup
Dim COL_OK_DOWN As Integer 'déclare la variable colonne pour consigne modifiée Inf
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim DL_OK_R As Integer 'déclare la variable DL (Dernière Ligne) consigne respectée
Dim DL_OK_UP As Integer 'déclare la variable DL (Dernière Ligne) consigne modifiée Sup
Dim DL_OK_DOWN As Integer 'déclare la variable DL (Dernière Ligne) consigne modifiée Inf
Dim PL As Range 'déclare la variable PL (PLage)
Dim PL_OK_R As Range 'déclare la variable PL (PLage)
Dim PL_OK_UP As Range 'déclare la variable PL (PLage)
Dim PL_OK_DOWN As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim PLV_OK_R As Range 'déclare la variable PLV (PLage Visible)
Dim PLV_OK_UP As Range 'déclare la variable PLV (PLage Visible)
Dim PLV_OK_DOWN As Range 'déclare la variable PLV (PLage Visible)
Dim cpt_OK As Integer
Dim cpt_filet_mous As Integer
Dim cpt_matière_cassante As Integer
Dim cpt_ok_queue_flanc_milieu_cassant As Integer
Dim cpt_filet_bcp_trop_mou As Integer
Dim cpt_dur_mais_non_cassant As Integer
Dim cpt_MilieuOk_QueueMolle As Integer
Dim cpt_ok_R As Integer 'compteur consigne respectée
Dim cpt_ok_UP As Integer 'compteur consigne modifiée Sup
Dim cpt_ok_DOWN As Integer 'compteur consigne modifiée Inf
Set B = Sheets("Base") 'définit l'onglet B
Set E = Sheets("Essai_VBA") 'définit l'onglet E
DD: 'étiquette
'Demande de la date de début
date_debut = Application.InputBox(prompt, "Entrer une date de début", "jj/mm/aaaa")
If date_debut = False Then Exit Sub 'si date non renseignée sort de la procédure
If DateSerial(Year(date_debut), Month(date_debut), Day(date_debut)) < 41635 Then 'condition : si la date est inférieure à 27/12/2013
MsgBox "Choisir une date supérieure au 27/12/2013 (début d'historique)?" 'message
GoTo DD 'va à l'étiquette DD
End If 'fin de la condition
DF: 'étiquette: Les étiquette DD (Date de Début) et DF (Date de fin) remplacent ton Loop.
'Si la boîte d'entrée de la date de début n'est pas valide le code renvoie à l'étiquette
'DD qui se trouve juste avant l'ouverture de cette boîte d'entrée. Donc, à la validation
'[OK] de la boîte d'entrée de la date de début, si la donnée éditée n'est pas valide, ça
'ouvre à nouveau cette même boîte d'entrée. Idem pour la date de fin..
'Demande de la date de fin
date_fin = Application.InputBox(prompt, "Entrer une date de fin", "jj/mm/aaaa")
If date_fin = False Then Exit Sub 'si date non renseignée sort de la procédure
If CDate(date_fin) < CDate(date_debut) Then 'condition : si la date de fin est inférieure à la date de début
MsgBox "Choisir une date de fin supérieure à la date début !" 'message
GoTo DF 'va à l'étiquette DF
End If 'fin de la condition
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
'définit la colonne COL
COL = B.Rows(1).Find("Appréciations qualité filet (queue, flanc)", , xlValues, xlWhole).Column
COL_OK_R = B.Rows(1).Find("OK (Consigne respectées)", , xlValues, xlWhole).Column
COL_OK_UP = B.Rows(1).Find("OK( Consigne modifiée Sup)", , xlValues, xlWhole).Column
COL_OK_DOWN = B.Rows(1).Find("OK( Consigne modifiée Inf)", , xlValues, xlWhole).Column
'définit la dernière ligne éditée Dl de la colonne COL de l'onglet "Base"
DL = B.Cells(Application.Rows.Count, COL).End(xlUp).Row
DL_OK_R = B.Cells(Application.Rows.Count, COL_OK_R).End(xlUp).Row
DL_OK_UP = B.Cells(Application.Rows.Count, COL_OK_UP).End(xlUp).Row
DL_OK_DOWN = B.Cells(Application.Rows.Count, COL_OK_DOWN).End(xlUp).Row
'définit la palge PL contenant les appréciations
Set PL = B.Range(B.Cells(2, COL), B.Cells(DL, COL))
Set PL_OK_R = B.Range(B.Cells(2, COL_OK_R), B.Cells(DL_OK_R, COL_OK_R))
Set PL_OK_UP = B.Range(B.Cells(2, COL_OK_UP), B.Cells(DL_OK_UP, COL_OK_UP))
Set PL_OK_DOWN = B.Range(B.Cells(2, COL_OK_DOWN), B.Cells(DL_OK_DOWN, COL_OK_DOWN))
'filtre la colonne E (des dates) entre les deux date renseignées, date_debut et date_fin
B.Range("E1").AutoFilter Field:=5, Criteria1:=">=" & Year(date_debut) & "/" & Month(date_debut) & "/" & Day(date_debut), Operator:=xlAnd, _
Criteria2:="<=" & Year(date_fin) & "/" & Month(date_fin) & "/" & Day(date_fin)
'definit la plage PLV des cellules visibles non filtrées de la plage PL
Set PLV = PL.SpecialCells(xlCellTypeVisible)
Set PLV_OK_R = PL_OK_R.SpecialCells(xlCellTypeVisible)
Set PLV_OK_UP = PL_OK_UP.SpecialCells(xlCellTypeVisible)
Set PLV_OK_DOWN = PL_OK_DOWN.SpecialCells(xlCellTypeVisible)
'récupère le nombre appréciation
cpt_OK = Application.WorksheetFunction.CountIf(PLV, "OK")
cpt_filet_mous = Application.WorksheetFunction.CountIf(PLV, "FILET MOU")
cpt_matière_cassante = Application.WorksheetFunction.CountIf(PLV, "MATIERE CASSANTE")
cpt_ok_queue_flanc_milieu_cassant = Application.WorksheetFunction.CountIf(PLV, "OK QUEUE & FLANC; MILIEU CASSANT")
cpt_filet_bcp_trop_mou = Application.WorksheetFunction.CountIf(PLV, "FILETS BEAUCOUP TROP MOUS")
cpt_dur_mais_non_cassant = Application.WorksheetFunction.CountIf(PLV, "DUR MAIS NON CASSANT")
cpt_MilieuOk_QueueMolle = Application.WorksheetFunction.CountIf(PLV, "MILIEU OK; QUEUE MOLLE")
'récupère les modifications
cpt_ok_R = Application.WorksheetFunction.CountIfs(PVL, "OK" & PVL_OK_R, 0)
cpt_ok_UP = Application.WorksheetFunction.CountIfs(PVL, "OK" & PVL_OK_UP, "<0")
cpt_ok_DOWN = Application.WorksheetFunction.CountIfs(PVL, "OK" & PVL_OK_DOWN, ">0")
B.Range("E1").AutoFilter 'supprimer le filtre automatique
Sheets("Essai_VBA").Select 'je selectionne la feuille essai_VBA
Range("B5:C12").Clear 'j'efface les valeurs antérieures du tableau appréciations occurrences
Range("B16:C30").Clear 'j'efface les valeurs antérieures du tableau modicications
'Mise en forme tableau appréciation et occurrences
Range("A4:C12").Borders.Weight = 2 'mise de la grille
Range("A4:C4").Interior.ColorIndex = 15 'mise en forme
Range("A12:C12").Interior.ColorIndex = 15 'mise en forme
'Mise en forme tableau modifications
Range("A16:C30").Borders.Weight = 2 'mise de la grille
Range("A20:C20").Interior.ColorIndex = 15 'mise en forme
Range("A25:C25").Interior.ColorIndex = 15 'mise en forme
Range("A30:C30").Interior.ColorIndex = 15 'mise en forme
'selectionne la première cellule afin de positionner les autres cellule par rapport à elle
'E.Range("A1") peut remplacer range("A1").select
E.Range("A1").Offset(5, 2) = cpt_OK
E.Range("A1").Offset(9, 2) = cpt_dur_mais_non_cassant
E.Range("A1").Offset(5, 2) = cpt_filet_bcp_trop_mou
E.Range("A1").Offset(8, 2) = cpt_ok_queue_flanc_milieu_cassant
E.Range("A1").Offset(6, 2) = cpt_matière_cassante
E.Range("A1").Offset(7, 2) = cpt_OK
E.Range("A1").Offset(4, 2) = cpt_filet_mous
E.Range("A1").Offset(10, 2) = cpt_MilieuOk_QueueMolle
'calcul de la somme des occurrences tableau appréciations
E.Range("A1").Offset(11, 2) = Application.WorksheetFunction.Sum(Range("c5:c11"))
'Positionnement des compteurs dans le tableau modifications
E.Range("A1").Offset(15, 2) = cpt_ok_R
E.Range("A1").Offset(16, 2) = cpt_ok_UP
E.Range("A1").Offset(17, 2) = cpt_ok_DOWN
'calcul de la somme des occurrences tableau modifications
E.Range("A1").Offset(19, 2) = Application.WorksheetFunction.Sum(Range("c16:c19"))
'calcul des pourcentage
E.Range("B3:B12").NumberFormat = "0.00%"
E.Range("A1").Offset(9, 1) = E.Range("C10").Value / E.Range("C12").Value 'dur mais non cassant
E.Range("A1").Offset(5, 1) = E.Range("C6").Value / E.Range("C12").Value 'filet bcp trop mou
E.Range("A1").Offset(8, 1) = E.Range("C9").Value / E.Range("C12").Value 'ok queue flanc milieu cassant
E.Range("A1").Offset(6, 1) = E.Range("C7").Value / E.Range("C12").Value 'matière cassante
E.Range("A1").Offset(7, 1) = E.Range("C8").Value / E.Range("C12").Value 'ok
E.Range("A1").Offset(4, 1) = E.Range("C5").Value / E.Range("C12").Value 'filet mou
E.Range("A1").Offset(10, 1) = E.Range("C11").Value / E.Range("C12").Value 'Milieu OK; Queue Molle
E.Range("A1").Offset(11, 1) = Application.WorksheetFunction.Sum(Range("B5:B11")) 'calcul pourcentage total
'Graph
ThisWorkbook.Activate
ThisWorkbook.Sheets("Essai_VBA").Range("A4:B11").Copy
'tracer le graphique
Set Mongraph = ThisWorkbook.Charts.Add
With Mongraph
.SetSourceData Source:=ThisWorkbook.Sheets("Essai_VBA").Range("A4:B11"), PlotBy:=xlColumns
'formater le graphique
.ChartType = xlColumnStacked
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Appreciations"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Pourcentage"
.PlotArea.Interior.ColorIndex = 2
.Axes(xlValue).MajorGridlines.Border.LineStyle = xlDot
.ChartArea.Font.Size = 14
.Deselect
End With
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub |