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 SubSuite... 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 SubSuite... 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 » permet de générer automatiquement du code VBA. On ajoute un bouton « Fermer le formulaire » à ce formulaire. 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 |