Public Sub Graphs()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire))
Dim I As Byte 'déclare la variable I (Incrément)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim CR As Range 'déclare la variable CR (Cellule de Référence)
Set O = Sheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A2:A" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments unique de la plage PL (asns doublon)
Set CR = Cells(2, 2) 'initialise la cellule de référence pour la hauteur du graphique CR
For I = 0 To UBound(TMP) 'boucle sur tous les éléments du tableau TMP
O.Range("A1").AutoFilter Field:=1, Criteria1:=TMP(I) 'filtre la colonne 1 (=A) de l'onglet O avec TMP(I) comme critère (= groupe)
Set PLV = PL.SpecialCells(xlCellTypeVisible).Resize(, 6) 'définit la plage PLV des cellules visibles de la plage PL redimensionnée à 6 colonnes
Sheets(2).Select 'Selection du second onglet du classeur
ActiveSheet.Shapes.AddChart.Select 'ajout d'un graphique
ActiveChart.ChartType = xlXYScatter 'Type du graphique: ici nuage de points
'source de données du graphique
ActiveChart.SetSourceData Source:=Application.Union(Application.Intersect(O.Columns(2), PLV), Application.Intersect(O.Columns(5), PLV), Application.Intersect(O.Columns(6), PLV))
With ActiveSheet.ChartObjects(I + 1) 'prend en compte le graphique
.left = CR.left 'position gauche
.Top = CR.Top 'position haute
.Width = Range("B2:N20").Width 'largeur
.Height = Range("B2:N20").Height 'hauteur
End With 'fin de la prise en compte du graphique
O.Range("A1").AutoFilter 'supprime le filtre automatique
If CR.Column = 2 Then 'condition : si la colonne la cellule de référence est égale à 2
Set CR = CR.Offset(0, 14) 'redéfinit la cellule de référence CR
Else 'sinon
Set CR = CR.Offset(20, -14) 'redéfinit la cellule de référence CR
End If 'fin de la condition
Next I 'prochain groupe de la boucle
End Sub