|
Sommaire > 2. Exemples de macros commandes |
2. Exemples de macros commandesUne macro commande est une nouvelle commande ajoutée au logiciel. Elle exécute une ou plusieurs actions. 2.1. Microsoft Word2.1.1. Commande qui permet d'inverser deux caractèresEnregistrement de la macro :On veut créer une commande qui inverse les caractères qui entourent le curseur. Pour ce faire, on va utiliser l'enregistreur de macro[1]. Celui-ci est un outil intégré qui crée le code (les instructions) VBA. Il enregistre toutes les actions réalisées dans le projet associé au document (ici Normal.dot). Voici la procédure à suivre :
Exécution de la macro :Pour exécuter cette macro, il faut placer le curseur entre les deux caractères à inverser et choisir la commande :
Le code VBA :Les commandes 2 à 5 ont été traduites en instructions VBA. Pour obtenir le code ainsi généré, on peut procéder de la façon suivante :
Voici le texte de la macro :Sub InverserC()
'
' InverserC Macro
' Inverse les caractères qui entourent le curseur
' (Alt+i).
'
Selection.MoveLeft Unit:=wdCharacter, Count:=1, _
Extend:=wdExtend
Selection.Cut
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.Paste
End Sub
2.1.2. Commande qui permet d'inverser deux motsCréation du code de la macro :On veut créer une commande qui inverse les deux mots qui entourent le curseur. Pour ce faire, on va utiliser Visual Basic Editor. Voici la procédure à suivre :
Sub InverserM()
'
' InverserM Macro
' Inverse les deux mots qui entourent le curseur
' (Alt+Maj+i).
'
Selection.MoveLeft Unit:=wdWord, Count:=1, _
Extend:=wdExtend
Selection.Cut
Selection.MoveRight Unit:=wdWord, Count:=1
Selection.Paste
End Sub
Modification de la description de cette macro et ajout d'un raccourci clavier :
Exécution de la macro :Pour exécuter cette macro, il faut placer le curseur entre les deux mots à inverser (juste après l'espace) et choisir la commande :
Création d'un boutonUne autre méthode pour utiliser une macro consiste à utiliser un bouton qui va appeler la macro.
2.2. Microsoft Excel2.2.1. Commande qui permet de générer un graphiqueCette macro :
Version Office 2000 2.2.2. Enregistrement de la macro (Office 97) :Voici la marche à suivre :
Exécution de la macro :Pour exécuter cette macro, choisir la commande :
Le code VBA :Les commandes 2 à 9 ont été traduites en instructions VBA. Pour obtenir le code ainsi généré, on peut procéder de la façon suivante :
Voici le texte de la macro :
Sub Graphique()
'
' Génération d'un graphique
'
' Touche de raccourci du clavier: Ctrl+g
'
Range("A3").Select
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, _
SourceData:="Données!R3C1:R18C3", _
TableDestination:="R1C5", _
TableName:="Tableau croisé dynamique1"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
AddFields RowFields:="Age"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotFields("Nom").Orientation = xlDataField
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotSelect "Age[Tous]", xlLabelOnly
Selection.Group Start:=20, End:=80, By:=10
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotSelect "Age[Tous]", xlLabelOnly
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
ColumnGrand = False
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotSelect "Age[Tous]", xlDataAndLabel
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData _
Source:=Sheets("Données").Range("E2:F6"), _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, _
Name:="Données"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Histogramme"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle. _
Characters.Text = "Age"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle. _
Characters.Text = "Fréquence"
End With
ActiveChart.HasLegend = False
ActiveChart.SeriesCollection(1).Select
With ActiveChart.ChartGroups(1)
.Overlap = 0
.GapWidth = 150
.HasSeriesLines = False
.VaryByCategories = True
End With
ActiveWindow.Visible = False
Windows("Histo.xls").Activate
Range("A1").Select
End Sub
Standardisation de la macro (Office 97) :
Voici comment procéder :
ActiveSheet.ChartObjects.Delete
If ActiveSheet.PivotTables.Count = 1 Then
ActiveSheet.PivotTables(1).PivotSelect "", _
xlDataAndLabel
Selection.Delete Shift:=xlUp
End If
Range("A3").Select
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, _
SourceData:="Données!R3C1:R18C3", _
TableDestination:="R1C5", _
TableName:="Tableau croisé dynamique1"
par
Range("A3").Select
Selection.CurrentRegion.Select
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, _
SourceData:=Selection, _
TableDestination:="R1C5", _
TableName:="Tableau croisé dynamique1"
ActiveChart.SetSourceData _
Source:=Sheets("Données").Range("E2:F6"), _
PlotBy:=xlColumns
With ActiveChart
. . .
.Axes(xlCategory, xlPrimary).AxisTitle. _
Characters.Text = "Age"
Comme ceci :
With ActiveChart
. . .
.Axes(xlCategory, xlPrimary).AxisTitle. _
Text = "=Données!R1C1"
Voici le texte de la macro modifiée :Sub Graphique()
'
' Génération d'un graphique
'
' Touche de raccourci du clavier: Ctrl+g
'
' Suppression du graphique
ActiveSheet.ChartObjects.Delete
' Suppression du tableau croisé dynamique
If ActiveSheet.PivotTables.Count = 1 Then
ActiveSheet.PivotTables(1).PivotSelect "", _
xlDataAndLabel
Selection.Delete Shift:=xlUp
End If
' Création du tableau croisé dynamique
Range("A3").Select
Selection.CurrentRegion.Select
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, _
SourceData:=Selection, _
TableDestination:="R1C5", _
TableName:="Tableau croisé dynamique1"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
AddFields RowFields:="Age"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotFields("Nom").Orientation = xlDataField
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotSelect "Age[Tous]", xlLabelOnly
Selection.Group Start:=20, End:=80, By:=10
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotSelect "Age[Tous]", xlLabelOnly
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
ColumnGrand = False
' Création de l'histogramme
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotSelect "Age[Tous]", xlDataAndLabel
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.Location Where:=xlLocationAsObject, _
Name:="Données"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Histogramme"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle. _
Text = Text = "=Données!R1C1"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle. _
Characters.Text = "Fréquence"
End With
ActiveChart.HasLegend = False
ActiveChart.SeriesCollection(1).Select
With ActiveChart.ChartGroups(1)
.Overlap = 0
.GapWidth = 150
.HasSeriesLines = False
.VaryByCategories = True
End With
ActiveWindow.Visible = False
'
Windows("Histo.xls").Activate
Range("A1").Select
End Sub
Suite...Version Office 2000 2.2.3. Enregistrement de la macro (Office 2000) :Voici la marche à suivre :
Exécution de la macro :Pour exécuter cette macro, choisir la commande :
Le code VBA :Les commandes 2 à 7 ont été traduites en instructions VBA. Pour obtenir le code ainsi généré, on peut procéder de la façon suivante :
Voici le texte de la macro :
Sub Graphique()
'
' Génération d'un graphique
'
' Touche de raccourci du clavier: Ctrl+g
'
Range("A3").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:= "Données!R3C1:R18C3"). _
CreatePivotTable TableDestination:=Range("E1"), _
TableName:="Tableau croisé dynamique1"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
SmallGrid = False
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
AddFields RowFields:= "Age"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotFields("Nom").Orientation = xlDataField
Charts.Add
ActiveChart.SetSourceData _
Source:=Sheets("Données").Range("E1")
ActiveChart.Location Where:=xlLocationAsNewSheet
ActiveChart.ChartType = xlColumnStacked
ActiveChart.Location Where:=xlLocationAsObject, _
Name:="Données"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Histogramme"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle. _
Characters.Text = "Age"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle. _
Characters.Text = "Fréquence"
End With
ActiveChart.HasLegend = False
ActiveChart.SeriesCollection(1).Select
With ActiveChart.ChartGroups(1)
.Overlap = 100
.GapWidth = 150
.HasSeriesLines = False
.VaryByCategories = True
End With
ActiveWindow.Visible = False
Windows("Histo.xls").Activate
Range("E2").Select
Selection.Group Start:=20, End:=80, By:=10
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
ColumnGrand = False
Range("A1:C1").Select
End Sub
Standardisation de la macro (Office 2000) :
Voici comment procéder :
' Suppression du GCD et TCD
ActiveSheet.ChartObjects.Delete
Columns("E:F").Select
Selection.Delete shift:=xlToLeft
Range("A3").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:="Données!R3C1:R18C3"). _
CreatePivotTable TableDestination:=Range("E1"), _
TableName:="Tableau croisé dynamique1"
par
Range("A3").Select
Selection.CurrentRegion.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:=Selection.Address). _
CreatePivotTable TableDestination:=Range("E1"), _
TableName:="Tableau croisé dynamique1"
With ActiveChart
. . .
.Axes(xlCategory, xlPrimary).AxisTitle. _
Characters.Text = "Age"
Comme ceci :
With ActiveChart
. . .
.Axes(xlCategory, xlPrimary).AxisTitle. _
Text = "=Données!R1C1"
Voici le texte de la macro modifiée :
Sub Graphique()
'
' Génération d'un graphique
'
' Touche de raccourci du clavier: Ctrl+g
'
' Suppression du GCD et TCD
ActiveSheet.ChartObjects.Delete
Columns("E:F").Select
Selection.Delete shift:=xlToLeft
Range("A3").Select
' Sélection de la zone en cours et
' standardisation du TCD et GCD
Selection.CurrentRegion.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:=Selection.Address). _
CreatePivotTable TableDestination:=Range("E1"), _
TableName:="Tableau croisé dynamique1"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
SmallGrid = False
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
AddFields RowFields:="Age"
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
PivotFields("Nom").Orientation = xlDataField
Charts.Add
ActiveChart.SetSourceData _
Source:=Sheets("Données").Range("E1")
ActiveChart.Location Where:=xlLocationAsNewSheet
ActiveChart.ChartType = xlColumnStacked
ActiveChart.Location Where:=xlLocationAsObject, _
Name:="Données"
' Titre de l'axe des abcisses = cellule A1 au lieu de "Age"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Histogramme"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle. _
Text = "=Données!R1C1"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle. _
Characters.Text = "Fréquence"
End With
ActiveChart.HasLegend = False
ActiveChart.SeriesCollection(1).Select
With ActiveChart.ChartGroups(1)
.Overlap = 100
.GapWidth = 150
.HasSeriesLines = False
.VaryByCategories = True
End With
ActiveWindow.Visible = False
Windows("Histo.xls").Activate
Range("E2").Select
Selection.Group Start:=20, End:=80, By:=10
ActiveSheet.PivotTables("Tableau croisé dynamique1"). _
ColumnGrand = False
Range("A1:C1").Select
End Sub
Suite...Version Office 97 2.2.4. Suite...Création d'un boutonUne autre méthode pour utiliser une macro consiste à utiliser un bouton qui va appeler la macro.
Autre méthode : ajout d'un bouton dans une barre d'outils.
Exécution de la macro :
Microsoft Access2.3.1. Commande qui permet de modifier un champ dans une table
Lors de la saisie des champs « Nom » et « Prénom », on veut transformer la première lettre de chaque mot en majuscule. Ces macros seront appelées automatiquement lors de la saisie de ces deux zones. Ecriture de la macro[2] :Voici la marche à suivre :
Le code suivant a été généré : Private Sub Nom_AfterUpdate() End Sub Il suffit de compléter ce code avec l'instruction suivante : Private Sub Nom_AfterUpdate()
[Nom] = StrConv([Nom], vbProperCase)
End Sub
La fonction « StrConv (chaîne, vbProperCase) » convertit la première lettre de chaque mot de la chaîne en majuscule. « [Nom] » désigne le champ « Nom » de la table. On procède de la même façon pour le champ « [Prénom] ». 2.3.2. Ajout du bouton « Fermer le formulaire »Microsoft Access ne dispose pas d'un enregistreur de macros VBA.
Cependant, l'outil « Assistant contrôle »
Voici la marche à suivre :
Cet assistant a généré automatiquement le
code VBA suivant, qu'on peut obtenir à l'aide du bouton :
Private Sub cmdFermer_Click()
On Error GoTo Err_cmdFermer_Click
DoCmd.Close
Exit_cmdFermer_Click:
Exit Sub
Err_cmdFermer_Click:
MsgBox Err.Description
Resume Exit_cmdFermer_Click
End Sub
[1] Dans ce qui suit, les directives sont données comme suit : ARTICLE / MENU ou SOUS-ARTICLE / ARTICLE / MENU. Exemple : QUITTER / FICHIER ou TOUT / EFFACER / EDITION. [2] Microsoft Access ne dispose pas d'un enregistreur de macros. |
|
Sommaire - Début de cette page |