Macros-commandes VBA/Exercices/Génération de graphiques
Énumérer les graphiques
[modifier | modifier le wikicode]Cet exercice n’est pas facile. Il faut savoir manier les objets Worksheet et ChartObject pour le faire. |
Faites un programme qui balaie et affiche chaque graphique de chaque feuille du classeur ouvert
Sub ListerUneCollectionDeGraphiques()
Dim ws As Worksheet
Dim gr As ChartObject
Dim g As Integer
' Liste pour tous les classeurs ouverts
For Each ws In Application.Worksheets
'MsgBox ws.Name
' Liste pour tous les graphiques de la feuille
For g = 1 To ws.ChartObjects.Count
Set gr = ws.ChartObjects(g)
' Noms des feuilles et Titres des graphiques
If gr.Chart.HasTitle Then
MsgBox "Feuille : " & ws.Name _
& " ==> Graphique : " & gr.Chart.ChartTitle.Characters.Text
End If
Next g
Next
End Sub
Second exercice
[modifier | modifier le wikicode]Exercice avec enregistreur |
Grâce au tableau décrit ci-contre, créez un graphique en colonne à l'aide de l'enregistreur.
Après avoir analysé le code de votre graphique, supprimer le graphique puis créez un bouton qui permettra de le faire apparaitre automatiquement.
Étape 1: Tout d’abord, il faut que créer un graphique manuellement. Pour cela, il faut sélectionner toute la plage des données, cliquer sur insertion et sur le type de graphique que vous souhaité. Dans notre cas, le graphique en colonne sera le plus adapté. ATTENTION!! N'oubliez pas d’activer l'enregistreur au début de votre démarche et d'y mettre fin à la fin de votre démarche.
Étape 2: Le code que génère votre graphique doit ressembler à cela:
Sub creergraphique()
'
' creergraphique Macro
'
'
Range("A1:D7").Select
Range("A7").Activate
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Feuil1!$A$1:$D$7")
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Moyenne"
Selection.Format.TextFrame2.TextRange.Characters.Text = "Moyenne"
With Selection.Format.TextFrame2.TextRange.Characters(1, 7).ParagraphFormat
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 7).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(89, 89, 89)
.Fill.Transparency = 0
.Fill.Solid
.Size = 14
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Spacing = 0
.Strike = msoNoStrike
End With
End Sub
Étape 3:
À présent il faut créer un bouton qui permettra d'activer le graphique. Pour le créer il faut que vous supprimiez votre graphique. Il faut ensuite aller dans "Développeur" puis "insérer", vous pouvez insérer une forme. La deuxième étape va être d'ajouter un texte (il faut cliquer droit puis modifier le texte) Pour finir, vous devez cliquer droit sur votre bouton puis lui affecter une macro (celle que vous avez obtenu en créant votre graphique).
Troisième exercice
[modifier | modifier le wikicode]Exercice sans enregistreur |
Grâce au tableau décrit ci-contre, créez un graphique à l'aide de Visual Basic sur une nouvelle feuille de données.
Il faut que votre graphique soit un histogramme en cluster et il faut également faire apparaitre le titre du graphique.
Afin de créer un graphique via le code VBA, le code adéquat est le suivant:
Sub CreerGraphiqueNvelleFeuille()
Const sheDonnéesSource As String = "DataSource"
Const sheGraphique As String = "Graphique"
Dim chGraph As Chart
Dim rPlage As Range
'Définition de la plage des données source du graphique
Set rPlage = Sheets(sheDonnéesSource).Range("A1:D7")
' Suppression du graphique si déjà existant
On Error Resume Next
Sheets(sheGraphique).Delete
On Error GoTo 0
' Création du graphique
Set chGraph = Charts.Add
With chGraph
' Type histogramme
.ChartType = xlColumnClustered
' Source du graphique
.SetSourceData Source:=rPlage, PlotBy:=xlColumns
' Affichage du titre
.HasTitle = True
' Intitulé
.ChartTitle.Characters.Text = rPlage.Cells(1, 1)
' Nom de la feuille recevant le graphique
.Name = sheGraphique
End With
Sheets(sheGraphique).Select
End sub