Académique Documents
Professionnel Documents
Culture Documents
T a b l e d e s m a t i è r e s
Sub
Sub mise_forme_réf_absolue()
'
' mise_forme Macro
' Macro enregistrée le 17/09/2009 par tempo04
'
' Touche de raccourci du clavier: Ctrl+m
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Luc"
With Selection.Font Activecell = une cellule
.Name = "Arial" Selection = plusieurs cellules
.Size = 18
.Strikethrough = False
.Superscript = False With permet de regrouper les
.Subscript = False codes pour la mise en forme
.OutlineFont = False End With permet de finir
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.ColorIndex = 3
Columns("A:A").ColumnWidth = 23.86
End Sub
OBJECTIF : Création d'une macro avec l'enregistreur pour réaliser une mise en forme
Cette macro sera définie en Référence Relative, c'est-à-dire que l’exécution est définie à
un endroit nom précis.
Saisir son Prénom dans la cellule A1, Mettre en
Projet gras, Taille 18Agrandir colonne
Procédure
Enregistrer votre classeur sous un nom.
Sélection d’une cellule : Menu Outils / Macro Nouvelle Macro.
Nom de la macro : Macro 2 / Dans enregistrer la macro choisir dans la liste : Ce classeur
Clic dans la référence de la cellule A1 (ce qui permet de créer la réf absolue)
Saisir son Prénom dans la cellule A1, Mettre en gras, Taille 18 et Agrandir colonne
Sub texte_réf_relative()
'
' texterefrelative Macro
' Macro enregistrée le 17/09/2009 par tempo04
'Lignes de code en verte doivent être supprimé
'
Selection.FormulaR1C1 = "Mersier"
With Selection.Font
'.Name = "Arial"
.Size = 24
.ColorIndex = 5
.Bold = True
'.Strikethrough = False
'.Superscript = False
'.Subscript = False
'.OutlineFont = False
'.Shadow = False
'.Underline = xlUnderlineStyleNone
'.ColorIndex = xlAutomatic
End With
Selection.EntireColumn.AutoFit
'Selection.ColumnWidth = 22.57 'Columns("D:D").ColumnWidth = 22.57
Sub mp()
'
' mf Macro
'
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = "Budget 2010"
End With
End Sub
Sub texte_réf_relative()
'
Selection.FormulaR1C1 = "Mersier"
With Selection.Font
'.Name = "Arial"
.Size = 24
.ColorIndex = 5
.Bold = True
End With
Selection.EntireColumn.AutoFit Ligne de code pour ajouter
la procédure MP
Call MP
End Sub
A lire
3.1 Barre d'outils VB
3.2.1 Le module
Elle affiche les procédures du classeur. Chaque module définit des procédures.
3.2.4 L'apostrophe
Permet d'ajouter des remarques dans les codes. Elles sont ignorées à l'exécution
Arborescence de Propriété
(surtout pour
l'objet VB CODE de procédure
formulaire)
Feuilles avec les instructions
Module
A lire
4.1 Schéma
Classeur
Feuil1 Module1
Module 1
Objectif
Enlever les lignes de codes qui restent par défaut
5.1 Ouvrir l’éditeur VBA
Bouton Visual Basic Editor
Permet d'ouvrir l'application VB
Menu Outils / Macros + Macros.et Sélection du nom de la
Ou à partir d'Excel
macro. Cliquez sur le bouton modifier
Sub
5.2 Modifier une macro
Nous allons enlever les instructions inutiles
Sélectionner lignes et supprimer
5.3 Exécuter une procédure dans le VB
Clic sur le bouton
5.4 Raccourci pour atteindre le module VB
ALT F11 Affiche la fenêtre Visual Basic
CTRL Fin Place le curseur après la dernière ligne du module
F8 Passe de ligne en ligne de code
Objets
Classeur
Feuille
Plage de cellule
Range("A1:A5")
Instruction
Méthodes
Action
PritPreview
6 déc 09 Luc Mersier & Sylvie Condé 17/164
6 déc 09 Luc Mersier & Sylvie Condé 18/164
A lire
Sub mise_forme_réf_absolue()
'
' mise_forme Macro
' Macro enregistrée le 17/09/2009 par tempo04 Range("A1")
' Indique la référence Absolue
' Touche de raccourci du clavier: Ctrl+m
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Luc"
With Selection.Font
.Name = "Arial"
.Size = 18
.Strikethrough = False
.Superscript = False With permet de regrouper les
.Subscript = False codes pour la mise en forme
.OutlineFont = False End With permet de finir
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.ColorIndex = 3
Columns("A:A").ColumnWidth = 23.86
End Sub
Sub texte_réf_relative()
'
' texterefrelative Macro Selection
' Indique la référence relative
Selection.FormulaR1C1 = "Mersier"
With Selection.Font
.Size = 24
.ColorIndex = 5
.Bold = True
End With Problème sur
Selection.EntireColumn.AutoFit la colonne D
Selection.ColumnWidth = 22.57 'Columns("D:D").ColumnWidth = 22.57
Nous avons remplacer la Réf absolue : Columns("D:D") par une référence
relative : Selection. Pour qu’il applique sur n’importe colonne
End Sub
F9
Pour reprendre le déroulement de notre
programme F5
A lire
Objets
Classeur
Feuille
Plage de cellule
Range("A1:A5")
Propriétés
Mise en forme
Instruction Format
Méthodes
Action
PritPreview
Collection
C'est la suite des objets. Dans un classeur il y a une suite de collection d'objets : les
onglets de feuilles
Workbooks : Cet objet représente un classeur Microsoft Excel.
Code : Workbooks("Feuille luc").Worksheets("feuille jan").Activate
Range("A1:B3").select
Range("A1:B3").select
Instruction est suivi d'un point
Liste des propriétés ou méthodes
Le point indique Instruction suivi d’une
propriétée ou méthode
Propriétés
Méthode
Projet : Atteindre plage de cellules pour effectuer une mise en forme avec l’éditeur VB.
Sélection de la feuille 1
Sélection des cellules A1:B3 pour indiquer un texte
Définir une hauteur de ligne à 40
Faire un aperçu
Méthode
A lire Atelier
Facture
Sub Macroobjet()
Objet instruction suivi du point puis de la
Sheets("feuil1").Select méthode
Range("A1:B3").Select
Objet suivi de la Propriétés
Range("A1:B3") .formula = "VBA faclile"
Selection.RowHeight = 40 Propriété
Selection.PrintPreview Méthode
End Sub
Ou
Sub AutoFormat()
'' AutoFormat Macro
' Macro enregistrée le 10/09/2006 par conde
Sheets("feuil2").Select
Range("a1:b3").Select
Réf Relative
'Range("a1:b3").Formula = "sylvie est géniale" Sélection évite de
redéfinir
Selection.Formula = "toto"
'Range("a1:b3").
Selection.RowHeight = 40
Selection.PrintPreview
End Sub
A lire
Une méthode ou une propriété peut être suivie d’arguments. Certaines commandes
d’Excel affichent une collection d’éléments. Exemple la commande AutoFormat.
Si nous ne voulons rien indiquer dans les arguments, nous mettons des virgules.
Si nous voulons éviter les arguments vides avec virgules nous désignons l'argument suivi
du := C’est un argument nommés
Objectif
automatique
Dans une plage de cellules,
♦ Définir l'argument format automatique avec couleurs dans les cellules et ne
pas ajuster la largeur de colonne en fonction du contenu,
♦ := permet de ne pas remplir chaque argument,.
La largeur ne
s'agrandit
Color2 : réalise pas
2 couleurs +
Ajustement auto
Avec arguments
Range("A1:B3").AutoFormat xlRangeAutoFormatColor2, , , , ,False
Avec arguments nommés
Range("A1:B3").AutoFormat xlRangeAutoFormatColor2, Width:=False
Permet de nommer l'argument et de définir un élément :=
(:= avec une largeur automatique (width) qui sera = à oui ou faux)
01 exos macro.xls
Sub Macroobjet2()
Sheets("feuil1").Select
Range("A1:B3").Formula = "VBA facile"
Selection.RowHeight = 40
Selection.PrintPreview
End Sub
Sub Formatdate_plage()
Range(“F2:F10”).NumberFormat = "dddd dd mmmm yyyy"
End Sub
Sub Formatdate_atteindre()
Range("F2:F10").NumberFormat = "dddd dd mmmm yyyy"
Sheets("feuil2").Select
Range("B4").Select
End Sub
Sélectionner une feuille par un numéro au lieu d'un nom. Ca permet de renommer le
nom de la feuille dans le classeur.
'A la place de sheets("feuil2").select
Sheets("2").Select
Atelier
Facture
Alt F8
Sub
10.1 Création de Procédures fonctions
Cette procédure indépendante n'apparaît que dans Fx, catégories personnalisées
Procédure
Menu Outils / Macros +Macros.
Sélection du nom de la macro : Macro 1 Fichier :
Cliquez sur le bouton modifier 01 Exos macro
Alt F11 et CTRL Fin Module Functions
Function Euro_Dollar(plage)
'Convertir Euro vers Dollar
Euro_Dollar = plage * 0.89
End Function
Arguments
Permet de sélectionner
Function TTC(ht, tauxtva) les plages des
différents arguments
'Calcul le montant en TTC
TTC = ht * (1 + tauxtva)
End Function
Sub formules()
Sheets("feuil1").Range("a1").Formula = "=sum($b$4:$b$10)"
Range("a1").NumberFormat = "# ##0#.00" Nous répêtons
End Sub l’objet
Sub formules1()
Sheets("feuil1").Select
Range("a1").Select L’objet permet
selection.Formula = "=sum($b$4:$b$10)" d’utiliser Selection
selection.NumberFormat = "# ###.00"
End Sub
A faire
13.1 Afficher un nouveau menu
Personnaliser / Onglet commande / Catégories Nouveau Menu et glisser le dans la barre
de menu
13.3 Supprimer
Alt Glisser.
Tester
Enlever le quadrillage de la feuille et placer cette feuille en première.
Fermer et ouvrir.
17 Sécurité
Objectif est de désactiver à l’ouverture du classeur la boîte de dialogue Macros
Range("A2").Formula = "=TODAY()"
Range("A2:A10").NumberFormat = "dddd dd mmmm yyyy"
Columns("A:A"). AutoFit
Sheets("feuil2").Select
Range("a1").Select
End Sub
18.1 Nommé cellules
Nommez les cellules A2:A10 dans la feuille : AFdate
Modifier la ligne de code
Range("afdate").NumberFormat = "dddd dd mmmm yyyy"
A lire
19.1 Objectif
L’ouverture d’excel récupere automatiquement les macros : Dans l’ exemple nous allons
récuperer les fontions Dollar et Euro
A lire
Fichier :
Function Convertion_Dollars_vers_euro(Plage) 01 Exos macro
'Convertir dollar vers Euro Modules
Convertion_Dollars_vers_euro = Plage * 1.12
End Function
Function Convertion_Eurovers_Dollar(Plage)
'Convertir Euro vers Dollar
Convertion_Eurovers_Dollar = Plage * 0.89
End Function
Function PérimètreCercle(Plage)
'Calcul le périmètre d'un cercle
PérimètreCercle = 2 * 3.14159 * Plage
End Function
Sub standard()
' Format standard
Selection.NumberFormat = "General"
End Sub
End Function
A lire
Objets
Classeur
Feuille
Plage de cellule
Propriétés
Mise en forme
Méthode
Action
Sub Macroobjet()
Objet instruction suivi du point puis de la
Sheets("feuil1").Select méthode
Range("A1:B3").Select
Objet suivi de la Propriétés
Range("A1:B3") .formula = "VBA faclile"
Selection.RowHeight = 40 Propriété
Selection.PrintPreview Méthode
End Sub
Propriété
Méthode
A lire Sub
22.1 Objet programmes Excel : APPLICATION
22.2.6 Aperçu
Sub aperçu()
Workbooks("classeur1.xls").PrintPreview
End Sub
A lire Sub
Les écritures concernant les feuilles sont les suivantes
Sheets("Feuil1").select
Sheets(1).select
Sheets("Feuil1").activate Sélectionne la feuille 1 du classeur actif
Sheets(1).activate Plusieurs écritures possible
Worksheets("Feuil1").select
La collection sheets représente toutes les feuilles d'un classeur.
End Sub
Application.GoTo
sélectionne zone appelée "chiffres
Reference:="Chiffres"
Nous aurions pu également préciser que Super est bien le CONTENU de la cellule, en
effet, si nous avions écrit GREEN à la place de Super, on pourrait imaginer qu'Excel allait
reconnaître qu'il s'agit non pas d'écrire GREEN, mais de mettre le texte, ou même la
couleur de fond de la cellule en Vert. Le code suivant donne encore une fois exactement
le même résultat :
En fait, la propriété Value ne doit pas obligatoirement se préciser, car Excel imagine
(intelligemment) que nous voulons nous occuper du contenu.
Sub déplace_cellule()
'Déplace de la ligne 1 à la colonne 0
Activecell.offset(1.0)
End Sub
22.4.8 Inscrit une valeur dans une cellule par rapport à la cellule active
Sub déplace_incrit_cellule()
'Inscrit la valeur 5 dans le cellule situé à 1 ligne et 0 colonne
Activecell.offset(1.0).value = 5
End sub
A lire Diapo23
Importer ou Exporter
Déplacer ou copier un module pour le
mettre dans un autre projet
23.2 Renommer
Pour renommer
Sélection du module et dans propriétés
renommer Module1
A lire Objectif
Il permet de retrouver les fonctions et les instruction
5
1
3 4
1 Champ qui permet de rechercher un objet, propriété, méthode par son nom ou une
partie de son nom.
Projet
Rechercher un Bibliothèque
élément : SHEETS
Liste
Membres
Liste des
classes
Zone
Détails
Objectif
Recherche de l'aide sur la suppression d'une feuille.
Saisir Sheets
Sélection de la
ligne
Sélection de
Delete + F1
Fichier :
25.1.1 Objectif : Sub aller_a() 02 exos macros.xls
Ouvrir un classeur, dans la feuille un bouton permet d'atteindre la feuille Luc
A faire :
♦ Définir la procédure pour aller dans la feuille Luc et
♦ Créer un bouton de commande
Procédure
Sub aller_a()
Sheets("luc").Select
End Sub
Sub ouvrir()
' ouvrir Macro
' Ouvrir un classeur exemple luc
Sub Ajuster_toutes_les_colonnes()
' Ajuster_toutes_les_colonnes Macro
Fichier :
Cells.Select
02 exos macros.xls
Cells.EntireColumn.AutoFit
End Sub
Sub Affichageformules()
'Affiche les formules
ActiveWindow.DisplayFormulas = True
Sub EnleverAffichageformules()
'Affiche les formules
ActiveWindow.DisplayFormulas = False
A faire
♦ Création de la procédure
♦ Créer un bouton
Sub affiche_feuil2()
Worksheets("feuil2").Visible = True
End Sub
Sub remplacer_cellules ()
'
Cells.Replace What:="/", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Sub remplacer_colonnesA()
'
Columns("a:a").Replace What:="/", Replacement:="", LookAt:=xlPart,
SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
What = quoi
Look= regarde
Part = partie
Match = correspond
Case = événement
Sub mise_à_jour_sur_fournisseurs()
'
' Récupérer les données fournisseurs dans le classeur mise à jour
End Sub
6 déc 09 Luc Mersier & Sylvie Condé 47/164
Définir plage de cellules
Sub mise_à_jour_sur_fournisseurs_range()
'
' récuperer une partie des données fournisseurs sur le classeur mise à jour
'Définir un format
Columns("B:B").NumberFormat = "ddd mmm dd yyyy"
Sub Fichier :
02 exos macros.xls
Sub euro()
[] exprime champ
'Euro Macro convertir la cellule de gauche en Euro -1 colonne de gauche
+1 colonne de droite
ActiveCell.FormulaR1C1 = "=ConvertionEuro(RC[-1])" -0 ligne au-dessus
+0 ligne en-dessous
End Sub
ActiveCell.FormulaR1C1 = "=ConvertionEuro(RC[-1])"
Colonne
précédente -1
R1 : Line 1
C1 : Colonne 1
[ ] exprime champ
- 1 colonne de gauche
+ 1 colonne de droite Attention
- 1 ligne au-dessus
+ 1 ligne en dessous Il faut que la fonction
RC = Ligne Colonne : Cellule =ConvertionEuro() existe
Sub recopie_formule()
Range("D2").FormulaR1C1 = "=RC[-2]*RC[-1]"
‘RC[-2]*RC[-1]" = Cellules B2 et C2
'AutoFill = Cette méthode effectue une recopie incrémentée dans les cellules de la
plage spécifiée
Range("D2").AutoFill Destination:=Range("D2", Range("B2").End(xlDown).Offset(0, 2)),
Type:=xlFillDefault
Autre exemple
Exécute une recopie incrémentée sur les cellules de la plage spécifiée.
Syntaxe : expression.AutoFill(Destination, Type)
expression Obligatoire. Expression qui renvoie un objet Range.
Destination Objet Range obligatoire. Les cellules à remplir. La destination doit inclure la
plage source.
Sub CA_recopieFill ()
ActiveCell.FormulaR1C1 = "=IF(RC[-1]>250,120,0)"
Selection.AutoFill Destination:=Range("K2:K6"), Type:=xlFillDefault
Range("K2:K6").Select
Range("A9").Select
End Sub
'La variable SET permet de créer une variable objet de regroupement de cellules
Set : Définit un Set valeurs = Range("b1", [b1].End(xlDown))
objet expression.End(Direction)
INSTRUCTION Variable
Affecte une valeur Champ objet suivi d’une instruction
d’Expression
'Indique la façon de se déplacer : il descend à partir de la cellule de résultat ligne 1
colonne 0
Range("b1").End(xlDown).Offset(1, 0).Select
'Entrer la formule de calcul somme()
'Somme (A partir de la somme il remonte en ligne en comptant pour effectuer la
somme )
ActiveCell.FormulaR1C1 = "=sum(R[-" & Valeurs.Count & "]C:R[-1]c)"
'Placer le cellule en gras
Selection.Font.Bold = True
End Sub
Sub tableau()
With Application.ActiveSheet
' Ajout du texte dans cellule A4 A5 A6 Création Tableau
Range("a4").Formula = "jan"
Range("a5").Formula = "Fév" 1
Range("a6").Formula = "Mars"
Range("a7").Value = "Totaux"
Range("d7").Name = "Total3"
Range("total3").Formula = "=Sum(d4:d6)"
Range("e7").Name = "Total4"
Range("total4").Formula = "=Sum(e4:e6)"
End With
End Sub
6 déc 09 Luc Mersier & Sylvie Condé 52/164
26 Projets
Fichier :
26.1.1 Ajouter une ligne dans un tableau
02xbis Ajouter ligne .xls
Démarche
1. Nommer les plages de cellules
2. Lancer la procédure pour :
Copier la ligne 13 = (Model)
Se décale vers le bas à partir de la cellule A14 (DEP) pour se positionner en A15
Insert au-dessus
Dans l'application enleve le couper ou copier (presse papier)
Sub NewLine()
'Copie de la ligne 13 = (Model)
Application.Goto Reference:="MODEL"
Selection.Copy
'Insert au-dessus
Selection.Insert Shift:=xlDown
A lire
27.1 Les variables
Permet de stocker temporairement des valeurs pour pouvoir les réutiliser dans la macro.
La déclaration de la variable permet de stocker un espace mémoire ou un format.
Dim permet de définir du format : mode texte, numérique ou autres…
27.2 Déclaration des variables avec Dim
La déclaration d’une variable démarre par DIM
• Ensuite la variable + Comme "type de format"
Dim avec sa syntaxe
Dim indique Déclaration de la variable
Nom de variable contenu que vous écrivez
As indique comme
String une chaîne de caractères
Sub déplaceCellActive()
'Variable ligneVar = 1 et colonnevar = 2
Dim ligVar, ColVar as integer
ligVar = 1
ColVar = 2
Selection.Offset(ligVar, ColVar).Select
'Offset permet de déplacer
End Sub
L'Instructions
Elles exécutent des actions qui sont définies par des fonctions
27.6 Variables avec fonctions et instructions : Dim As, Inputbox, MsgBox
A lire
La variable est suivie d'une fonction et d'une instruction le plus souvent.
Déclaration de la variable, suivi d’une zone de texte et suivi d’une boîte de dialogue.
Dim
Dim variable
variable As
As ImpuTBox
ImpuTBox MsgBox
MsgBox
String
String
Variable
Variable Valeur
Valeur Boîte
Boîte de
de dialogue
dialogue
Déclaration
Déclaration Fonction
Fonction Réponse
Réponse :: Instructions
Instructions
Dim
Sub input_suite_de_box()
'Réponse MsgBox
MsgBox "Bonjour " & MonNom
End Sub
A lire
Permet d’informer l’utilisateur ou sur un événement s’étant produit ou devant se produire
MsgBox devient instruction car elle exécute la fonction
Le texte avant MsgBox n'est pas nécessaire.
MsgBox.
Elle fait apparaître un message dans une boîte de dialogue
28.1 Syntaxe Instruction MsgBox
Objectif
Nous allons concevoir une InputBox et afficher un message utilisant la réponse saisie par
l’utilisateur
Ensuite nous utiliser des fonctions de chaînes de caractères
Procédure
Sub calcul_nombre()
'Dans une boîte dialogue indiquer un chiffre pour connaître combien il y en a
Par défaut
valeur = InputBox("quelle est la valeur à compter ?", "données", 0) Variables avec
nbre = WorksheetFunction.CountIf(Range("A2:A10"), valeur) inputBox et
Fonction
Instruction
Ou arguments nommés
MsgBox "la valeur " & valeur_ & " est présente " & nbre & " fois dans cette feuille",
Title:="Titre"
'Variable <
txt = "<" & Valeur
Nbre = WorksheetFunction.CountIf(Range("A2:A10"), txt)
'Message dans la boîte de dialogue
MsgBox "la valeur inférieur à " & Valeur & " est présente " & Nbre & " fois dans le
tableau"
End Sub
Sub calcul()
Dim comptage
Dim nbre
comptage = InputBox("quelle est la valeur à compter ?", "Chiffre", 0)
nbre = WorksheetFunction.SumIf(Range("A2:A10"), comptage, Range("B2:B10"))
MsgBox "la valeur " & comptage & " est présente " & nbre & " en Résultat"
End Sub
R1 42
R1 36
R2 80
Range("a1").Formula = "la valeur " & comptage & " est présente " & nbre & " en
Résultat"
Cells.Columns.AutoFit 'Pour définir l'auto Fit
Autofit
Première Démarche
Travail sur deux feuilles à l'aide d'une facture.
1) Nous allons créer une copie d'une nouvelle feuille pour la renommer "Double de
facture"
2) Nous allons regrouper les deux feuilles (groupe de travail) pour effectuer une saisie
multiples.
3) Nous allons imprimer les deux feuilles et désactiver le groupe de travail
Deuxième Démarche
Bouton d'affectation de macros
1) Tracer et effectuer les procédures
2) Saisir du texte dans les boutons
3) Tester
A lire Sub
Objectif de la procédure
Copie d'une nouvelle feuille avec contenu
Sub Ajouter_renommer()
'Copie le contenu de la feuille à droite (sheets 1 = feuille 1)
Sheets("Facture").Copy After:=Sheets(1)
Sheets("facture").Select
End Sub
Objectif
Permet de saisir auto les valeurs de la première feuille et dans l'autre feuille.
Sub Workbook_Open()
Sheets("double de facture").Select
'Dans la cellule F5 indiquer le contenu : Copie
Range("F5").Value = "Copie"
'Array : Regroupe les deux feuilles et ensuite activer la feuille Facture et plage
B15
Sheets(Array("Facture", "Double de Facture")).Select
Sheets("Facture").Activate
Range("B15").Select
'Message
MsgBox "Toute saisie sur la feuille Facture sera automatiquement reproduite
sur le double.", vbOKOnly, "Rappel..."
End Sub
Objectif
Print et désactiver le groupe de travail
'Imprimer
Sub Fermer() Selection.PrintOut Copies:=1, Collate:=True
'Désactiver le groupe de travail
Sheets("double de facture").Select
End Sub
A lire
Constante Description Valeur
Bouton
VbOKOnly OK 0
VbOKCancel OK et Annuler 1
VBAbortRetryIgnore Abandonner, Réessayer et Ignorer 2
VbYesNoCancel Oui, Non et Annuler 3
VbYesNo Oui et Non 4
VbRetryCancel Réessayer et Annuler 5
Symbole
VbCritical Message critique 16
VbQuestion Question 32
VbExclamation Stop 48
VbInformation Information 64
Bouton actif par défaut
VbDefaultButton1 Premier bouton 0
VbDefaultButton2 Deuxième bouton 256
VbDefaultButton3 Troisième bouton 512
VbDefaultButton4 Quatrième bouton 768
La valeur renvoyée par la fonction MsgBox varie en fonction du bouton cliqué par
l’utilisateur, selon la règle suivante :
A lire
Constante Bouton Valeur
VbOK OK 1
VbCancel Annuler 2
VbAbort Abandonner 3
VbRetry Réessayer 4
VbIgnore Ignorer 5
VbYes Oui 6
VbNo Nom 7
MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !"
Mettre les espaces
30.3 Icône dans la boîte de dialogue. Bouton Information.
MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !",
vbInformation + vbYesNo
Ou
MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !", 68
64 indique VB information
4 indique VB YesNon
Pour exprimer l'ensemble,
nous additionnons : 68
Remarque
Pour continuer le contenu d’un code sur une autre ligne
Faire un espace, Touche _retour forcé à la ligne
MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !", _
vbInformation + vbYesNoCancel + vbDefaultButton2
MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !", _
vbInformation + vbYesNoCancel + vbDefaultButton2, "Super MsgBox"
Sub maj_fx_proper()
Syntaxes
MsgBox "Le texte " & UCase(MonTexte) & " comporte " & Len(MonTexte) & "
caractères", vbInformation, " Nombre de caractères avec Len"
End Sub
Sub inputmessages_premier_carac_majuscule_suite_minuscules()
'Boîtes de dialogue Input
Monprenom = InputBox("Quel est votre prénom ?", "Saisie du Prénom")
MonNom = InputBox("Quel est votre nom ?", "Saisie du nom")
PrénomComplet = Monprenom
'Ajouter variable pour le deuxième caractère
NomComplet1 = MonNom
'Réponse MsgBox majuscule sur le premier carac et minuscule sur le deuxième
MsgBox "Bonjour " & UCase(Left(PrénomComplet, 1)) & LCase(Right(PrénomComplet,
Len(PrénomComplet) -1)) & " " & UCase(Left(NomComplet1, 1)) &
LCase(Right(NomComplet1, Len(NomComplet1) -1)), vbInformation + vbOKOnly,
"Merci"
End Sub
Sub envoi_texte_box_vers_cellule()
31.10.3 Choix de plusieurs Boîtes de dialogue qui envoie le contenu dans une
cellule
Suite de boîtes
Sub box_avec_plusieurs_choix_maj_et_min_cellule()
'Boîtes de dialogue Input avec variables
A
1 Luc Mersier
2 Luc Mersier
3 Luc Mersier
4 Luc Mersier
5 Luc Mersier
6 Luc Mersier
7 Luc Mersier
8 Luc Mersier
9 Luc Mersier
10 Luc Mersier
Fonctions Résultats
Day(valeur) Retourne le jour de la date : valeur
Month(valeur) Retourne le mois de la date : valeur
Year(valeur) Retourne l'année de la date : valeur
Hour(valeur) Retourne l'heure de valeur
Minute(valeur) Retourne les minutes de valeur
Second(valeur,longueur) Retourne les secondes
Weekday(valeur) Retourne le nombre de jour de la semaine
Now() Retourne la date et l'heure système
Time() Retourne l'heure système
Fonction Résultats
Isempty(valeur) Retourne True si la valeur est vide
Isnumeric(valeur) Retourne True si la valeur est numérique
Isdate(valeur) Retourne True si la valeur est une date
Cette est employées souvent dans un test If then else
Exemple
If Not isempty(activecell.value)then
Sub
33.1 Objectif de la procédure
Saisir l'année du dossier pour une recherche son le lieu.
Sub conditionIF()
Sub If_imbriqué()
Année = InputBox("Donnez l'année du dossier")
If Année >= 1996 Then
lieu = "le bureau"
ElseIf Année >= 1990 Then
lieu = "La bibliothèque"
Else
lieu = "La cave"
End If
MsgBox "Le dossier est dans " & lieu
End Sub
Détail de la Procédure
Public Sub SelectCase()
Select Case Hour(Time) 'Il prend l'heure systéme
Case 0 To 6
Message = "Bonne nuit !"
Case 7
Message = "Bonjour !"
Case 8 To 12
Message = "bonne matinée"
Case 13 To 18
Message = "bonne après midi"
Case Else
Message = "Bonne soirée !"
End Select
MsgBox Message
End Sub
34.1.2 Isertion d'une image
Entre MsgBox et End Sub
ActiveSheet.Pictures.Insert( "C:\Documents and Settings\Elodie.PORTABLE\Mes
documents\20050722-147526-0.jpg".Select
35.1.1 Procédure
End If
MsgBox " Votre réponse est un " & Réponse
End Sub
Range("A4").Formula = "=Sum(A2:A3)"
Range("B4").Formula = "=Sum(B2:B3)"
Cells.Columns.AutoFit
Range("A1:b4").Borders.LineStyle = xlContinuous
End Sub
Objectif Projet
1. Créer une macro affichant un message,
2. Si Annuler, sortir de la procédure
3. Si oui demander la date de naissance, si non, demandé la tranche d'âge.
4. Le résultat est envoyé dans une cellule.
Sub age_Afficher_boîte_de_dialogue_proposant_plusieurs_choix()
End If
End Sub
Sub envoyer_autre_classeur_msg()
'
' Envoyer une feuille avec contenu dans un nouveau classeur
Sheets("Feuil1").Select
'Renommer la feuille
Application.ActiveSheet.Name = InputBox("Nommer la feuille", "Renommer")
End Sub
Sub envoyer_autre_classeur_msg1()
'
' Envoyer une feuille avec contenu dans un nouveau classeur
'Définir sur objets
'Range("A1:E20").Select
Sheets("Feuil1").Select
'Sheets("Feuil1").Copy
'Utilisation de Box pour save sous format xlnormal
premlet = InputBox("classeurs dont le nom commence par :" & "cliquez sur OK pour
obtenir tous les classeurs ", "Première Lettres", "")
Exemple
nbFeuilles = Sheets.Count
Résultat : For i = 0 To 5
Sub Test()
Dim i As Integer
For i = 1 To 10
Cells(i, 1) = "ça marche"
Next
End Sub
Cela nous permet de remplir les cellules de A1 jusqu'à A10 avec le texte "ca marche"
Sub Test()
Dim i As Integer
For i = 2 To 10 step 2
Cells(i, 1) = "ça marche"
Next
End Sub
Cela nous permet de remplir les cellules de deux à deux avec le texte "ca marche"
A lire
Do =Faire Loop = Boucle Condition While = Tant que c’est faux
La boucle While permet de boucler jusqu'à ce qu'une condition soit remplie
L'instruction Do…Loop permet de répéter une tâche en fonction d'un critère logique
(While).
Si la ou les conditions deviennent fauses, l'excécution du programme se poursuit
après la boucle.
• While Si la condition est Fause
Instruction DO = Faire (Effectuer, faire les actions qui suivent)
Condition WHILE Condition = Tant que c’est faux
Boucle LOOP = Boucle (Faire une boucle, recommencer la boucle)
Élément Description
condition Facultatif. Expression numérique ou expression de chaîne vraie (True)
ou fausse (False). Si la valeur de condition est Null, elle est considérée
comme fausse (False).
statements Une ou plusieurs instructions répétées tant que condition est True, ou
jusqu'à ce qu'elle le devienne.
Objectif
'Démarre à partir de B4 tant qu'il ne rencontre pas de cellule vide et se déplace vers le bas
et applique le format monétaire
Sub boucle_Do_while__avec_si()
Élément Description
condition Facultatif. Expression numérique ou expression de chaîne vraie (True)
ou fausse (False). Si la valeur de condition est Null, elle est considérée
comme fausse (False).
statements Une ou plusieurs instructions répétées tant que condition est True, ou
jusqu'à ce qu'elle le devienne.
Objectif
' Démarre à partir de B4 tant qu'il ne rencontre pas de cellule vide et se déplace vers le
bas et applique le format monétaire
Sub boucle_Do_Until__avec_si()
Colorier les cellules en rouge à partir de votre sélection jusqu'à la première cellule vide.
Interropre si une cellule est > à 5000
La prcédure s'arrête sur la cellule >5000
Sub couleur_cellule()
End Sub
With Application.ActiveSheet
.Range("b1").Value = "Résultats trimestriels"
Renvoi date a partir
'Mois en colonne de jan
For i = 1 To 3
.Range("A" & i + 3).Value = Format((DateValue("01/" & i & "/01")), "mmm")
Next i
Limte
'Régions en ligne
Range("B3:E3").Value = Array("Est", "Ouest", "Sud", "Nord")
Range("B3:E3").HorizontalAlignment = xlCenter
Range("c7").Name = "Total2"
Range("total2").Formula = "=Sum(c4:c6)"
Range("d7").Name = "Total3"
Range("total3").Formula = "=Sum(d4:d6)"
Range("e7").Name = "Total4"
Range("total4").Formula = "=Sum(e4:e6)"
End With
End Sub
Objectif
Paris Lyon
Compare le contenu du tableau 1 par rapport à celui du Lille Paris
tableau 2 et affiche en colonne E les valeurs Rouen Caen
communes aux deux tableaux. Lyon Bordeaux
Cette macro utilise les variables tableaux mémoire. Strasbourg Saint Malo
Sub comparatif()
'Variable : remplissage des tableaux LimiteSup = UBound
tableauA = Range("A1:A5").Value
tableauB = Range("C1:C5").Value
End If
Next J
Next i
End Sub
6 déc 09 Luc Mersier & Sylvie Condé 90/164
40.3 Chercher et Ouvrir des classeurs d'un dossier
Objectif
Saisir les premiers caractères des classeurs
Effectuer la recherche dans dossier
Pour chaque classeur trouvé, poser la question : Ouvrir O/N
Sub ouvreclasseurs()
For i = 1 To .FoundFiles.Count
End If
Next i
Else
MsgBox "pas de fichier "
End If
End With
End Sub
Sub majTarifs()
'Copie les données dans une autre colonnes
Columns(2).Copy
Columns(3).Select
ActiveSheet.Paste
Application.CutCopyMode = False 'enleve le presse papier
Range("c1").Formula = "Taux 2010"
'A partir de C2 créer une Boucle mettant à jour chaque cellule de la plage Prix
Range("C2").Select
End Sub
Créer une macro qui applique une augmentation/minoration de tarif avec critère
A B C
3 Fournisseurs Produits Prix
4 APPLE a 10
5 IBM b 20
6 MICROSOFT c 30
7 DELL d 40
8 HP e 50
9 ACER f 60
10 SONY g 70
11 COMPAQ h 80
12 APPLE i 90
13 IBM j 100
14 DELL k 110
15 MICROSOFT l 120
16 MICROSOFT m 130
17 MICROSOFT n 140
Sub majtarifaveccritère()
Dim cpt
Dim PrixArticles
End Sub
Sub
Objectif
'Macro récupère le contenu de la cellule B2 pour le renommer dans l'onglet
Utulisation: Dim…As / For…Next
Sub DonnerNomFeuil()
'Macro récupère le contenu de la cellule B2 pour le renommer dans l'onglet
End Sub
Objectif
Récupérer la valeur d'une cellule (ici A1 de la feuille 2) dans l'entête central de la feuille
active
Procédure
Sub EnteteValeur()
'affectation de l'entête central
ActiveSheet.PageSetup.CenterHeader = Sheets("Feuil2").Range("A1").Text
End Sub
Sub supprimerValeurs ()
‘A partir de la première cellule, il compare la valeur du pourcentage, puis
supprime la ligne ou la valeur <=10%
Range(“A2”).select
Loop
End Sub
41.2 Supprimer lignes vide
Le fonctionnement Détermine le nombre total de lignes
Supprimer chaque ligne dont la première cellule est vierge en
partant du bas du tableau
Sub supprimerlignesvide()
End If
Sub copiedonnées()
'
' copier les données fournisseurs et format num
'
Workbooks.Open Filename:= _
"C:\Documents and Settings\Elodie.PORTABLE\Mes documents\Récupe fichier à
fichier\Fournisseurs.xls"
Columns("A:M").Select
Selection.Copy
ActiveWindow.Close
ActiveSheet.Paste
Range("A1").Select
'Format num
Do While Not IsEmpty(ActiveCell)
Columns("H:h").Select
Selection.Value = cellule.Value * 1
ActiveCell.Offset(1, 0).Select
Loop
End Sub
6 déc 09 Luc Mersier & Sylvie Condé 96/164
42 At el ier avec DO UNTIL LOOP
42.1 Ouvrir des fichiers qui se trouvent dans un dossier (fonction Dir)
A faire : Créer un dossier avec des fichiers .xls
La fonction Dir permet de vérifier si certains fichiers et dossiers existent.
Sub Ouvre_Tous_Fichiers()
'Définir une variable pour récupérer tous les fichiers .xls C:\Data
File_Is = Dir("C:\Documents and Settings\luc\Mes documents\data\*.XLS")
'Jusqu'à ceux qu'il trouve plus rien, il ouvre nom de fichiers
Do Until File_Is = ""
Workbooks.Open Filename:=" C:\Documents and Settings\luc\Mes
documents\data\" & File_Is
'Code permettant d'arrêter la boucle sur la fonction dir
File_Is = Dir
Loop
End Sub
Objectif
04 Exos boucles do…
Le principe de cette boucle c'est de boucler sur des objets : feuilles de calcul,
dessin, ....
Les boucles For .... Each sont quelques peu complexes mais très utile à l'usage
For Each ? In ?
Instruction Elément Dans Groupe(Table)
Next
Répète un groupe d'instructions pour chaque élément d'un tableau ou d'une collection.
43.1.1 Syntaxe
A
Montants Couleurs du fond 1 Ventes journalière
0 à 500 ROUGE 2
501 à 1000 JAUNE 3 400
1001 à 5000 VERT 4 1300
5001 à10000 MAGENTA 5 600
6 700
>10000 CYAN 7 1200
8 1235
9 1450
10 8000
11 9000
12 12000
13 12054
14 300
15 58741
Sub FormatageValeur()
nb = 1
NbreTotal = InputBox("saisir le nombre de feuilles à créer", _
"Nombre", 1)
End Sub
End Sub
Sub
Erreurs logique :
Difficiles à repérer. Le mode Pas à Pas vous aide.
Erreurs extérieures
Elles résultent d'éléments extérieurs. Exemple, si vous demander de lire un fichier qui se
trouvent sur un lecteur non dédier ou bien si vous tapez un chiffre alors qu'une boîte de
dialogue attend une date.
45.2 L'instruction On Error GoTo 0
Objectif : L'erreur est qu'il ne reconnaît pas le fichier.
Sub open_file()
'L'erreur est qu'il ne reconnaît pas le fichier
Dim Fichier As String
Fichier = "c:\Excel\Appli.xls"
Workbooks.Open Fichier
End Sub
Sub open_file_correction()
'Sous le code fichier définir l'erreur
'définir un msgbbox pour indiquer l'erreur
Dim Fichier As String
Fichier = "c:\Excel\Appli.xls"
On Error GoTo MsgErreurs
Workbooks.Open Fichier
‘Arrête la procédure pour éviter le message
Exit Sub
MsgErreurs: MsgBox "Le fichier " & Fichier & " est inexistant"
Range("b4").Formula = "ouf..."
End Sub
Message MsgErreurs
Si le fichier "c:\Excel\Appli.xls" n'existent pas, la procédure se rend à l'étiquette
MsgErreurs, affiche le message puis s'arrête.
Vous pouvez à tout moment déplacer la flèche pour vous déplacer dans la procédure.
Vous pouvez à tout moment déplacer la flèche pour vous déplacer dans la procédure.
Sub auto_open()
Beep
End Sub
Sub aller_a()
Sheets("accueil").Select
End Sub
Beep
MsgBox "Merci de votre participation ... A bientôt"
End Sub
Sub journaiss()
End Sub
Définition
Dim As: Variable
FOR…. NEXT : Elle exécute une ou plusieurs instructions un nombre de fois précises. Elle
s’utilise avec la syntaxe suivante :
Sub ajoutfeuilles()
Dim nb As Integer
nb = InputBox("Combien de feuilles souhaitez vous ajouter ?", "Ajouter des feuilles")
For i = 1 To nb
Sheets.Add
Next i
End Sub
Sub nbfeuilles()
a = Sheets.Count
MsgBox "il y a " & a & " feuilles dans ce classseur"
End Sub
Définition
Do = Faire (Effectuer, faire les actions qui suivent)
While = Tant que (Tant que X = 1, ou Tant que le mot de passe est erroné)
Loop = Boucle (Faire une boucle, recommencer la boucle)
Sub maj()
Range("a4").Select
Range("a9").Value = jour
Range("a9").Select
Selection.NumberFormat = "ddd dd mmm yyy" Définir la réf cellule et le
mtest = Month(jour) format date
For i = 1 To 31
mois = Month((jour + i))
End If
Next i
Range("a9").Select
Do While Not IsEmpty(ActiveCell)
Sub supcalendrier()
Range("a7:A50").Select
Selection.Clear
Range("a7").Select
End Sub
Public y As Integer
Sub principale()
y = 10
Z = 20
TablesMultiplication
End Sub
A1
51.1.2 Propriétés
Name Caption
Formulaire (userform)° ChoixProd Choisissez le produit
Liste (listBox) Liste
Bouton OK (commandButon) OK OK
Bouton Annuler Annuler Annuler
Sub choisirProd()
ChoixProd.Show
End Sub
Objectif A faire
Feuil 1
Feuil2
Propriétés
Caption Choisir
Propriétés
Name Formulaire
Sub
Objectif
Rendre actif l'objet
Pour revenir dans le userform : double clic sur la feuille nommée Formulaire
Dans la procédure, nous avons modifié son nom, il faut le modifier dans les propriétés
pour que le nom soit reconnu.
Propriétés
Name Nom
Controlsource Feuil1!A2
Propriétés
Name Liste
RowSource Feul2!A1:A3
Controlsource Feuil1!B2
Remarques
Si vous double cliquez dans l'objet, vous pouvez lire la procédure. Le nom de la procédure
doit être le même dans les propriétés.
Vous ne modifier pas la procédure.
.Nom.Text = ""
.Liste.Text = ""
End With
Unload Formulaire ‘Supprime un objet de la mémoire
End Sub
Propriétés
Name Fermer
Caption Fermer
Formulaire
.Nom.Text = ""
.Liste.Text = ""
End With
End Sub
52.8 Dans la feuille de calcul, créer un bouton et l'affecter
A la fin
Private Sub Formulaire_Activate()
End Sub
1
End With
Unload Formulaire
‘Supprime un objet de la
mémoire
End Sub
A lire Sub
Saisie des dépenses journalières Période (Tous)
Actualiser le tableau
Nouvelle Dépense Somme Montant Paiement
Catégorie CB CHEQUE ESPECES Total général
Catégories Paiement Date Catégorie Paiement Montant
Alimentation 555,00 1 400,00 550,00 2 505,00
Alimentation CB 14/03/2006 Divers CHEQUE 30,00 Divers 1 200,00 1 200,00
Divers CHEQUE 04/03/2006 Alimentation CB 555,00 Habillement 500,00 695,00 1 195,00
Habillement ESPECES 08/03/2006 Santé CB 100,00 Loisirs 350,00 420,00 770,00
Loisirs 07/04/2006 Santé ESPECES 150,00 Santé 100,00 350,00 450,00
Travaux 540,00 500,00 1 040,00
Santé 08/05/2006 Alimentation CHEQUE 420,00
Voyages 400,00 350,00 140,00 890,00
Travaux 08/03/2006 Habillement CB 300,00
Total général 2 445,00 4 145,00 1 460,00 8 050,00
Voyages 15/03/2006 Voyages CHEQUE 350,00
07/04/2006 Travaux CB 540,00
08/05/2006 Loisirs CB 250,00
10/03/2006 Voyages ESPECES 140,00
15/03/2006 Loisirs ESPECES 320,00
=Dépenses!$B$4:$B$10
CATEG
Catégorie
=Dépenses!$E$3
DEBUT
début de la ligne à saisir
=Dépenses!$E$3:$I$3
LABEL
représente les intitulés
=Dépenses!$E$3:$I$30
LaZONE
Table de la feuille dépense
=Dépenses!$E$2:$I$2
MODEL
Ajout de ligne pour saisir les dépenses
=Dépenses!$C$4:$C$6
MODP
Mode de paiement
A lire
Objectif
Atteindre la dernière ligne du tableau base de données et se positionner dans la colonne E
Sub NewDep()
'' Nouvelles dépenses / Séléct permet de copier une ligne en bas du tableau
Range("MODEL").Select
Selection.Copy
'Sélect sur la première cellule
Range("DEBUT").Select
'Si la select va vers le bas = col E : ligne 65536
If Selection.End(xlDown).Address = "$E$65536" Then
'Alors déplacement à droite col 0
Range("LABEL").Offset(1, 0).Select
'Sinom on répète la même chose
Else
Selection.End(xlDown).Offset(1, 0).Select
End If
End Sub
Objectif
Effectuer la mise à jour.
Sub Refresh_QuandClic()
A faire Sub
55.1 Objectif
Création d'un formulaire pour saisir les informations dans un tableau de données.
Name Nom
BackColor
BorderColor Couleur de
Bordure
BorderStyle Couleur de style
Caption intitulé
Cycle
DrawBuffer
Height Hauteur
HelpContextID
KeepScrolBarsVisi
ble
Left Gauche
MouseLcon
MousePointer
Picture Image
PictureAlignement
PictureSizeMode Taille image
PictureTiling
ScorelBars
ScrollHeigh Haut
ScrollLeft Gauche
ScrollTop Haut
ScrollWidth Largeur
SpecialEffet t
StartUpPosition Commence départ
Tag Etiquette
Top Au-dessus
VerticalScrollBarSi
de
WhatsThisButton
WhatsThisHelp
Width
Propriétés
RowSource Titres!A1:A3
ControlSource Base!A2
Propriétés
Caption Nom
Textlign FmTextAlignRight
De la même manière, ajoutez avec le bouton des zones de texte et des intitulés A pour le
Prénom et le Téléphone est relié aux cellules C2 et D2
56.4.12 Bouton OK
Propriétés
Caption OK
Propriétés
Caption Annuler
Objectif
• Donner un nom personnalisé suivi d'un numéro chronologique à chaque objet.
A la création de l'objet, le VB donne un nom par défaut
Sub
Double cliquez dans la barre de défilement Relance
End Sub
Objectif
• Exécuter à partir de la feuille de calcul d'Excel de la feuille BASE le bouton l'affichage du
formulaire
Les données de la liste seront triées sur les noms. Nommons la colonne des noms pour y accéder
plus facilement
Cliquez droit sur le bouton et choisir propriétés : Dans la liste des propriétés tapez :
56.9 Propriétés
Name OuvrirSaisie
Caption Ajouter un prospect
Sub
Procédure :
Double cliquez sur le bouton Ajouter un prospect
Saisir la procédure
Sub
Objectifs
• 'Choisir l'option personnel pour le type de tél. par défaut
• 'Ne pas cocher les quatre cases à cocher
• 'Pour afficher une feuille, il faut utiliser la méthode Show
Sub
End With
End Sub
With Saisie
.Titre.Text = ""
.Nom.Text = ""
.Prénom.Text = ""
.Téléphone.Text = ""
.Compteur.Caption = "Nombre de relances"
.Relances.Value = 0
.Perso.Value = True
.Mensuel.Value = False
.Annuel.Value = False
.Gym.Value = False
.Sauna.Value = False
End With
'Choisir l'option personnel pout le type de tél par défaut
Range("E2") = True
'Ne pas cocher les quatre cases à cocher
Range("G2:J2") = False
'Pour afficher une feuille, il faut utiliser la méthode Show
Saisie.Show
End Sub
56.13.1 Objectif
• A partir du bouton OK, les données doivent être triées en ordre croissant.
Procédure
Définir un ordre croissant = Saisie.select et permettre d'insérer les données saisies en haut avec
une insertion de ligne
Saisie.Hide
Valeurs se trouvent
ans les colonnes =
7 à 10
IF
'Remplaçons les valeurs Vrai Faux des quatre cases à cocher par des Oui ou des
cellules vides
Objectif
• Supprimons maintenant la ligne insérée au début de la procédure.
With Saisie
.Titre.Text = ""
.Nom.Text = ""
.Prénom.Text = ""
.Téléphone.Text = ""
.Compteur.Caption = "Nombre de relances"
.Relances.Value = 0
.Perso.Value = True
.Mensuel.Value = False
.Annuel.Value = False
.Gym.Value = False
.Sauna.Value = False
End With
'Range("E2") = True
'Range("G2:J2") = False
'Saisie.Show
'If Range("e3") = True Then
'Range("e3") = "Perso"
'Else
'Range("E3") = "Pro"
'End If
'For i = 7 To 10
'If Cells(3, i) = True Then
'Cells(3, i) = "oui"
'Else
'Cells(3, i) = ""
'End If
'Next i
'Selection.Delete
Range("listeProspects").Sort key1:="Nom", header:=xlYes
End Sub
Dans la feuille Base, cliquez droit sur le bouton Ajouter un prospect et choisir Format de
contrôle
Cliquez sur l'onglet Propriétés
A faire Sub
58.1 Création d’un histogramme
La plage de données saisie (à partir de B5) doit être sélectionnée automatiquement parla
macro.
B C Nommé l’onglet de la feuil2 par Statistiques
5 MOIS CA HT Onglet de la feuille 2 = Statistiques
6 janvier 12
7 février 15
8 mars 18
9 avril 56
Sub grapique_2008()
'Sélection de la zone de cellules remplies
Range("b5").CurrentRegion.Select
Set plage = ActiveSheet.UsedRange
'Crée le graphique
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.Location where:=xlLocationAsObject, Name:="Statistiques"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "CA HT PARIS"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.HasLegend = False
End Sub
PlotBy : Cette propriété renvoie ou définit la manière dont les colonnes ou les lignes sont
utilisées comme séries de données dans le graphique
Objets HPageBreak et VPageBreak, cette propriété renvoie ou définit la cellule (un objet
Range) qui définit l'emplacement du saut de page.
A faire Sub
End Sub
ActiveSheet.ChartObjects(1).Activate
Pour toutes les modifications du graphiques, nous faisons référence au graphique actif
With ActiveChart
60.4 Résultat
Nous effectuons une rotation du graphique uniquement si la case Rotation est cochée
If Rotation.Value = True Then
La rotation du graphique varie de 0 à 360 degrés. Il faut donc vérifier que l'on ne dépasse
pas ces limites.
Si l'on dépasse, il faut inverser le sens de rotation (variable SecRotation)
If .Rotation + Vitesse > 360 Then SensRotation = -Vitesse
If .Rotation - Vitesse < 0 Then SensRotation = Vitesse
Objectif Sub
janvier 2002
mardi 1
mercredi 2
jeudi 3
vendredi 4
samedi 5
dimanche 6
lundi 7
mardi 8
mercredi 9
jeudi 10
vendredi 11
samedi 12
dimanche 13
lundi 14
mardi 15
mercredi 16
jeudi 17
vendredi 18
samedi 19
dimanche 20
lundi 21
mardi 22
mercredi 23
jeudi 24
vendredi 25
samedi 26
dimanche 27
lundi 28
mardi 29
mercredi 30
jeudi 31
Arrêter l'enregistreur
Enregistrer le classeur
Pour que le contenu des variables soit conservé, il faut les déclarer au module et non dans
une procédure.
Sub Planningcf()
' Planningcf Macro
' Macro enregistrée le 06/12/2001 par Luc
Sheets.Add
Range("A3:B33").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("A1").Select
Selection.NumberFormat = "mmmm yyyy"
Range("A3:A33").Select
Selection.NumberFormat = "dddd d"
Columns("A:A").Select
Selection.ColumnWidth = 20
Columns("B:B").Select
Selection.ColumnWidth = 60
Range("A1:B1").Select
With Selection
.HorizontalAlignment = xlCenter
6 déc 09 Luc Mersier & Sylvie Condé 151/164
61.6 Suite du détail de la procédure
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
Selection.Merge
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "janvier 2002"
End Sub
61.7 Suite du Projet
Phase 2 :
Modifier une macro enregistrée
Nous désirons ajouter des feuilles de planning pour des dates précises. Demandons à
l'utilisateur de préciser la date.
Aller en fin de procédure
Supprimez la ligne Sheets("Feuil2").Select
Avant la ligne Sheets("Feuil2").Name
Saisir : DateChoisie = InputBox("Tapez la date de la nouvelle feuille
(00/00/00)") et faire Enter touche clavier
La fonction InputBox retourne une valeur de type Sring. Comme nous avons besoin
d'effectuer des calculs avec la variable DateChoisie utilisons la fonction DateValue qui
convertit les données de type chaîne en données de type DateHeure
Saisir : DateChoisie = DateValue(DateChoisie)
La variable Fond va définir la couleur de fond. Pour commencer avec un fond gris,
plaçons la valeur 15 dans une variable
Tapez Fond = 15
Les cellules à modifier sont situées dans la plage A3:A33. Pour remplir, nous utilisons
une boucle de 3 à33. La variable JourEnCours est utilisée comme compteur
For JourEnCours = 3 To 33
61.9 Modifier la procédure après l'enregistreur macro (Module 2)
Sub Planningcf()
' Planningcf Macro
' Macro enregistrée le 06/12/2001 par Luc
Sheets.Add
Range("A3:B33").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
Sheets("Feuil2").Select
datechoisie = InputBox("Tapez la date de la nouvelle feuille(00/00/00)")
ActiveSheet.Name = Format(datechoisie, "mmmm yyyy")
Range("a1") = datechoisie
datechoisie = DateValue(datechoisie)
MoisEnCours = Month(datechoisie)
Fond = 15
For JourEnCours = 3 To 33
End Sub
Si le fond doit changer, vérifions si s'il est en gris (valeur 15 : n° qui désigne la
couleur)
Tapez : If Fond = 15 Then
Si, après la création de la nouvelle feuille, l'utilisateur désir saisir des valeurs, il faut
placer la sélection sur la cellule B3
Saisir : Range("B3").Select
Dans le classeur : supprimer la feuille janvier 2002
Tester le projet : Tapez 01/01/02 et saisir à nouveau 01/02/02
For jourEnCours = 3 To 33
Cells(jourEnCours, 1) = DateChoisie
Cells(jourEnCours, 1).Interior.ColorIndex = Fond
If WeekDay(DateChoisie) = 1 Then
If Fond = 15 Then
Fond = 0
Else
Fond = 15
End If
End If
DateChoisie = DateChoisie + 1
If Month(DateChoisie) > MoisEnCours Then Exit For
Next jourEnCours
Range("B3").Select
Sub Planningcf()
' Planningcf Macro
' Macro enregistrée le 06/12/2001 par Luc
Sheets.Add
Range("A3:B33").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("A1").Select
Selection.NumberFormat = "mmmm yyyy"
Range("A3:A33").Select
Selection.NumberFormat = "dddd d"
Columns("A:A").Select
Selection.ColumnWidth = 20
Columns("B:B").Select
Selection.ColumnWidth = 60
Range("A1:B1").Select
With Selection
.HorizontalAlignment = xlCenter
6 déc 09 Luc Mersier & Sylvie Condé 156/164
61.13 Suite : Résultat de la procédure planning complète
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
Selection.Merge
Sheets("Feuil2").Select
DateChoisie = InputBox("Tapez la date de la nouvelle feuille(00/00/00)")
ActiveSheet.Name = Format(DateChoisie, "mmmm yyyy")
Range("a1") = DateChoisie
DateChoisie = DateValue(DateChoisie)
MoisEnCours = Month(DateChoisie)
Fond = 15
For jourEnCours = 3 To 33
Cells(jourEnCours, 1) = DateChoisie
Cells(jourEnCours, 1).Interior.ColorIndex = Fond
If WeekDay(DateChoisie) = 1 Then
If Fond = 15 Then
Fond = 0
Else
Fond = 15
End If
End If
DateChoisie = DateChoisie + 1
If Month(DateChoisie) > MoisEnCours Then Exit For
Next jourEnCours
Range("B3").Select
C'est l'erreur 1004 qui apparaît quand on nomme une feuille avec déjà un nom déjà utilisé.
Clic sur le bouton Débogue
Clic sur Réinitialisation..
62.2 Méthode
Ajouter une routine d'erreur d'exécution dans la procédure pour demander à l'utilisateur si
l'ancienne doit être supprimée.
Cette routine nous permettra de gérer les autres erreurs.
62.3 Résultat
Si vous saisissez une date qui existe déjà dans un onglet de feuille, vous avez la boîte de
dialogue qui apparaît ci-dessous au lieu d'avoir l'erreur 13 OU 1004.
Pour gérer les erreurs, il faut donner à l'instruction On Error Goto. Cette instruction doit
toujours se trouver en début de procédure c'est à dire avant Sheets.Add
La routine principale ne doit pas se prolonger dans la routine de gestion des erreurs
Saisir : Exit Sub
La routine de gestion des erreurs doit commencer par une étiquette. Ce sont les deux
points qui indiquent à VB la présence d'une étiquette.
Saisir : ErreurPlanning:
C'est l'erreur 1004 qui apparaît quand on nomme une feuille avec déjà un nom déjà utilisé.
1004 : Le nom de la feuille est déjà utilisé.
La fonction Err retourne le numéro de l'erreur. Testons cette éventualité.
Saisir : If Err = 1004 then
62.6 Gestion des erreurs
Si c'est l'erreur 1004, il faut avertir l'utilisateur de l'erreur et lui demander si l'ancienne
feuille doit être supprimée.
Saisir : Réponse = MsgBox("la feuille " & Format(DateChoisie, "mmmm
yyyy") & _
" existe déjà !" & Chr(10) & "Supprimer l'ancienne feuille ?", _
vbYesNo + vbCristical)
Nous devons supprimer l'ancienne feuille avant de renommer la nouvelle. Dans ce cas
Excel ouvre une boîte de dialogue pour confirmer la suppression.
Pour ne pas avoir cette boîte de dialogue, l'instruction SenKkeys permettra de répondre
à la place de l'utilisateur.
Comme les boîtes de dialogue stoppent toutes actions, l'instruction SENDKEYS est
placée avant la suppression de la feuille.
Comme la feuille est supprimer, nous pouvons exécuter de nouveau la ligne de code
qui à généré l'erreur.
Saisir : Resume
Quand l'utilisateur ne peut pas supprimer l'ancienne feuille, il faut supprimer la nouvelle
et sortir de la procédure.
Saisir : Else
Saisir : SenDKeys String: = "{ENTER}" , WAIT:=False
Saisir : ActiveSheet.Delete
Exit Sub
End If
End If
VB affichera Erreur 13
Nous allons ajouter une instruction de décision pour que l'utilisateur ne tape pas une
date mais un chiffre ou une chaîne de caractère, dans ce cas le VB affichera Erreur 13.
Saisir : If Err = 13 Then
Nous allons tester la procédure, mais pour empêcher de rencontrer d'autre type
d'erreur, nous allons ajouter un message.
Saisir : MsgBox "Erreur n° : " & Err & Chr(10) & "Erreur : " & Error(Err)
Ces erreurs n'étant pas gérées par notre routine, il faut arrêter la procédure.
Saisir : Stop
62.13 Résultat
Saisir une date qui existe déjà dans un onglet de feuille.
Vous avez la boîte de dialogue qui apparaît ci-dessous au lieu d'avoir l'erreur 13 OU 1004.
Range("B3").Select
Exit Sub
ErreurPLanning:
If Err = 1004 Then
Réponse = MsgBox("la feuille " & Format(DateChoisie, "mmmm
yyyy") & _
" existe déjà !" & Chr(10) & "Supprimer l'ancienne feuille ?", _
vbYesNo + vbCristical)
If Réponse = vbYes Then
SendKeys String:="{ENTER}", Wait:=False
Sheets(Format(DateChoisie, "mmmm yyyy")).Delete
Resume
Else
SendKeys String:="{ENTER}", Wait:=False
ActiveSheet.Delete
Exit Sub
End If
End If
If Err = 13 Then
MsgBox "Vous devez tapez une date pour créer une nouvelle feuille
"_
& DateChoisie & n 'est pas une date, " , vbEclamation
SendKeys String:="{ENTER}", Wait:=False
Active.Sheet.Delete
Exit Sub
End If
MsgBox "Erreur n° : " & Err & Chr(10) & "Erreur : " & Error(Err)
Stop
End Sub
La perspective des graphiques varie de 0 à 100. Le programme est le même que pour la
rotation en respectant ces limites
62.15 Altitude
L'altitude des graphiques varie de – 90 à 90 degrés. Le programme est le même que pour
la rotation et la perspective en respectant ces limites.
Next i
End With
Range("F6").Select
End Sub