Vous êtes sur la page 1sur 164

Luc Mersier

T a b l e d e s m a t i è r e s

Table des matières


1CONSOLIDATION DES CONNAISSANCES EXCEL...............................................................................10
2UTILISATION DE L’ENREGISTREUR MACROS ...................................................................................10
2.1DÉFINIR UNE RÉFÉRENCE ABSOLUE.....................................................................................................10
2.1.1Résultat détaillé de la procédure en réf absolue.............................................................11
2.1.2Fonction CHR.................................................................................................................11
2.2DÉFINIR UNE RÉFÉRENCE RELATIVE....................................................................................................12
2.2.1Résultat détaillé de la procédure en réf relative..............................................................12
2.3AJOUTER LE CODE DANS UNE PROCÉDURE...........................................................................................13
2.3.1Création d'une macro de mise en page...........................................................................13
2.3.2Ajouter le code dans une procédure...............................................................................13
3 PRÉSENTATION DE L'ÉDITEUR VB.............................................................................................14
3.1BARRE D'OUTILS VB .....................................................................................................................14
3.2PRÉSENTATION DE L’ÉDITEUR VB......................................................................................................14
3.2.1Le module.......................................................................................................................14
3.2.2Code de procédure.........................................................................................................14
3.2.3Les instructions...............................................................................................................14
3.2.4L'apostrophe...................................................................................................................14
3.2.5Elément Public................................................................................................................14
3.2.6Elément Privé..................................................................................................................14
4SUB. EVÉNEMENTIELLE OU SUB INDÉPENDANTE FUNCTIONS.............................................................16
4.1SCHÉMA......................................................................................................................................16
5 MODIFIER UNE MACRO DANS L’ÉDITEUR VBA..............................................................................17
5.1OUVRIR L’ÉDITEUR VBA ................................................................................................................17
5.2MODIFIER UNE MACRO ...................................................................................................................17
5.3EXÉCUTER UNE PROCÉDURE DANS LE VB............................................................................................17
5.4RACCOURCI POUR ATTEINDRE LE MODULE VB......................................................................................17
5.5DÉFINITION DES OBJETS, PROPRIÉTÉS ET MÉTHODES COLLECTIONS.........................................................17
5.5.1.1Codes de la procédure................................................................................................................................19

6POINT D’ARRÊT & PAS À PAS...................................................................................................20


6.1PAS À PAS...................................................................................................................................20
6.2POINT D’ARRÊT.............................................................................................................................20
7ATELIER SUR ENREGISTREUR ET MODIFICATION..............................................................................20
8DÉFINITION DES OBJETS, PROPRIÉTÉS ET MÉTHODES COLLECTIONS..................................................21
8.1 CRÉATION D’UNE MACRO À PARTIR DE L’ÉDITEUR VBA..........................................................................22
8.1.1Sub sur Objets................................................................................................................22
8.1.2Propriété (Mise en forme)...............................................................................................22
8.1.3Méthode (Action) exécute...............................................................................................22
8.1.4Détail des codes sur la procédures ................................................................................23
9ARGUMENTS ET ARGUMENTS NOMMÉS.........................................................................................24
9.1.1Aide.................................................................................................................................24
9.1.2Detail de la procedure.....................................................................................................25
9.1.3Exemples de Proc sur du Formatdate() et faire évoluer la Proc......................................26
9.1.4Exécuter une macro........................................................................................................26
10PROCÉDURE INDÉPENDANTE DE TYPE FUNCTION : FX....................................................................27
10.1CRÉATION DE PROCÉDURES FONCTIONS ..........................................................................................27
10.1.1Convertir du Dollar vers l’Euro......................................................................................27

6 déc 09 Réalisation : Luc Mersier 2/164


10.1.2Convertir du € vers $.....................................................................................................27
11TYPE FUNCTIONS AVEC ARGUMENTS.........................................................................................27
11.1.1Objectif Calculer la TVA avec une nouvelle fonction.....................................................27
11.2DIFÉRENCE ENTRE FORMULA ET FORMULA R1C1..............................................................................28
11.3COMPARAISON DE DEUX SUB AVEC FORMULES....................................................................................28
12MODULE VB : AIDE DANS LE MODULE VB................................................................................28
12.1UTILISATION DE L'AIDE .................................................................................................................28
13CRÉATION D’UN MENU ..........................................................................................................29
13.1AFFICHER UN NOUVEAU MENU.........................................................................................................29
13.1.1Créer un Élément de menu personnalisé à partir du menudans la barre menu.............29
13.2AFFECTATION À UNE MACRO À UN SOUS MENU ET DONNER UN NOM AU MENU..............................................29
13.3SUPPRIMER ...............................................................................................................................29
14 BOUTON DANS BARRE D'OUTILS..............................................................................................30
14.1AJOUTER UNE NOUVELLE BARRE D'OUTILS .........................................................................................30
14.2AJOUTER UN BOUTON ET L'AFFECTER À UNE PROCÉDURE.......................................................................30
15BOUTON DE COMMANDE DANS LA FEUILLE..................................................................................30
15.1REMARQUE................................................................................................................................30
16BOUTON AVEC LIEN HYPERTEXTE..............................................................................................30
17SÉCURITÉ...........................................................................................................................30
18 ATELIER SUR OBJETS - PROPRIÉTÉS - MÉTHODES.....................................................................31
18.1NOMMÉ CELLULES........................................................................................................................31
19XLSTART : OUVRIR EXCEL AVEC LES PROCÉDURES......................................................................32
19.1OBJECTIF..................................................................................................................................32
19.2UTILISATION DES COMMANDES.........................................................................................................32
20RECAPITULATIF DES PROCÉDURES............................................................................................33
21 ARCHITECTURE DU LANGAGE VISUAL BASIC.............................................................................34
22 OBJETS LES PLUS UTILISÉS....................................................................................................35
22.1OBJET PROGRAMMES EXCEL : APPLICATION...............................................................................35
22.1.1Fermer le programme Excel..........................................................................................35
22.1.2Masquer le programme Excel dans la barre des tâches...............................................35
22.1.3Ouvir à partir d'Excel Word...........................................................................................35
22.1.4Appel procedure ...........................................................................................................35
22.2LES CLASSEURS: WORKBOOKS.......................................................................................................35
22.2.1Ajouter un nouveau classeur dans Excel......................................................................35
22.2.2Ouvre un classeur.........................................................................................................35
22.2.3Enregistrer un classeur.................................................................................................35
22.2.4Fermer un classeur.......................................................................................................35
22.2.5Protéger un classeur.....................................................................................................36
22.2.6Aperçu..........................................................................................................................36
22.3LES FEUILLES : SHEETS................................................................................................................36
22.3.1Ajout une feuille dans un classeur.................................................................................36
22.3.2Supprimer une feuille du classeur actif..........................................................................36
22.3.3Déplace une feuille dans le classeur.............................................................................36
22.3.4Change le nom d'une feuille dans le classeur...............................................................36
22.3.5Copie une feuille dans un nouveau classeur.................................................................37
22.4CELLULE ET PLAGE DE CELLULES : CELLS RANGES...............................................................................37
22.4.1Sélectionne les cellules de A1 à B10............................................................................37
22.4.2Efface le contenu et le format des cellules de A1 à B10...............................................37
22.4.3Efface le contenu et le format de toutes les cellules de la feuille...................................37

6 déc 09 Réalisation : Luc Mersier 3/164


22.4.4Inscrit un contenu texte dans la cellule désignée..........................................................37
22.4.5Sélection de toute la feulle............................................................................................37
22.4.6Écriture dans une certaine cellule de la feuille active....................................................39
22.4.7Désigne une cellule par rapport à la cellule active........................................................39
22.4.8Inscrit une valeur dans une cellule par rapport à la cellule active..................................39
23 ORGANISATION PROJET DANS L’EDITEUR VBA.........................................................................40
23.1ORGANISER SES MODULES.............................................................................................................40
23.2RENOMMER................................................................................................................................40
23.3RENOMMER OU PROTECTION D'UN PROJET........................................................................................40
24EXPLORATEURS D'OBJETS......................................................................................................41
24.1EXPLORATEUR D'OBJETS...............................................................................................................42
24.1.1Afficher l’Explorateur d’objets........................................................................................42
24.1.2Masquer l’Explorateur d’objets......................................................................................42
24.1.3Naviguer dans l’Explorateur d’objets............................................................................42
24.1.4Utilisation de l'aide dans l'explorateur d'objets..............................................................43
25ATELIER AVEC EXEMPLES MAROS...........................................................................................44
25.1.1Objectif : Sub aller_a()..................................................................................................44
25.1.2Objectif Sub ouvrir()......................................................................................................44
25.1.3SubObjectif Sub Insererfeuille.......................................................................................44
25.1.4Objectif Sub Ajuster_toutes_les_colonnes....................................................................44
25.1.5Objectif : affiche formules et ajuster colonnes...............................................................45
25.1.6Objectif : enlève formules ajuster colonnes...................................................................45
25.1.7Afficher feuille masquer.................................................................................................45
25.1.8Gestion des erreurs :.....................................................................................................45
25.1.9Remplacer chaîne de caractères..................................................................................46
25.1.10Récupérer les données d'un autre fichier....................................................................47
25.1.11 Objectif : Convertir la cellule de gauche en Euro........................................................49
25.1.12AutoFill : Recopie formule et s’arrête à une cellule vide..............................................50
25.1.13Calcu avec Insruction Set Instruction Objet.................................................................51
25.1.14Création d'un tableau..................................................................................................52
26PROJETS............................................................................................................................53
26.1.1Ajouter une ligne dans un tableau.................................................................................53
27DÉCLARATION DE VARIABLES .................................................................................................54
27.1LES VARIABLES ..........................................................................................................................54
27.2DÉCLARATION DES VARIABLES AVEC DIM...........................................................................................54
27.3VARIABLE PERMETTANT DE STOCKER DES VALEURS ..............................................................................54
27.4DÉCLARATION DES VARIABLES OBLIGATOIRE........................................................................................54
27.4.1Exemple sur le déclaration de variables........................................................................55
27.5FONCTIONS OU INSTRUCTION AVEC DES VARIABLES...............................................................................56
27.6VARIABLES AVEC FONCTIONS ET INSTRUCTIONS : DIM AS, INPUTBOX, MSGBOX.........................................56
27.7FONCTION INPUBOX() "REMPLIR UN MESSAGE"....................................................................................57
27.8SYNTAXE DE LA FONCTION INPUTBOX..............................................................................................57
27.8.1Exemple InputBox.........................................................................................................57
28L'INSTRUCTION MSGBOX()....................................................................................................58
28.1SYNTAXE INSTRUCTION MSGBOX ...................................................................................................58
28.1.1Sub auto_open()...........................................................................................................59
28.1.2Sub auto_close()...........................................................................................................59
28.1.3Open ............................................................................................................................59
28.1.4Close.............................................................................................................................59
28.1.5Boîtes de dialogue donnant un résultat de Box.............................................................60
28.1.6Test en modifiant la variabe..........................................................................................60
28.1.7Compte nbre de chiffres indiqués dans Box WorksheetFunction.CountIf......................61
28.1.8Ajouter le résultat dans la feuille...................................................................................61
6 déc 09 Réalisation : Luc Mersier 4/164
28.1.9Objectif : Titre dans le MSGBox....................................................................................61
28.1.10NB.SI() avec variable < WorksheetFunction................................................................62
28.1.11Utilisation de la SumIf (faire démo sur Excel sur Somme.Si)......................................62
28.1.12 Ajouter le résultat du MSGBox dans la cellule A1......................................................62
29PROJET FACTURE AVEC DOUBLONS ET BOX...............................................................................63
29.1.1Détail des procédures...................................................................................................64
30PARAMÉTRER LA MSGBOX....................................................................................................65
30.1CRÉATION D’UN MSGBOX.............................................................................................................66
30.2CRÉER UN MESSAGE SUR PLUSIEURS LIGNES. INSTRUCTION VBCR..........................................................66
30.3ICÔNE DANS LA BOÎTE DE DIALOGUE. BOUTON INFORMATION...................................................................66
30.4BOUTON COMMANDES NON............................................................................................................67
30.5BOUTON ANNULER + SÉLÉCTION D'UN BOUTON PAR DÉFAUT..................................................................67
30.6AJOUTER UN TITRE.......................................................................................................................67
31CHAÎNES DE CARACTÈRES .....................................................................................................68
31.1MAJUSCULE AVEC LA FONCTION PROPER() = EXACTE..........................................................................68
31.2FONCTIONS UCASE ET LCASE........................................................................................................68
31.3FONCTION LEFT..........................................................................................................................69
31.4FONCTION RIGHT........................................................................................................................69
31.5FONCTION MID...........................................................................................................................69
31.6FONCTION LEN...........................................................................................................................69
31.7OBJECTIF : INDIQUER LE NOMBRE DE CARACTÈRES...............................................................................69
31.8FONCTIONS LTRIM, RTRIM ET TRIM.................................................................................................70
31.9FONCTIONS ISNULL OU ISNUMÉRIC.................................................................................................70
31.10ATELIER SUR CHAÎNES DE CARACTÈRES...........................................................................................70
31.10.1Mettre en majuscule le premier caractère des mots....................................................70
31.10.2Boîte de dialogue qui envoie le contenu dans une cellule ..........................................71
31.10.3Choix de plusieurs Boîtes de dialogue qui envoie le contenu dans une cellule ..........71
32FONCTIONS DE DATES...........................................................................................................73
32.1.1Fonctions de contenu :..................................................................................................73
33 IF THEN ELSE() = INSTRUCTION DE DÉCISION ...........................................................................74
33.1OBJECTIF DE LA PROCÉDURE..........................................................................................................74
33.1.1If Then Else (Imbriqué avec ElseIF) .............................................................................74
33.1.2Ajouter le résultat dans la feuille avec Majuscule..........................................................74
34 SELECT_CASE................................................................................................................75
34.1OBJECTIF DE LA PROCÉDURE : RENVOI UN MESSAGE EN FONCTION D'UNE VALEUR.......................................75
34.1.1Détail de la Proc Select CASE......................................................................................75
34.1.1.1Objectif :Renvoi un message en fonction d'une valeur.............................................................................75
34.1.2Isertion d'une image......................................................................................................75
35ATELIER BOX & IF..............................................................................................................76
35.1PROJET SUR QUESTIONNAIRE..........................................................................................................76
35.1.1Procédure.....................................................................................................................76
35.1.2Ajout de procédures sur Bouton OK NO.......................................................................77
35.2ATELIER : AFFICHE D'UNE BOÎTE DE DIALOGUE PROPOSANT PLUSIEURS CHOIX.............................................78
35.3CRÉATION D'UN CLASSEUR ET RENOMMER LA FEUILLE (INPUTBOX)...........................................................79
35.4CRÉATION D'UN CLASSEUR AVEC INPUBOX ET RENOMMER LA FEUILLE ......................................................79
36BOUCLE FOR…NEXT.......................................................................................................81
36.1INSTRUCTIONS DE BOUCLES FOR NEXT (COMPTEUR)......................................................................81
36.1.1 For i Next avec Remplissage d'une grande zone.........................................................82
36.1.2For i Next avec STEP....................................................................................................82
36.1.3 For…Next ....................................................................................................................83
36.1.4For…Next avec une condition.......................................................................................83

6 déc 09 Réalisation : Luc Mersier 5/164


37BOUCLE AVEC CONDITION : DO WHILE LOOP ......................................................................84
37.1.1Difference entre : Do While…Loop et Do Loop…While.................................................84
37.2SYNTAXE DE L'INSTRUCTION DO WHILE…LOOP:................................................................................84
37.2.1 Instruction DO While suivi de Loop..............................................................................85
37.2.2Comparaison For I et Do While.....................................................................................85
38LA BOUCLE DO…UNTIL…LOOP.............................................................................................86
38.1LES BOUCLES DO, UNTIL LOOP...............................................................................................86
38.2SYNTAXE DE L'INSTRUCTION DO…UNTIL…LOOP:...............................................................................86
38.2.1Exo avec Instruction DO Until suivi de Loop.................................................................87
39INSTRUCTION EXIT DO..........................................................................................................88
39.1.1Boucle Exit Do..............................................................................................................88
40ATELIER AVEC FOR…NEXT...................................................................................................89
40.1PROCEDURE D'UN TABLEAU AVEC FORMAT..........................................................................................89
40.2 COMPARE LE CONTENU DU TABLEAU 1 ET LE TABLEAU 2 AVEC FX UBOUND..............................................90
40.3CHERCHER ET OUVRIR DES CLASSEURS D'UN DOSSIER.........................................................................91
40.4ACTUALISER UN TARIF (FOR AVEC VARIABLE)......................................................................................92
40.5ACTUALISER UN TARIF EN FONCTION D'UN CRITÈRE (FOR + IF)...............................................................93
40.6RENOMMER UN ONGLET : DIM…AS / FOR…NEXT.............................................................................94
40.6.1Boucle sur En-tête .......................................................................................................94
41ATELIER AVEC DO WHILE LOOP.......................................................................................95
41.1SUPPRIMER LIGNES SUR DES VALEURS <=10%..................................................................................95
41.2SUPPRIMER LIGNES VIDE................................................................................................................95
41.3INSERT ET RENOMMER FEUILLES (DIM / DO WHILE…LOOP)..................................................................96
41.4AJOUTER UN FORMAT NUM DANS COLONNE.........................................................................................96
42 ATELIER AVEC DO UNTIL LOOP.......................................................................................97
42.1OUVRIR DES FICHIERS QUI SE TROUVENT DANS UN DOSSIER (FONCTION DIR)..............................................97
43 UTILISATION D'INSTRUCTIONS FOR EACH...NEXT....................................................................98
43.1.1Syntaxe.........................................................................................................................98
43.2DÉFINIR UN TAUX DE CONVERSION...................................................................................................99
43.3AFFICHER TOUTES LES FEUILLES......................................................................................................99
43.4N'IMPRIME PAS LA FEUILLE TOTO.....................................................................................................99
43.5CONVERTIR DU TEXTE EN NUMÉRIQUE...............................................................................................99
43.6MISE EN FORME CONDITIONNELLE AVEC COULEUR (FOR EACH).............................................................100
43.6.1Mettre la 1ère lettre en Majuscule...............................................................................101
44ANALYSE AVEC L'ESPION DANS L'ÉDITEUR................................................................................102
44.1INSERT ET RENOMMER FEUILLES (DIM / DO WHILE…LOOP)................................................................102
44.2AFFICHER L'ESPION....................................................................................................................102
45GESTION DES ÉRREURS ......................................................................................................104
45.1.1Il existe trois types d'erreurs : .....................................................................................104
45.2L'INSTRUCTION ON ERROR GOTO 0.............................................................................................104
45.3DÉFINIR LA PROCÉDURE POUR QU'IL NE RECONNAÎT PAS LE FICHIER À L'OUVERTURE...................................104
45.4UTILISATION DE L'INSTRUCTION ON ERROR GOTO ............................................................................105
45.5 TESTEZ VOTRE APPLICATION "PAS À PAS"......................................................................................105
45.5.1Placez des points d'arrêts...........................................................................................105
46ATELIER 3.......................................................................................................................106
47EXOS RÉVISION ET D’EXEMPLES DIVERS...................................................................................107
47.1.1Ouverture automatique...............................................................................................107
47.1.2Sélection d’une feuille.................................................................................................107
47.1.3Fermer Excel...............................................................................................................107
47.1.4Variable InputBox........................................................................................................107

6 déc 09 Réalisation : Luc Mersier 6/164


47.1.5 Ajouter des feuilles dans un classeur.........................................................................108
47.1.6Boîte de dialogue qui vous indique combien il y a de feuilles......................................108
47.1.7Mettre en format majuscules (ucase) à parti de la cellule A4......................................108
47.1.8 Création d’un calendrier avec l’indication du samedi et dimanche.............................109
47.1.9Supprimer le calendrier...............................................................................................109
48DÉCLARER DES VARIABLES PUBLICS........................................................................................110
48.1OBJECTIF DE DÉCLARER DES VARIABLES DANS UN MODULE ................................................................110
48.1.1Définition d'une Variable locale...................................................................................110
48.1.2Définition d'une Variable Public...................................................................................110
48.2CRÉATION D'UNE DÉCLARATION D'UNE VARIABLE DANS UN MODULE........................................................110
48.3OBJECTIF : APPEL D'UNE AUTRE PROCÉDURE...................................................................................110
49VARIABLE PUBLIC..............................................................................................................111
49.1DÉFINITION D'UNE VARIABLE PUBLIC..............................................................................................111
50DÉCLARER DES VARIABLES DANS UN MODULE...........................................................................111
51FORMULAIRE AVEC LISTE DÉROULANTE....................................................................................112
51.1FORMULAIRE AVE LISTE DÉROULANTE..............................................................................................112
51.1.1Insertion UserForm.....................................................................................................112
51.1.2Propriétés....................................................................................................................112
51.1.3Paramètre du formulaire.............................................................................................113
51.1.4Créer le code associé à l'activation du formulaire.......................................................113
51.1.5Insérer un module : ....................................................................................................113
51.1.6Bouton dans la feuille..................................................................................................114
51.1.7Code du Bouton Annuler.............................................................................................114
51.1.8Code du Bouton OK....................................................................................................114
52CRÉATION DU FORMULAIRE...................................................................................................115
52.1AFFICHER USER FORM...............................................................................................................115
52.2CHANGER LE NOM DE LA BARRE DE TITRE ET DE LA FEUILLE................................................................115
52.2.1Création de la procédure.............................................................................................116
52.3CRÉATION DU BOUTON ZONES DE TEXTE .......................................................................................116
52.3.1Création de la procédure et définir les propriétés........................................................116
52.4CRÉATION D'UNE ZONES DE LISTE MODIFIABLE..................................................................................117
52.5CRÉATION DU BOUTON OK.........................................................................................................117
52.5.1Création de la procédure dans OK..............................................................................118
52.6CRÉATION DU BOUTON FERMER...................................................................................................118
52.6.1Procédure et définir les propriétés..............................................................................118
52.7OBJET FEUIL1 : DÉFINIR PROCÉDURES...........................................................................................119
52.8DANS LA FEUILLE DE CALCUL, CRÉER UN BOUTON ET L'AFFECTER ..........................................................119
53PROJET TABLEAU CROISÉ DYNAMIQUE.....................................................................................121
53.1DÉMARCHE MISE À JOUR BUDGET 2010.........................................................................................121
53.1.1Explication des noms de plages..................................................................................121
53.1.2 Détail des procédures................................................................................................122
54FORMULAIRE POUR BASE DE DONNÉES.....................................................................................123
55PROCÉDURE.....................................................................................................................124
55.1OBJECTIF ...............................................................................................................................124
55.2INSERTION DE LA FEUILLE 2..........................................................................................................124
55.3CRÉER UNE FEUILLE UTILISATEUR...................................................................................................124
56RÉALISATION DU FORMULAIRE ÉLABORÉ..................................................................................124
56.1CRÉATION DE LA FEUILLE DE FORMULAIRE........................................................................................124
56.2CHANGER LE NOM DE LA BARRE DE TITRE ......................................................................................125
56.3FENÊTRE PROPRIÉTÉS................................................................................................................126
56.4 CRÉATION DU BOUTON FORMULAIRE ET DÉFINIR LES PROPRIÉTÉS.........................................................127
6 déc 09 Réalisation : Luc Mersier 7/164
56.4.1Dans la feuille utilisateur : Création d'une Zones de liste modifiable...........................127
56.4.2Ajouter un intitulé Titre à gauche de la liste déroutante...............................................127
56.4.3Dans la feuille utilisateur : Création bouton Zones de texte .......................................128
56.4.4Ajouter un intitulé Nom ...............................................................................................128
56.4.5Ajouter un cadre d'option............................................................................................129
56.4.6 Ajouter un bouton d'option dans le cadre Type de téléphones...................................129
56.4.7 Définir la procédure pour le bouton d'option Professionnel........................................129
56.4.8 Ajouter un intitulé Nombre de relances......................................................................129
56.4.9 Ajouter une barre de défilement.................................................................................130
56.4.10 Ajouter Case à cocher .............................................................................................130
56.4.11Ajouter un bouton de commande de validation ou d'annulation................................131
56.4.12 Bouton OK ..............................................................................................................131
56.4.13 Bouton Annuler........................................................................................................131
56.5NOM DES CONTRÔLES.................................................................................................................132
56.5.1 Définir un nom à la feuille formulaire .........................................................................132
56.5.2 Nom avec les propriétés des contrôles .....................................................................132
56.5.3Procédures événementielles sur la barre de défilement "Relance".............................133
56.5.4 Procédures événementielles sur l'intitulé Compteur ..................................................133
56.5.5Revenir dans la feuille Excel.......................................................................................133
56.6CRÉATION D'UN BOUTON D'EXÉCUTION DANS LA FEUILLE BASE À PARTIR D'EXCEL......................................134
56.7PREMIÈRE PHASE : RENOMMER PLAGE DE CELLULES.........................................................................134
56.8AJOUTER UN BOUTON DE COMMANDE DANS LA FEUILLE BASE................................................................135
56.9PROPRIÉTÉS ............................................................................................................................135
56.10OBJECTIF : OUVRIR LA FEUILLE SAISIE À PARTIR DU BOUTON AJOUTER UN PROSPECT...............................135
56.10.1 Procédure sur le Bouton Ajouter un prospect dans la feuille Excel..........................136
56.11SUITE POUR LE NOUVEL ENREGISTREMENT.....................................................................................137
56.11.1Enregistrer et Fermer la fenêtre VB...........................................................................137
56.12RÉSULTAT DE LA PROCÉDURE QUI OUVRE LA FEUILLE SAISIE...............................................................138
56.13FEUILLE SAISIE BOUTON OK......................................................................................................139
56.13.1Objectif......................................................................................................................139
56.13.2Continuer la procédure avec le IF à partir du bouton OK..........................................139
56.14PROCÉDURE POUR LE BOUTON ANNULER..................................................................................141
56.15ORDRE DE TABULATIONS...........................................................................................................142
56.16PROPRIÉTÉS DES CONTRÔLES À PARTIR DU BOUTON AJOUTER UN PROSPECT ........................................142
57PROTÉGER SON PROJET VBA..............................................................................................143
58 GRAPHIQUE ....................................................................................................................144
58.1CRÉATION D’UN HISTOGRAMME......................................................................................................144
59GRAPHIQUE ELABORÉ.........................................................................................................145
59.1PRÉSENTATION DES GRAPHIQUES...................................................................................................145
59.2 BOUTONS D'ACTIONS.................................................................................................................146
60GRAPHIQUE VBA..............................................................................................................146
60.1MODIFIER LE GRAPHIQUE.............................................................................................................146
60.2DÉFINIR UNE FEUILLE GRAPHIQUE...................................................................................................147
60.3MODIFIONS L'ORIENTATION 100 FOIS..............................................................................................147
60.4RÉSULTAT................................................................................................................................147
60.5ROTATION................................................................................................................................148
61ATELIER SUR UN PLANNING : PRÉSENTATION DU PROJET.............................................................149
61.1ATELIER SUR UN PROJET : CRÉER UN PLANNING...............................................................................150
61.2OBJECTIF DU PROJET..................................................................................................................150
61.3CRÉATION SUR PLUSIEURS PHASES.................................................................................................150
61.4PHASE 1 : CRÉATION DU PLANNING AVEC L'ENREGISTREUR..................................................................150
61.5DÉTAIL DE LA PROCÉDURE...........................................................................................................151
61.6SUITE DU DÉTAIL DE LA PROCÉDURE...............................................................................................152

6 déc 09 Réalisation : Luc Mersier 8/164


61.7SUITE DU PROJET ....................................................................................................................152
61.8OBJECTIF : MODIFIER UNE MACRO ENREGISTRÉE ...............................................................................152
61.9MODIFIER LA PROCÉDURE APRÈS L'ENREGISTREUR MACRO (MODULE 2)..................................................153
61.10SUITE DU PROJET MODIFIER LA MISE EN FORME.............................................................................154
61.11DÉTAIL DE LA PROCÉDURE (MODULE 3).........................................................................................155
61.12RÉSULTAT DE LA PROCÉDURE PLANNING COMPLÈTE .........................................................................156
61.13SUITE : RÉSULTAT DE LA PROCÉDURE PLANNING COMPLÈTE ..............................................................157
62GESTION DES ERREURS D'EXÉCUTION......................................................................................158
62.1GESTION DES ERREURS ..............................................................................................................158
62.2MÉTHODE ...............................................................................................................................158
62.3RÉSULTAT................................................................................................................................158
62.4SUITE : GESTION DES ERREURS D'EXÉCUTION...................................................................................159
62.5ACTIONS DE PROCÉDURES ON ERROR GOTO...................................................................................159
62.6GESTION DES ERREURS ..............................................................................................................159
62.7VOIR CHR (10).......................................................................................................................159
62.8VBYESNO ..............................................................................................................................159
62.9VBCRISTICAL ...........................................................................................................................159
62.10SUITE : GESTION DES ERREURS D'EXÉCUTION.................................................................................160
62.11OBJECTIF AVEC L'INSTRUCTION SENKKEYS....................................................................................160
62.11.1SenKkeys permettra de répondre à la place de l'utilisateur.......................................160
62.11.2L'argument {ENTER} simule l'appui sur la touche Entrée du clavier.
C'est donc le bouton OK qui est pris par défaut....................................................................160
62.11.3L'argument False indique à VB de ne pas attendre et de continuer la procédure. ....160
62.12SUITE : GESTION DES ERREURS D'EXÉCUTION.................................................................................161
62.13RÉSULTAT..............................................................................................................................161
62.14PERSPECTIVE.........................................................................................................................163
62.15ALTITUDE...............................................................................................................................163

6 déc 09 Réalisation : Luc Mersier 9/164


1 Consolidation des connaissances Excel
Référence colonnes lignes
• A faire
Outils / options et onglet Général : choisir réf : L1C1
=SOMME(A1:A2) =SOMME(L(-2)C:L(-1)C)
Ligne au-dessus –2 de la cellule ou il y a la
formule de calcul
=A6-B6 =LC(-2)-LC(-1)

2 Utilisation de l’enregistreur macros

2.1 Définir une référence absolue


A faire
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 absolue, c'est-à-dire que l’exécution est définie à
un endroit précis.
Saisir son Prénom et nom dans la cellule A1, Mettre
Projet en gras, Taille 18, Agrandir colonne
Procédure
Enregistrer votre classeur sous un nom.
Sélection de la cellule C1 : Menu Outils / Macro Nouvelle Macro.
Nom de la macro : Macro 1 / Dans enregistrer la macro choisir dans la liste : Ce classeur

Classeur de Si vous souhaitez qu'une macro soit disponible à tout moment


macros lorsque vous utilisez Microsoft Excel, cliquez sur Classeur de macros
personnelles personnelles pour stocker la nouvelle macro dans votre classeur de
macros personnelles.
Nouveau classeur Cliquez sur Nouveau classeur pour stocker la nouvelle macro dans
un nouveau classeur
Ce classeur Cliquez sur Ce classeur pour stocker la nouvelle macro dans le
classeur actif.
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

Arrêter l'enregistreur Macros


Barre d’outils :
Ou Outlis Macros Arrêt enregistreur
6 déc 09 Luc Mersier & Sylvie Condé 10/164
2.1.1 Résultat détaillé de la procédure en réf absolue

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

2.1.2 Fonction CHR


Si prompt occupe plus d'une ligne, n'oubliez pas d'insérer un retour chariot (Chr(13)) ou
un saut de ligne (Chr(10)) entre les lignes, ou une combinaison de caractères retour
chariot-saut de ligne (Chr(13) & Chr(10)) entre chaque ligne.

Sinom touche 8 et entrée

6 déc 09 Luc Mersier & Sylvie Condé 11/164


A faire
2.2 Définir une référence relative

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

Arrêter l'enregistreur Macros


Barre d’outils :
Ou Outlis Macros Arrêt enregistreur

2.2.1 Résultat détaillé de la procédure en réf relative

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

6 déc 09 Luc Mersier & Sylvie Condé 12/164


End Sub
2.3 Ajouter le code dans une procédure

2.3.1 Création d'une macro de mise en page


Objectif : Affecter cette macro dans une procédure

Sub mp()
'
' mf Macro
'
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = "Budget 2010"

End With
End Sub

2.3.2 Ajouter le code dans une procédure

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

6 déc 09 Luc Mersier & Sylvie Condé 13/164


3 Présentation de l'éditeur VB

A lire
3.1 Barre d'outils VB

Bouton Visual basic Editor


Permet d'ouvrir l'application VB
3.2 Présentation de l’éditeur VB

3.2.1 Le module
Elle affiche les procédures du classeur. Chaque module définit des procédures.

3.2.2 Code de procédure


Codes qui regroupent dans des blocs de procédure
Une procédure exécutant une tâche déterminée au sein d'un programme.
Une procédure Sub commence par une instruction Sub et se termine par une instruction
End Sub.

3.2.3 Les instructions


Les instructions sont des instructions adressées à Excel pour qu'il exécute des actions.
.
Exemple : CellullesActive formuleL1C1 = "Prévisions des ventes"

3.2.4 L'apostrophe
Permet d'ajouter des remarques dans les codes. Elles sont ignorées à l'exécution

3.2.5 Elément Public


Indique que la procédure Sub est accessible à toutes les autres procédures dans
l'ensemble des modules

3.2.6 Elément Privé


Indique que la procédure Sub n'est accessible qu'à d'autres procédures du module dans
lequel elle a été déclarée.

6 déc 09 Luc Mersier & Sylvie Condé 14/164


A lire

Arborescence de Propriété
(surtout pour
l'objet VB CODE de procédure
formulaire)
Feuilles avec les instructions
Module

Les apostrophes indiquent


des remarques (vert)

6 déc 09 Luc Mersier & Sylvie Condé 15/164


4 Sub. Evénementielle ou Sub indépendante Functions

A lire

4.1 Schéma

Classeur

Feuil1 Module1

Module 1

Proc Nom ( liste arguments )


Première Procédure
Proc Événementielles (macro) Fin Proc
Utilisation Fonctions ou
instructions
Première Procédure indépendante Fonction nom ( liste arguments )
Création fonction Fin fonction
Personnalisée

Procédure Fonction Retourne valeur


Procédure Instruction Exécution d’une action
Procédure Indépendante Ajoute une fonction perso dans F(x)

6 déc 09 Luc Mersier & Sylvie Condé 16/164


5 Modifier une macro dans l’éditeur VBA

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

5.5 Définition des Objets, Propriétés et Méthodes Collections


A lire

Objets
Classeur
Feuille
Plage de cellule
Range("A1:A5")

Propriétés Mise en forme


Format

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

5.5.1.1 Codes de la procédure

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

6 déc 09 Luc Mersier & Sylvie Condé 19/164


6 Point d’arrêt & Pas à pas

6.1 Pas à pas


Lorsque le code contient des boucles, il est très utile de suivre le déroulement du
programme ligne à ligne pour comprendre le déroulement du programme.
Procédure
Définir un point d’arrêt et pour continuer définir le pas à pas avec la touche F8
Pas à pas F8
6.2 Point d’arrêt
Lors de l'exécution d'une macro, le programme se déroule jusqu'à son terme
En phase de débuggage, il est utile de stopper le code afin d'étudier l'enchaînement des
lignes de code
Pour poser un point d'arrêt dans le code il faut positionner le curseur sur la ligne où nous
souhaitons un arrêt et cliquer sur l'icône de la main ou avec le raccourci F9

F9
Pour reprendre le déroulement de notre
programme F5

7 Ate lie r sur Enregistreur et modification

1) Objectif du projet : Ajouter contenu dans cellules avec mise en forme


Avec l'enregistreur
Sélection dela feuille 1 : clic dans la cellule A1 et saisir votre "Nom et Prénom" et
dans cellule B2 saisir "CA"
Cellule A1:B2 : définir une mise en forme "Gras" "Times New Roman" et "taille 16"
Cellules A1:B2 : définir un alignement centré et ajustement auto

Corrections dans l'éditeur


Supprimer les codes en trop
Regrouper les codes dans le With
Définir en réf relative la plage A1:B2 et
ajustement auto

6 déc 09 Luc Mersier & Sylvie Condé 20/164


8 Définition des Objets, Propriétés et Méthodes
Collections

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

Objet Worksheets représente la feuille de calcul contenant la plage spécifiée


Code : Worksheets("Sheet1")
Collection Sheets : Collection de toutes les feuilles dans le classeur actif ou spécifié

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

6 déc 09 Luc Mersier & Sylvie Condé 21/164


8.1 Création d’une macro à partir de l’éditeur VBA

Objectif du projet Sub


Mise en forme sur des cellules avec l’éditeur Visual Basic

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

8.1.1 Sub sur Objets


Sub Macroobjet() Procédure

Sheets("feuil1").select Les modifications s'appliqueront aux cellules


de cette feuille. Pas de liste sur propriétés
Sheets("feuil1")=objet
Point = instruction Select = méthode
ou méthodes car vous êtes dans une feuille.

Range("A1:B3").select La sélection de cette plage permet de mofier


le contenu de ces cellules.
Range("A1:B3").select
Instruction est suivi d'un point
Liste des propriétés ou méthodes
Propriétè

Méthode

8.1.2 Propriété (Mise en forme)


Démarche
1) Mettre du texte dans une plage de cellules
2) Définir une hauteur de 40 points

Range("A1:B3").formulaR1C1 = "VBA L’objet est défini par une propriété .formula


facile" amène une valeur dans une cellule.

Selection.rowheight = 40 sélection définit une réf relative.


La propriété suit de =
Réf relative Roweight définit en points la hauteur des
lignes

8.1.3 Méthode (Action) exécute


Démarche : L'action est de demander PrintPreview
Selection.PrintPreview L'action est de demander l'aperçu

Pour appliquer une méthode (action) à un objet, il suffit de les séparer


par un Point.
6 déc 09 Luc Mersier & Sylvie Condé 22/164
8.1.4 Détail des codes sur la procédures

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

6 déc 09 Luc Mersier & Sylvie Condé 23/164


9 Argu ments et Argu ments nommés

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)

On les sépare de la valeur de l'argument par les signes :=


Width = largeur : False indique faux pour l'ajustement
Les arguments sont séparés par des virgules.
Pour ajuster en fonction du contenu := True

Tester : attention l'aperçu doit être en fin de procédure


9.1.1 Aide
Dans les arguments, F1 permet de récupérer une aide contextuelle.

6 déc 09 Luc Mersier & Sylvie Condé 24/164


9.1.2 Detail de la procedure

01 exos macro.xls

Sub Macroobjet2()

Sheets("feuil1").Select
Range("A1:B3").Formula = "VBA facile"
Selection.RowHeight = 40

Range("A1:B3").AutoFormat xlRangeAutoFormatColor2, Width:=False


' selection.AutoFormat xlRangeAutoFormatColor2, Width:=False

Selection.PrintPreview
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 25/164


9.1.3 Exemples de Proc sur du Formatdate() et faire évoluer la Proc
Sub
Objectif du projet Réf Relative :
Selection.
Nous allons définir un format de date
Sub Formatdate()
Selection.NumberFormat = "dddd dd mmmm yyyy"
End Sub
Réf absolue :
 Ou définir plage de cellules F2:F10 Range().

Sub Formatdate_plage()
Range(“F2:F10”).NumberFormat = "dddd dd mmmm yyyy"
End Sub

 Ou Atteindre feuille 2 et la cellule B4

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

9.1.4 Exécuter une macro

Atelier
Facture

Alt F8

6 déc 09 Luc Mersier & Sylvie Condé 26/164


10 Procédure indépendante de type Function : Fx

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

10.1.1 Convertir du Dollar vers l’Euro


Function Dollar_euro(plage)
'Convertir dollar vers Euro, le nom de la macro doit
correspondre à la formule qui suit.
Dollar_euro = plage * 0 ,63
End Function

10.1.2 Convertir du € vers $

Function Euro_Dollar(plage)
'Convertir Euro vers Dollar
Euro_Dollar = plage * 0.89
End Function

11 Type Functions avec arguments

11.1.1 Objectif Calculer la TVA avec une nouvelle fonction

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

6 déc 09 Luc Mersier & Sylvie Condé 27/164


11.2 Diférence entre Formula et Formula R1C1
Références des cellules qui changent
Sub formules()
'Worksheets("feuil1").Range("A1").Formula = "=$A$4+$A$10"
Worksheets("feuil1").Range("A1").FormulaR1C1 = "=R[3]C+R[9]C"
End Sub
Attention Ce code est à mettre en début de la prcédure : Worksheets est une
collection d'objets (c'est le S qui l'indique)

11.3 Comparaison de deux Sub avec formules

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

12 Module VB : Aid e dans le module VB

12.1 Utilisation de l'aide


Ouvrir le VB
Alt F11.
Double clic sur un nom et F1

6 déc 09 Luc Mersier & Sylvie Condé 28/164


13 Création d’un menu

A faire
13.1 Afficher un nouveau menu
Personnaliser / Onglet commande / Catégories Nouveau Menu et glisser le dans la barre
de menu

13.1.1 Créer un Élément de menu personnalisé à partir du menudans la barre


menu

Personnaliser / Onglet commande / Catégories Macros et glisser Élément de menu perso


en dessous du menu

13.2 Affectation à une macro à un sous menu et donner un nom au menu


Clic droit sur le sous menu / affecter la macro et saisir le Non du menu

13.3 Supprimer
Alt Glisser.

6 déc 09 Luc Mersier & Sylvie Condé 29/164


14 Bouton dans barre d'outils

14.1 Ajouter une nouvelle barre d'outils


Personnaliser / Onglet Barres d'outils / Cliquez sur le bouton Nouveau
14.2 Ajouter un bouton et l'affecter à une procédure
Personnaliser / Onglet commande / Catégories Macros et glisser le bouton dans une barre
d'outils
Clic droit sur le bouton / Affecter une macros
15 Bouton de commande dans la feuille
Ouvrir Excel / Barre d'outils formulaires.
Sélection de l'icône bouton et tracer une zone.
Affecter une macro.
15.1 Remarque
Barre d ’outils formulaires (Bouton) : permet d'exécuter une procédure
Barre d ’outils commandes (Bouton de commande) : permet d'exécuter une action dans un
formulaire. Exemple dans une boîte de dialogue : OK
16 Bouton avec lien hypertexte
Insérer une nouvelle feuille et nommé là.
Saisir les titres
Pour créer le lien hypertexte, cliquez sur insérer un lien hypertexte, choisir emplacement
dans ce document et choisir le feuille.

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

Outils / Options / Sécurité

6 déc 09 Luc Mersier & Sylvie Condé 30/164


18 At el ier sur Objets - Propriétés - Méthodes

2) Objectif du projet : Ajouter contenu dans cellules avec mise en forme


Dans la feuil1 : envoyer dans la cellule A1 un contenu texte "Date"
Cellule A1 : définir une mise en forme "Gras" "Time new Roman" et "taille 16"
Cellule A2 : envoyer une formule Date =aujourdhui()
Cellules A2:A10 : définir un format de date
Largeur de colonne : ajustement auto
Finir dans la feuille 2 et dans la cellule A1
3) Aide
Aidez-vous de vos procédures précédentes.
Formule =aujourdhui() en Anglais =today()
Ajustement automatique : autofit

Sub premierTP() Sheets("Feuil1").Select


Objet Insruction. Méthode
Sheets("Feuil1").Select
Range("A1").Formula = "Date"
Range("A1").Formula = "Date"
Objet Instruction. Propriété
Range("A1").Select
With Selection.Font
With permet de regrouper les codes
.Bold = True
pour la mise en forme
.Name = "times new roman"
End With permet de finir
.Size = 16
End With

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"

6 déc 09 Luc Mersier & Sylvie Condé 31/164


19 Xlstart : Ouvrir Excel avec les procédures

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

19.2 Utilisation des commandes


Ouvrir la feuille qui contient les macros
Dans l’editeur VBA, sélection les codes
Copier et coller les dans l ‘éditeur d’un nouveau claseur
Enregistrer le classeur sous le nom classeur 1

Placer dans Xlstart


Déplacer le classeur pour le placer dans le dossier Xlstart
C:\Documents and Settings\Luc\Application Data\Microsoft\Excel\XLSTART
Tester

6 déc 09 Luc Mersier & Sylvie Condé 32/164


20 Recapitulatif des procédures

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

Function TTC(ht, tauxtva)


'Calcul le montant en TTC
TTC = ht * (1 + tauxtva)
End Function

Sub standard()
' Format standard
Selection.NumberFormat = "General"
End Sub

Function TTC(ht, tauxtva)


'Calcul le montant en TTC
TTC = ht * (1 + tauxtva)

End Function

6 déc 09 Luc Mersier & Sylvie Condé 33/164


21 Arc hitecture du Langage Visual Basic

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

6 déc 09 Luc Mersier & Sylvie Condé 34/164


22 Objets les plus utilisés

A lire Sub
22.1 Objet programmes Excel : APPLICATION

22.1.1 Fermer le programme Excel


Sub appli_quit()
Application.quit
End Sub

22.1.2 Masquer le programme Excel dans la barre des tâches


Sub appli_quit()
Application.visible = false
End Sub

22.1.3 Ouvir à partir d'Excel Word


Sub ouvrir_word()
Set ww = CreateObject("word.application")
ww.Visible = True
ww.documents.Add
End Sub

22.1.4 Appel procedure


Call nom de la macro
22.2 Les classeurs: Workbooks
Activeworkbook Désigne le classeur actif
Activeworkbook Désigne le classeur "classeur1.xls
Désigne le premier classeur ouvert 'si
Workbooks(1)
plusieurs classeurs sont ouverts)

22.2.1 Ajouter un nouveau classeur dans Excel


Sub ajout_add()
Workbooks.add
End Sub

22.2.2 Ouvre un classeur


Sub ouvre()
Workbooks.open("c:\mes ducuments\classeur1.xls")
End Sub

22.2.3 Enregistrer un classeur


Sub save()
Workbooks.saveas("c:\mes documents\classeur1.xls")
End Sub

22.2.4 Fermer un classeur


Sub close()
6 déc 09 Luc Mersier & Sylvie Condé 35/164
‘Fermer le classeur actif sans enregistrer les modifications
Workbooks("classeur1.xls").Close Savechanges : = False
End Sub

22.2.5 Protéger un classeur


Sub protection()
‘Luc étant le password
Workbooks("classeur1.xls").protect”Luc”,True , True
End Sub

22.2.6 Aperçu
Sub aperçu()
Workbooks("classeur1.xls").PrintPreview
End Sub

22.3 Les feuilles : Sheets

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.

22.3.1 Ajout une feuille dans un classeur


Sub ajout_feuille()
Atelier
Sheet.add
Facture
End Sub

22.3.2 Supprimer une feuille du classeur actif


Sub supprimer_feuille()
'supprime la feuil1
Sheets("Feuil1").delete
End Sub

22.3.3 Déplace une feuille dans le classeur


Sub déplace_feuille()
'Déplace la feuille 1 après la feuille 3
WorkSheets("Feuil1").move after : = Worksheets("Feuil3")

End Sub

22.3.4 Change le nom d'une feuille dans le classeur


Sub changenom_feuille()
' WorkSheets(1) ou ("feuil1") désignant la première feuille du classeur
WorkSheets("Feuil1").Name = "nouveau nom de la feuille"
6 déc 09 Luc Mersier & Sylvie Condé 36/164
End Sub

22.3.5 Copie une feuille dans un nouveau classeur


Sub copie_feuille()
Worksheets.Copy
End Sub
22.4 Cellule et plage de cellules : cells ranges

Les écritures concernant les cellules sont les suivantes

Cells Représente l'ensemble des cellules d'une feuilles


Cells(1,3) Désigne la cellule C1 : Ligne 1, colonne 3
Range("A1") Désigne la cellule A1
Range("A1:B10") Désigne plage de cellules A1:B10
Sélection Désigne la sélection courante (plage de cellules le plus souvent)
Activecell Désigne la cellule Active

22.4.1 Sélectionne les cellules de A1 à B10


Sub selection_cellule()
Range("A1:B10").select
End Sub

22.4.2 Efface le contenu et le format des cellules de A1 à B10


Sub Efface_cellule()
Range("A1:B10").clear
End Sub

22.4.3 Efface le contenu et le format de toutes les cellules de la feuille


Sub Efface_tout_cellule()
cells.clear
End Sub

22.4.4 Inscrit un contenu texte dans la cellule désignée


Sub inscrit_texte_cellule()
Range("A1").value = "ici le texte"
'Pour inscrire un contenu de type "texte" encadrer la par des guillemets
End Sub

22.4.5 Sélection de toute la feulle


Cells.Columns.AutoFit

6 déc 09 Luc Mersier & Sylvie Condé 37/164


Résumé

Sheets("1").Select Sélections de l' onglet "1"


Range("a1", "c5").Select Sélectionne la zone a1 à c5
Range("a1:c5").Select idem
Range("chiffres").Select sélectionne zone appelée "chiffres"
Application.GoTo
Sélectionne la cellule a1
Reference:="R1C1"
Application.GoTo
sélectionne les cellules a1 à b4
Reference:="R1C1:R4C2"
Sélectionne une zone
allant de la cellule courante
Application.GoTo
à la rangée +x et la colonne +y à partir de la
Reference:="RC:R[x]C[y]"
cellule courante. X et y peuvent sont entiers,
positifs ou négatifs
Application.GoTo Illustration de la ligne précédente: Si la cellule
Reference:="RC:R[2]C[3]" courante est A1, sélectionne la zone (A1:D2)

Application.GoTo
sélectionne zone appelée "chiffres
Reference:="Chiffres"

Sélectionne la cellule située à X rangée et Y


ActiveCell.Offset(X, Y).Select
Colonnes de la cellule active
Illustration de la ligne précédente: Si la cellule
ActiveCell.Offset(3, 1).Select
courante est A1, sélectionne la cellule B4
Sélectionne une zone de 2 rangées et 3
ActiveCell.Offset(X,
colonnes démarrant à la cellule située à X
Y).Range("a1:c2").Select
rangée et Y Colonnes de la cellule active
Sélectionne la rangée dans laquelle se trouve la
Rows(ActiveCell.Row).Select
cellule active
Rows(5).Select sélectionne la cinquième rangée
Rows("4").Select sélectionne la quatrième rangée
sélectionne la colonne dans laquelle se trouve la
Columns(ActiveCell.Column).Select
cellule active

6 déc 09 Luc Mersier & Sylvie Condé 38/164


22.4.6 Écriture dans une certaine cellule de la feuille active
Cette exemple va servir pour les références de colonnes et de lignes
La procédure qui suit, toute simple,
Cellule B4
Sub Test()
Cells(4, 2) = "Super"
End Sub
Écrit Super dans la 4ème ligne, 2ème colonne de la feuille courante du classeur courant.
En d'autres mots dans la cellule B4.

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 :

Sub Test() Précise la valeur à donner


Application.Cells(4, 2).Value = "Super" (aucune confusion)
End Sub

En fait, la propriété Value ne doit pas obligatoirement se préciser, car Excel imagine
(intelligemment) que nous voulons nous occuper du contenu.

22.4.7 Désigne une cellule par rapport à la cellule active

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

6 déc 09 Luc Mersier & Sylvie Condé 39/164


23 Organisation Projet dans l’Editeur VBA

A lire Diapo23

23.1 Organiser ses modules

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

23.3 Renommer ou Protection d'un Projet


Cliquez droit sur le projet
Sélection de Propriétés du projet
Onglet Protection et définir mot de passe
Sélection du module et dans propriétés
renommer Module1

6 déc 09 Luc Mersier & Sylvie Condé 40/164


24 Explorateurs d'objets Diapo24

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.

2 Résultats de votre recherche


3 Liste des objets disponibles dans Excel
4 Pour un objet sélectionné dans la partie gauche ou dans les résultats de recherche.
5 Aide

6 déc 09 Luc Mersier & Sylvie Condé 41/164


With permet de regrouper les codes
pour la mise en forme
End With permet de finir

24.1 Explorateur d'Objets Diapo25

24.1.1 Afficher l’Explorateur d’objets


 Par le menu [Affichage/Explorateur d’objets] ;
 Taper le raccourci clavier F2
 Cliquer sur le bouton de la barre d’outils

24.1.2 Masquer l’Explorateur d’objets


 Faire un clic droit dans sa fenêtre et sélectionner [Masquer]
 Cliquer sur la case de fermeture

24.1.3 Naviguer dans l’Explorateur d’objets

Projet
Rechercher un Bibliothèque
élément : SHEETS

Liste
Membres
Liste des
classes

Zone
Détails

Toutes bibliothèques Affiche tous les objets toutes bibliothèques confondues


MSForms Contient les objets accessibles dans la fenêtre UserForm
Contient les objets communs aux applications Office, tels
Office que l’objets Balloon représentant l’info-bulle du compagnon
Office
VBA Les objets y sont classés par thème.
Excel Contient les objets spécifique à Excel
Autres applications Contient les objets d’autres applications
Affiche les objets propres au projet, tels que les feuilles, les
Projets
modules de classe et les modules de code.

 La zone Classes et Membres


Sélectionner en premier la classe puis choisir dans la liste Membres l’objet qui
vous intéresse.
Vous pouvez sollicitez une aide très précieuse en cliquant sur le bouton aide de
la barre d’outils ou en appuyant sur F1.

Pour rechercher un objet il suffit de saisir le texte dans la zone de recherche et de


cliquer sur le bouton Rechercher.

6 déc 09 Luc Mersier & Sylvie Condé 42/164


24.1.4 Utilisation de l'aide dans l'explorateur d'objets Diapo26

Objectif
Recherche de l'aide sur la suppression d'une feuille.

Saisir Sheets

Sélection de la
ligne

Sélection de
Delete + F1

6 déc 09 Luc Mersier & Sylvie Condé 43/164


25 At el ier avec Exemples Maros

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

25.1.2 Objectif Sub ouvrir()


A partir d'un classeur ouvert nommé Luc, atteindre le classeur TOTO et revenir sur le
classeur Luc
A faire :
♦ Nommé un classeur TOTO.
♦ Définir la procédure.

Sub ouvrir()
' ouvrir Macro
' Ouvrir un classeur exemple luc

Workbooks.Open Filename:= " C:\Documents and settings\luc\Bureau\toto.xls"


Windows("Luc").activate
End Sub

25.1.3 SubObjectif Sub Insererfeuille


Objectif : Insérer une nouvelle feuille dans un classeur
Atelier
Sub Insererfeuille() Facture
' Insererfeuille Macro
' Insérer une nouvelle feuille dans un classeur
Sheets("Feuil1").Select
Sheets.Add
End Sub

25.1.4 Objectif Sub Ajuster_toutes_les_colonnes


A faire :
♦ Définir une procédure pour ajuster toutes les colonnes

Sub Ajuster_toutes_les_colonnes()
' Ajuster_toutes_les_colonnes Macro
Fichier :
Cells.Select
02 exos macros.xls
Cells.EntireColumn.AutoFit
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 44/164


25.1.5 Objectif : affiche formules et ajuster colonnes
A faire :
♦ Définir une procédure pour afficher les formules et ajuster les colonnes

Sub Affichageformules()
'Affiche les formules
ActiveWindow.DisplayFormulas = True

'Ajustement automatique de colonnes


Cells.Select
Selection.Columns.AutoFit
Range("A1").Select
End Sub

25.1.6 Objectif : enlève formules ajuster colonnes


A faire :
♦ Définir une procédure pour enlever les formules et ajuster les colonnes

Sub EnleverAffichageformules()
'Affiche les formules
ActiveWindow.DisplayFormulas = False

'Ajustement automatique de colonnes


Columns("A:IV").Select
Selection.Columns.AutoFit
Range("A1").Select
End Sub

25.1.7 Afficher feuille masquer


A partir d'un classeur ouvert, atteindre une feuille masquer

A faire
♦ Création de la procédure
♦ Créer un bouton

Sub affiche_feuil2()
Worksheets("feuil2").Visible = True
End Sub

25.1.8 Gestion des erreurs :


Objectif :
ActiveCell.Value renvoi une valeur = 35 dans la feuille Sheet1.
Exemple Affecte une réf = 35
Sub Affecte_valeur_avec_erreur()
'Erreur de nom de feuille : feuil1 sheet1
Worksheets("Feuil1").Activate
Range("a1").Select
ActiveCell.Value = 35
End Sub
6 déc 09 Luc Mersier & Sylvie Condé 45/164
25.1.9 Remplacer chaîne de caractères

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

6 déc 09 Luc Mersier & Sylvie Condé 46/164


Dossier : Récup fichier à
25.1.10 Récupérer les données d'un autre fichier fichier
Objectif
Nous devons récupérer les données du fichier fournisseurs.xls pour les copier dans le fichier
mise à jour.xls
Projet
Récupérer les données fournisseurs sur le classeur mise à jour
Ouvrir le fichier mise à jour et Copier les données de la colonne
Activer la fenêtre du fichier mise à jour et coller les données
Définir un format & Activer la fenêtre Fournisseurs pour la fermer et finir dans la
cellule A1
Date de mise à jour bloquante

Procédure : Ouvrir le fichier Mise à jour

Sub mise_à_jour_sur_fournisseurs()
'
' Récupérer les données fournisseurs dans le classeur mise à jour

'Ouvrir le fichier mise à jour


'Copier les données de la colonne
Workbooks.Open Filename:= "C:\Documents and
Settings\luc\Bureau\Fournisseurs.xls"
'Columns("A:N").Copy
Range("a1").select
Selection.CurrentRegion.select
Selection.copy
'Activer la fenêtre feuille 1du fichier mise à jour et coller les données
Windows("mise à jour.xls").Activate
Sheets(1).cells.Select 'Columns("A:N").select
ActiveSheet.Paste
Application.CutCopyMode = False 'enlève presse papier
'Définir un format
Columns("B:B").NumberFormat = "ddd mmm dd yyyy"

'Activer la fenêtre Fournisseurs pour la fermer et finir dans la cellule A1


Windows("Fournisseurs.xls").Activate
ActiveWindow.Close
Range("A1").Select

Range("m1").Formula = "=today()" 'indiquer une date de mise à jour


ActiveCell.Formula = "*dd/mm/yy" 'format avec * qui permet de bloquer la date

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

'Ouvrir le fichier Mise à jour


'Copier les données cellules A1:H5
Workbooks.Open Filename:= _
"C:\Documents and Settings\Administrateur\Bureau\Exos mj sept 08\Récupe
fichier à fichier\Fournisseurs.xls"
Range("A1:h5").Select
Selection.Copy
'activer la fenêtre du fichier mise à jour et coller les données dans A1:H5
Windows("mise à jour.xls").Activate
Range("A1:h5").Select
ActiveSheet.Paste

'Définir un format
Columns("B:B").NumberFormat = "ddd mmm dd yyyy"

'Activer la fenêtre Fournisseurs pour la fermer et finir dans la cellule A1


Windows("Fournisseurs.xls").Activate
ActiveWindow.Close
Range("A1").Select
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 48/164


25.1.11 Objectif : Convertir la cellule de gauche en Euro

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

6 déc 09 Luc Mersier & Sylvie Condé 49/164


25.1.12 AutoFill : Recopie formule et s’arrête à une cellule vide
Recopier la formule qui se trouve en cellule D2

A B C D Nous allons voir


1 Produits Quantité Prix Total .AutoFill(Destination, Type)= recopie formule
2 P1 10 55 .End(xlDown) = descend à la fin
3 P2 12 56 .Offset = déplace
4 P3 14 57
5 P4 16 58
6 P5 18 59
7 P6 20 60
8 P7 22 61
9 P8 24 62
10 P9 26 63
11 P10 28 64

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

‘End(xlDown) = End vers le bas. Ligne Colonne


End Sub
=Range("D2", Commence dans la cellule D2, selection de la
Range("B2").End(xlDown).Offset(0, 2)) cellule B2 et descend (Down) en se
postionnant dans la colonne D (offset(0,2)
Type:=xlFillDefault Excel détermine les valeurs et les formats
utilisés pour remplir la plage cible.

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

6 déc 09 Luc Mersier & Sylvie Condé 50/164


25.1.13 Calcu avec Insruction Set Instruction Objet
Set : Attribue une référence d'objet à une variable
Variable avec Instruction = à un objet : Set.valeurs = Réf de range =
objet [B1]
Objectif : calcul une somme automatique à la fin d'une colonne de valeurs
B Sub SommeAuto()
1 56
2 65 ‘Variables :
3 74 ‘Calcul le nombre de valeurs saisies dans la colonne
4 83
5 92 Set valeurs = Range("b1", [b1].End(xlDown))
6 101
7 110
8 581 ‘Déplacement à patir de B1
‘Se positionne sur la première cellule vide (End(xlDown)
'Possible de récuperer l'objet range en [B1].End...
Range("b1").End(xlDown).Offset(1, 0).Select
‘Applique la fonction avec plage de cellule au-dessus
‘Entrer la formule de calcul de la somme Avec fonction NB
ActiveCell.FormulaR1C1 = "=sum(R[-" & valeurs.Count &
"]C:R[-1]c)"
End Sub
Sub SommeAuto()
'Définir une instruction avec variable à [b1].End(xlDown)(cellule résultat)
partir d'un objet = B1 jusqu’à une
cellule vide

'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

6 déc 09 Luc Mersier & Sylvie Condé 51/164


25.1.14 Création d'un tableau
Tableau à réaliser 2bi
2
1 s
Nous allons voir
Est Ouest Sud Nord .Array = assemble ou regroupe
janv permet d'envoyer chaque valeur dans
févr chaque cellule
mars
Totaux 0,00 € 0,00 € 0,00 € 0,00 €

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"

'Régions en ligne : array (rang ou assemblé) permet d'envoyer chaque valeur


dans chaque cellule : ‘Le tableau est reconnu comme base de données.
Range("B3:E3").Value = Array("Est", "Ouest", "Sud", "Nord") 2
Range("B3:E3").HorizontalAlignment = xlCenter
Range("B3:E3").Select
With Selection.Font
.Bold = True 2bis
.Name = "times new roman"
.Size = 16
End With

'Format nombre "# ##0.00 €"dans les cellules B4:E7 3


‘Indiquer dans A7 Totaux Format Nombres
Range("B4:E7").NumberFormat = "# ##0.00 €"

'Nomme les cellules contenant les totaux


'Affecte une formule aux cellules nommées
Range("b7").Name = "Total1" 4
Range("total1").Formula = "=Sum(b4:b6)"

Range("c7").Name = "Total2" Formules


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
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)

Récapitulatif des dépenses de santé

Dépense totale à ce jour : 1 810,00

Dépenses par Assuré


Papa 400,00
Nouvelle saisie Maman 760,00
Mathilde 300,00
Antoine -
Bérénice 200,00
Autres… 150,00

Remboursement Remboursement Dépense


Date Objet Assuré Montant payé
Sécurité Sociale Mutuelle effective
12/12/1998 Consultation généraliste Papa 120,00 80,00 20,00 20,00
12/12/1998 Consultation généraliste Papa 120,00 80,00 20,00 20,00
12/12/1998 Consultation généraliste Papa 120,00 80,00 20,00 20,00
05/08/1999 Parapharmacie Gilbert 150,00 150,00
07/08/1968 Consultation généraliste Mathilde 250,00 100,00 50,00 100,00
10/08/1999 Consultation généraliste Papa 40,00 30,00 5,00 5,00
05/08/1941 Pharmacie Bérénice 400,00 200,00 100,00 100,00
07/08/1985 Pharmacie Bérénice 850,00 700,00 50,00 100,00
05/09/1995 Pharmacie Papa 540,00 201,00 54,00 285,00
04/05/1998 Pharmacie Mathilde 500,00 100,00 200,00 200,00
07/05/1985 Consultation spécialiste Maman 850,00 70,00 20,00 760,00
07/08/1985 Pharmacie Papa 450,00 300,00 100,00 50,00

Explication des Cellules nommées


DEP B14
Model Ligne masquée 13
TOPDEP Dépense total E3

Sub NewLine()
'Copie de la ligne 13 = (Model)
Application.Goto Reference:="MODEL"
Selection.Copy

'Se décale vers le bas à partir de la cellule A14 (DEP)


Range("DEP").Offset(1, 0).Select

'Insert au-dessus
Selection.Insert Shift:=xlDown

'Dans l'appli enleve le couper ou copier (presse papier)


Application.CutCopyMode = False
End Sub
6 déc 09 Luc Mersier & Sylvie Condé 53/164
27 Déclaration de variables

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

Dim Variable1 As Integer Variable1 comme 1234 Chiffres


Dim Variable1 As string Variable comme Chaîne de caractères
Dim Variable1 As Date Variable comme #22/06/2005
Par défaut texte ou chiffre = type variant
27.3 Variable permettant de stocker des valeurs

Types Types de valeur


Byte Entier de 0 à 255
Boolean True ou False (vrai ou faux)
Integer Nombre Entier de – 32 768 à 32 767
Long Entier
Single Valeur à virgule
Double Valeur à virgule
Currency Monétaire
Date
Object Objet graphique
String Chaîne de 0 à 2 millards caractères
Tout type de valeurs numériques ou chaîne de
Variant
caractères
Variable sans la déclarer, elle prend le type Variant
27.4 Déclaration des variables obligatoire
A lire
Si le paramètre du code est coché, il faut déclarer ses variables à chaque procédure.
Nous vous conseillons de ne pas cocher.
Menu Outils / Options onglet Editeur

6 déc 09 Luc Mersier & Sylvie Condé 54/164


27.4.1 Exemple sur le déclaration de variables
Objectifs
Déplace la ligne en-dessous et déplace la colonne à deux colonnes à droite

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

Erreur de format dans la variable


ColVar = 2 a la place ColVar = Texte

Objectifs Sub texte()


Déplace la ligne en-dessous à 3 Dim ligvar, colvar As Integer
lignes et déplace la colonne à deux
ligvar = 3
colonnes à droite pour envoyer du
texte colvar = 2
Selection.Offset(ligvar, colvar).Select
Selection.Formula = "logo"
End Sub

Objectifs Sub formule()


Sélection de la cellule A1 Dim ligvar, colvar As Integer
Déplace la ligne en-dessous
ligvar = 3
3 lignes et déplace la colonne
à 3 colonnes à droite pour colvar = 3
envoyer la formule Selection.Offset(ligvar, colvar).Select
A B C D E ActiveCell.FormulaR1C1 = "=sum(R[-2]C:R[-1]C)"
1 Produits Quantité Prix Total
2 P1 10 55 End Sub
3 P2 12 56
4 P3 SOMME(D2:D3)

6 déc 09 Luc Mersier & Sylvie Condé 55/164


27.5 Fonctions ou instruction avec des variables
A lire
Fonctions :
Elles retournent des valeurs, des résultats, son utilisation est identique à celles d'Excel.

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

6 déc 09 Luc Mersier & Sylvie Condé 56/164


27.7 Fonction Inpubox() "remplir un message"
Objectif A lire
Pour que la fonction soit reconnu, nous devons saisir un texte avec = avant la fonction.
Celui-ci apparaîtra dans le titre de votre boîte.
Exemple
Réponse = InputBox("Tapez votre nom", "Votre nom")
Cette fonction comprend des arguments, l'argument en gras est obligatoire
27.8 Syntaxe de la Fonction InputBox
=inputBox(Prompt,{Title], [Défaut],[Xpost],[Ypost],[HelpFile],[Context])As String
Élément Description syntaxe
prompt Expression de chaîne affichée comme message dans la boîte de dialogue. Si
prompt occupe plus d'une ligne, n'oubliez pas d'insérer un retour chariot
(Chr(13)) ou un saut de ligne (Chr(10)) entre les lignes, ou une combinaison
de caractères retour chariot-saut de ligne (Chr(13) & Chr(10)) entre chaque
ligne.
title Facultatif. Expression de chaîne affichée dans la barre de titre de la boîte de
dialogue..
default Facultatif.. Si l'argument default est omis, la zone de texte qui s'affiche est
vide.
xpos Facultatif. Expression numérique indiquant, la distance horizontale .
ypos Facultatif. Expression numérique indiquant, en twips, la distance verticale qui
sépare le haut de l'écran de la bordure supérieure de la boîte de dialogue. Si
l'argument ypos est omis, la boîte de dialogue est positionnée verticalement,
à environ un tiers de l'écran en partant du haut.
helpfile Facultatif. Expression de chaîne indiquant le fichier d'aide .
context Facultatif. Expression numérique indiquant le numéro de contexte.

27.8.1 Exemple InputBox

Sub input_suite_de_box()

'Boîtes de dialogue Input


MonNom = InputBox("Quel est votre nom ?", "Saisie du nom")

'Réponse MsgBox
MsgBox "Bonjour " & MonNom
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 57/164


28 L'instruction MsgBox()

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

MsgBox(prompt[, buttons] [, title] [, helpfile, context])


La syntaxe de la fonction MsgBox comprend les arguments nommés suivants :
Élément Description
prompt Expression de chaîne affichée comme message dans la boîte de dialogue.
buttons Facultatif. Expression numérique qui représente la somme des valeurs
indiquant le nombre et le type de boutons à afficher. Si l'argument buttons est
omis, sa valeur par défaut est 0.
title Facultatif. Expression de chaîne affichée dans la barre de titre de la boîte de
dialogue..
Helpfile Facultatif. Expression de chaîne indiquant le fichier d'aide à utiliser pour
fournir une aide contextuelle sur la boîte de dialogue. Si l'argument helpfile
est défini, l'argument context doit l'être également.
Context Facultatif. Expression indiquant le numéro de contexte attribué par l'auteur de
l'aide à la rubrique appropriée. Si l'argument context est défini, l'argument
helpfile doit l'être également.

6 déc 09 Luc Mersier & Sylvie Condé 58/164


Beep
28.1.1 Sub MsgBox "Bienvenue à la formation Excel VisualBasic ....
auto_open() Bonne chance"
End Sub
Beep
28.1.2 Sub MsgBox "Merci de votre participation ... A bientôt"
auto_close() End Sub
Objectif : Ouvrir le classeur avec un message et image
28.1.3 Open Sub auto_open()
Beep
MsgBox "Bienvenue à la formation Excel VisualBasic ....
Bonne chance"
ActiveSheet.Pictures.Insert("C:\Documents and
Settings\Elodie.PORTABLE\Mes documents\20050722-
147526-0.jpg").Select
Objectif : Avant de fermer le classeur, un message est une
28.1.4 Close image avec texte
Sub auto_close()
Beep
MsgBox "Merci de votre participation ... A bientôt"
ActiveSheet.Pictures.Insert("C:\Documents and
Settings\Elodie.PORTABLE\Mes documents\ 20050722-
147526-2.jpg").Select
MsgBox "Si vous continuer à travailler je vous offre une
carotte !"
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 59/164


28.1.5 Boîtes de dialogue donnant un résultat de Box
Cette fonction permet de saisir des informations.

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

Dim : Nombres entiers variables


Sub input_suite_de_box()
'Définir les variable
Dim Monprenom As String Fonction InputBox demande une
Dim MonNom As String valeur à l'utilisateur par une boîte de
Dim NomComplet As String dialogue (texte avant)

'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")
NomComplet = Monprenom & " " & MonNom 'Permet d'associé les deux éléments à la
réponse Instruction MSGBox fait apparaître
un message dans une boîte de
'Réponse MsgBox dialogue
MsgBox "Bonjour " & NomComplet, , "Merci"
End Sub

28.1.6 Test en modifiant la variabe


Définir une variable (String) comme Integer
(nombre entier)

6 déc 09 Luc Mersier & Sylvie Condé 60/164


28.1.7 Compte nbre de chiffres indiqués dans Box WorksheetFunction.CountIf
Objectif
Compte les chiffres que vous indiquer dans la boîte
de dialogue, à partir des cellules A2:A10 NB.SI()

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

‘Message dans la boîte de dialogue


MsgBox "la valeur " & valeur & " est présente " & nbre & " fois dans cette feuille"
End Sub

Instruction

28.1.8 Ajouter le résultat dans la feuille


Saisir avant le End Sub
Sheets(1).select
Range("A1").formula = "la valeur " & valeur & " est présente " & nbre & " fois dans cette
feuille"

28.1.9 Objectif : Titre dans le MSGBox


Par arguments
MsgBox "la valeur " & valeur & " est présente " & nbre & " fois dans cette feuille",
vbDefaultButton1, "Titre"

Ou arguments nommés
MsgBox "la valeur " & valeur_ & " est présente " & nbre & " fois dans cette feuille",
Title:="Titre"

6 déc 09 Luc Mersier & Sylvie Condé 61/164


28.1.10 NB.SI() avec variable < WorksheetFunction
Sub calcul_nombre()
Dim Valeur
Dim txt
Dim Nbre
'Dans une boîte dialogue indiquer un chiffre pour connaître combien il y en a
Valeur = InputBox("quelle est la valeur à compter ?", "Chiffre", 0)

'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

28.1.11 Utilisation de la SumIf (faire démo sur Excel sur Somme.Si)


Objectif : Permet de faire un calcul de la colonne 1 par rapport à la colonne 2

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

28.1.12 Ajouter le résultat du MSGBox dans la cellule A1


Ajouter Codeavent le End Sub

Range("a1").Formula = "la valeur " & comptage & " est présente " & nbre & " en
Résultat"
Cells.Columns.AutoFit 'Pour définir l'auto Fit

Autofit

6 déc 09 Luc Mersier & Sylvie Condé 62/164


29 Projet Facture avec doublons et Box

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

6 déc 09 Luc Mersier & Sylvie Condé 63/164


29.1.1 Détail des procédures

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)

'Renomme la feuille crée en automatique


Application.ActiveSheet.Name = InputBox("Nommez la nouvelle feuille", _
"Renommer", "Double de Facture")
'Indique juste une feuille
nb = nb + 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

6 déc 09 Luc Mersier & Sylvie Condé 64/164


30 Paramétrer la MsgBox

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

6 déc 09 Luc Mersier & Sylvie Condé 65/164


30.1 Création d’un MsgBox
Sub Message()
MsgBox "Bonjour. C’est une belle journée qui s'annonce !"
End Sub

30.2 Créer un message sur plusieurs lignes. Instruction VbCr

L’instruction VbCr génère un


saut de paragraphe

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.

6 déc 09 Luc Mersier & Sylvie Condé 66/164


30.4 Bouton commandes Non
Deux codes possibles

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

30.5 Bouton Annuler + Séléction d'un bouton par défaut

MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !", _
vbInformation + vbYesNoCancel + vbDefaultButton2

30.6 Ajouter un titre

MsgBox "Bonjour," & vbCr & vbCr & "c'est une belle journée qui s'annonce !", _
vbInformation + vbYesNoCancel + vbDefaultButton2, "Super MsgBox"

6 déc 09 Luc Mersier & Sylvie Condé 67/164


31 Chaînes de caractères

31.1 Majuscule avec la fonction Proper() = Exacte

Sub maj_fx_proper()

'Définir les variable


Dim MonTexte As String

MonTexte = InputBox("Saisir du texte ?", "Test")

'Réponse MsgBox avec le nombre de caractères

MsgBox "Le texte " & WorksheetFunction.Proper(MonTexte)


End Sub

31.2 Fonctions Ucase et Lcase


Objectif
Mettre en Majuscules ou Minuscules

Fonction Ucase Upper Case Majuscules


Fonction Lcase Lower Case Minuscule

Syntaxes

Il suffit d’ajouter la fonction avant le texte : Ucase(texte)

Modifier la procédure exemple : Sub input_messages_majuscule_ou_minuscules()


MsgBox "Bonjour " & UCase(NomComplet), vbInformation + vbOKOnly, "Merci"

6 déc 09 Luc Mersier & Sylvie Condé 68/164


31.3 Fonction Left
Permet de compter les caractères à partir de la gauche de la variable.
La Syntaxe : Left(Variable,n) Le n compte les caractères de la variable.
Exemple
Left("Mersier",4) On compte 4 caractères à partir de la gauche.(S)
31.4 Fonction Right
Permet de compter les caractères à partir de la droite de la variable.
La Syntaxe : Right(Variable,n) Le n est le dernier caractère de la variable.
31.5 Fonction Mid
Permet de compter les caractères à partir d'un endroit.
La Syntaxe : Mid(Variable,x,n) Le x définit le comptage à partir de l'endroit et le n compte.
Exemple
Mid("Mersier est",2,3) Sélection le 9ème caractère et fait un comptage de 3
31.6 Fonction Len
Renvoie la longueur d'une chaîne de caractères, c'est à dire le nombre de caractères
constituant un texte.
Espace ou ponctuation sont comptés.
Range("a1").Formula = UCase(Left(texte, 1)) & LCase(Right(texte, Len(texte) - 1))
31.7 Objectif : Indiquer le nombre de caractères
Sub input_Len_cpte_carac()
Majuscule Len
'Définir les variable
Dim MonTexte As String

MonTexte = InputBox("Saisir du texte ?", "Test")

'Réponse MsgBox avec le nombre de caractères

MsgBox "Le texte " & UCase(MonTexte) & " comporte " & Len(MonTexte) & "
caractères", vbInformation, " Nombre de caractères avec Len"

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 69/164


31.8 Fonctions Ltrim, Rtrim et Trim
Ltrim Supprime l'espace inutile à gauche
Rtrim Supprime l'espace inutile à droite
Trim Supprime l'espace inutile à gauche comme à droite
Syntaxe avec exemple
Trim(" Luc ")
Enlève tous les espaces.
31.9 Fonctions IsNull ou IsNuméric
IsNull Teste si une variable contient une donnée ou non
IsNuméric Contrôle si une variable contient du numérique
Syntaxe avec exemple
IsNumeric(variable)
31.10 Atelier sur chaînes de caractères

31.10.1 Mettre en majuscule le premier caractère des mots

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

MsgBox "Bonjour " & UCase(Left(PrénomComplet, 1)) &


LCase(Right(PrénomComplet, Len(PrénomComplet) - 1))

La variable PrénomComplet indique le prénom.


Len(PrénomComplet) - 1))
Renvoie la longueur d'une chaîne de caractères à partir du deuxième caractère -1

6 déc 09 Luc Mersier & Sylvie Condé 70/164


31.10.2 Boîte de dialogue qui envoie le contenu dans une cellule

Sub envoi_texte_box_vers_cellule()

'Boîtes de dialogue Input avec variables

texte = InputBox("Quel est votre nom ?", "Saisie du nom")

'Réponse MsgBox pour maj ou minuscule

Range("a1").Formula = UCase(Left(texte, 1)) & LCase(Right(texte, Len(texte) - 1))


End Sub

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

Monprenom = InputBox("Quel est votre prénom ?", "Saisie du Prénom")


MonNom = InputBox("Quel est votre nom ?", "Saisie du nom")
PrénomComplet = Monprenom 'variable sur le Prénom
Nomcomplet1 = MonNom 'variable sur le Nom
'Réponse MsgBox pour maj ou minuscule

Range("a1:a10").Formula = UCase(Left(PrénomComplet, 1)) &


LCase(Right(PrénomComplet, Len(PrénomComplet) - 1)) & " " & _
UCase(Left(Nomcomplet1, 1)) & LCase(Right(Nomcomplet1, Len(Nomcomplet1) -
1))
End Sub

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

6 déc 09 Luc Mersier & Sylvie Condé 71/164


6 déc 09 Luc Mersier & Sylvie Condé 72/164
Fichier :
32 Fonctions de dates 02 exos macros.xls

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

32.1.1 Fonctions de contenu :

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

6 déc 09 Luc Mersier & Sylvie Condé 73/164


03 Exos macros VBA language
33 If Then Else() = Instruction de décision

Sub
33.1 Objectif de la procédure
Saisir l'année du dossier pour une recherche son le lieu.

If …Test Logique Vrai Then Faux Else


Année>=1996 Le bureau La cave

Sub conditionIF()

Année = InputBox("Saisir l'année du dossier : Exemple 2009")


If Année >= 1996 Then
lieu = "le bureau"
Else
lieu = "La cave"
End If
MsgBox "Le dossier est dans " & lieu
End Sub

33.1.1 If Then Else (Imbriqué avec ElseIF)


If Then Else (Imbriqué avec ElseIF)
Test Logique If Vrai Then Faux Sinon Else
si Année >= 1996 Le bureau
ElseIF Année >= 1990 La biblio
La cave

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

33.1.2 Ajouter le résultat dans la feuille avec Majuscule Ajouter résultat


dans la cellule
Ajouter la ligne de code :
Range("a1").formula = UCase(Left(lieu, 1)) & LCase(Right(lieu,
Len(lieu) - 1))
'Lieu est représenté dans le IF

6 déc 09 Luc Mersier & Sylvie Condé 74/164


03 Exos macros VBA language
34 Select_C ASE

34.1 Objectif de la procédure : Renvoi un message en fonction d'une valeur


Pourquoi choisir l'instruction de décision CASE au lieu de l'instruction IF
Elle simplifie l'instruction IF quand on utilise plusieurs ELFSELF

34.1.1 Détail de la Proc Select CASE


SelectCase expression numérique ou chaîne
Sub Select_Case
Case liste d'expression
Case Else Instruction (SINOM)
34.1.1.1 Objectif :Renvoi un message en fonction d'une valeur
0à6= Bonne nuit
A7= Bonjour Case 8 to 12
De 8 à 12 = Bonne matinée Pour indiquer ou (virgule)
De 13 à 18 = Bonne après midi Case 8 , 12
Sinom = Bonne soirée

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

6 déc 09 Luc Mersier & Sylvie Condé 75/164


35 At el ier Box & If

35.1 Projet sur questionnaire

35.1.1 Procédure

Sub questionnaire() Attention


Appel de procédure
Call tableau_questionnaire

Question = InputBox("Le centre de formation à été ouvert en ? 1986, 1995, 2000")


If Question <> "1986" Then
Réponse = "Mauvais Résultat"
Else
Réponse = "Bon Résultat"

End If
MsgBox " Votre réponse est un " & Réponse

If Réponse = "Bon Résultat" Then


Range("a2").Formula = 1
Else: Réponse = "Mauvais Résultat"
Range("b2").Formula = 1
End If

Question = InputBox("Quel est le prénom de votre Formateur ?")


If Question <> "Luc" Then
Réponse = "Mauvais Résultat"
Else: Réponse = "Bon Résultat"
End If
MsgBox " Votre réponse est un " & Réponse
If Réponse = "Bon Résultat" Then
Range("a3").Formula = 1
Else: Réponse = "Mauvais Résultat"
Range("b3").Formula = 1
End If

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 76/164


Sub tableau_questionnaire()
'Régions en ligne : array (rang ou assemblé) permet d'envoyer chaque valeur dans
chaque cellule : 'Le tableau est reconnu comme base de données.
Range("A1:B1").Value = Array("Bonne réponse", "Mauvaise Réponse")
Range("A1:B1").HorizontalAlignment = xlCenter
Range("A1:B1").Select
With Selection.Font
.Bold = True
.Name = "Arial"
.Size = 14
End With

'Format nombre "# ##0"dans les cellules A4:b4

Range("A4:b4").NumberFormat = "# ##0"


Range("A4:b4").Select
With Selection.Font
.Bold = True
.Name = "Arial"
.Size = 14
End With

'Calculs des totaux

Range("A4").Formula = "=Sum(A2:A3)"
Range("B4").Formula = "=Sum(B2:B3)"

Cells.Columns.AutoFit

Range("A1:b4").Borders.LineStyle = xlContinuous

End Sub

35.1.2 Ajout de procédures sur Bouton OK NO


Ajouter en début de la procédure Sub questionnaire()
Titre = "Questionnaire"
Question = "Voulez-vous répondre aux questions ?"
boutons = vbYesNo

'Affiche de la première boîte de message


demande = MsgBox(Question, boutons, Titre)

'Si l'utilisateur à cliqué sur Annuler, sortir de la procédure


If demande = vbNo Then Exit Sub

'Si l'utilisateur à cliqué sur oui, alors


If demande = vbYes Then
End If

6 déc 09 Luc Mersier & Sylvie Condé 77/164


35.2 Atelier : Affiche d'une boîte de dialogue proposant plusieurs choix

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()

'définir les variables relatives aux arguments de fa fonction MsgBox


titre = "Luc"
Question = "Voulez-vous saisir votre date de naissance ? "
boutons = vbYesNoCancel + vbQuestion

'Affiche de la première boîte de message


réponse = MsgBox(Question, boutons, titre)

'Si l'utilisateur à cliqué sur Annuler, sortir de la procédure


If réponse = vbCancel Then Exit Sub

'Si l 'utilisateur à cliqué sur oui, alors


If réponse = vbYes Then

'affichage de la boîte de message demandant la date de naissance


DateNais = InputBox("Saisissez votre date de naissance:", titre, 0)
'Envoyer la réponse dans la cellule A4, variable DateNais
Range("a4").Formula = DateNais
'Sinon
Else
'Affichage de la boîte de message demandant la tranche d'âge
TrancheAge = InputBox("Saissisez votre tranche d'âge :", titre, "")
'Envoyer la réponse dans la cellule A4, variable TrancheAge
Range("a4").Formula = TrancheAge

End If
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 78/164


35.3 Création d'un classeur et renommer la feuille (InputBox)
Objectif
La procédure va créer un classeur dans un dossier et nous allons renommer la feuille
Sub envoyer_autre_classeur()
'
' Envoyer une feuille avec contenu dans un nouveau classeur

'Définir sur objets


Range("A1:E20").Select
Sheets("Feuil1").Select
Sheets("Feuil1").Copy
'Choisir un dossier puis save sous format xlnormal
ChDir " C:\Documents and Settings\luc\Bureau\luc"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\luc\Bureau\luc\copieavril.xls", FileFormat:= _
xlNormal
Sheets("Feuil1").Select
'Renommer la feuille
Application.ActiveSheet.Name = InputBox("Nommer la feuille", "Renommer")
End Sub

35.4 Création d'un classeur avec InpuBox et renommer la feuille

Sub envoyer_autre_classeur_msg()
'
' 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
infofichier = InputBox("Saisir le nom du fichier")

ActiveWorkbook.SaveAs infofichier, FileFormat:=xlNormal

Sheets("Feuil1").Select
'Renommer la feuille
Application.ActiveSheet.Name = InputBox("Nommer la feuille", "Renommer")
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 79/164


Sélection d'un classeur avec InputBox
Donner un nom au classeur
Renommer la feuille ou les feuille

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", "")

infofichier = InputBox("Saisir le nom du fichier")

ActiveWorkbook.SaveAs infofichier, FileFormat:=xlNormal


Sheets("Feuil1").Select
'Renommer la feuille
Application.ActiveSheet.Name = InputBox("Nommer la feuille", "Renommer")
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 80/164


36 Boucle FOR…NEXT

03 Exos macros VBA language


36.1 Instructions de boucles FOR NEXT (Compteur)
La boucle numérique For...Next incrémente un compteur (variable) et effectue une suite
d'instructions jusqu'à ce que le compteur atteigne une valeur limite.
Une boucle For ... Next nous oblige à connaître à l'avance la limite de notre traitement,
sauf si nous définissons une variable de fin.

Exemple
nbFeuilles = Sheets.Count

For Feuille = 1 To nbFeuilles

Une boucle s'avère necessaire lorsque que vous


souhaitez qu'une même action soit répêtée
Un certain nombre de fois For…Next
Tant qu'une condition est remplie Do…While …Loop
Jusqu'à ce qu'une condition soit remplie Do…Until…Loop

Syntaxe FOR…. NEXT

FOR variable = début TO fin STEP incrément instructions


Next permet de compter le suivant

La variable compteur va passer de la valeur de début à la valeur de fin et incrémente


à chaque boucle (passage).

Si Step n’est pas précisé, l’incrément prend la valeur par défaut 1

La variable Step (Pas) indique la valeur de l'incrémentation du compteur après chaque


nouveau passage dans la boucle.

Résultat : For i = 0 To 5

6 déc 09 Luc Mersier & Sylvie Condé 81/164


36.1.1 For i Next avec Remplissage d'une grande zone
Ainsi, grâce à cette méthode, nous avons la possibilité de remplir une grande zone, avec
l'instruction de programmation For To Next, comme ceci :
Exemple

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"

36.1.2 For i Next avec STEP


Définir un pas de deux

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"

6 déc 09 Luc Mersier & Sylvie Condé 82/164


03 Exos macros VBA language
36.1.3 For…Next
Objectif : Mettre un format dans cellule vide, le format s'applique automatiquement lors de
la validation de la saisie
♦ La cellule se déplace à partir de la cellule B4 de O à 5, le déplacement en ligne = 0
(0 , 1) en colonne = 1, c'est-à-dire a droite.
♦ ajoute un format monétaire dans les cellules.
Nous allons utiliser l'instruction Offset(rows, culumn) qui permet de déplacer.
Offset(rows 0 veut dire pas de déplacement, culumm 1 vers la droite)
Sub format()
'Sélection de plage de cellule partir de B4 For I
Range("B4").Select variable
'Syntaxe de For compteur I = début To et Fin step
For i = 0 To 5
'Nous définissons un format monétaire et le déplacement ligne et colonne
Selection.NumberFormat = "#,##0.00 €"
ActiveCell.Offset(0, 1).Select
Next i 1 cas : Nous renseignons à partir
End Sub de F4 le format est perdu
2 cas : Nous renseignons à partir
de B4 le format est gardé

36.1.4 For…Next avec une condition


• 'Sélection de plage de cellules à partir de B4 avec compteur de 0 à 5
• 'S'il rencontre un format numérique, alors mise en forme du format des nombres
• ‘Sinon Message boîte de dialogue. Indiquer le déplacement
Sub boucle_test_cellule_vers_bas()
'Sélection de plage de cellule partir de B4
avec compteur de 0 à 5
Range("B4").Select
For i = 0 To 5
'S'il rencontre un format numérique, alors
format des nombres
If IsNumeric(ActiveCell) Then
Selection.NumberFormat = "#,##0.00 €"
'Sinom
Else
MsgBox "ce n'est pas du numérique"
End If
'Déplacement se fait en col : (1 , 0) 1 : ligne 0 :
colonne
ActiveCell.Offset(1, 0).Select
Next i
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 83/164


37 Boucle avec condition : DO WHILE LOOP

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)

37.1.1 Difference entre : Do While…Loop et Do Loop…While


Avec Do While…Loop, la condition est située en début de la boucle
Avec Do Loop…While, la condition est située à la fin.

Instruction DO = Faire (Effectuer, faire les actions qui suivent)


Boucle LOOP = Boucle (Faire une boucle, recommencer la boucle)
Condition = Tant que c’est faux
Condition WHILE La réponse est <>

37.2 Syntaxe de l'instruction Do While…Loop:


Do [{While} condition] [statements] [Exit Do] [statements]
Loop Utiliser à la place
If Then

É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.

6 déc 09 Luc Mersier & Sylvie Condé 84/164


37.2.1 Instruction DO While suivi de Loop

04 Exos boucles do… Sub


La condition s'arrête à la fin

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()

' Démarre à partir de B4


Range("B4").Select

'Fait Tant qu'il ne trouve pas de vide


Do While Not IsEmpty(ActiveCell)

'Définit une mise en forme de déplace


If IsNumeric(ActiveCell) Then
Selection.NumberFormat = "#,##0.00 €"
'Sinom
Else
MsgBox "ce n'est pas du numérique"
End If
'Déplacement se fait en col : (1 , 0) 1 : ligne 0 : colonne
ActiveCell.Offset(1, 0).Select
Loop
End Sub

37.2.2 Comparaison For I et Do While


Une boucle For ... Next nous oblige à connaître à l'avance la limite de notre traitement,
avec la boucle Do While ce n'est pas le cas.

6 déc 09 Luc Mersier & Sylvie Condé 85/164


38 La boucle Do…Until…Loop

Condition Until = Vraie


A lire
Do =Faire Loop = Boucle Condition Until = Tant que c’est vraie
Si la ou les conditions deviennent vraies, l'excécution du programme se poursuit.

38.1 Les boucles DO, UNTIL LOOP


A lire
Dans un programme, il est souvent nécessaire de répéter une ou plusieurs actions jusqu'à
ce que quelque chose se passe, ou tant que quelque chose ne s'est pas passé. c'est à
dire que la condition soit remplie.

Instruction DO = Faire (Effectuer, faire les actions qui suivent)


= Jusqu'à ce que (Jusqu'à ce que X = 10, ou Jusqu'à ce que le mot
UNTIL de passe soit correct)
Condition La réponse est exacte=
Boucle LOOP = Boucle (Faire une boucle, recommencer la boucle)
38.2 Syntaxe de l'instruction Do…Until…Loop:
Do [{Until} condition] [statements] [Exit Do] [statements]

É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.

6 déc 09 Luc Mersier & Sylvie Condé 86/164


38.2.1 Exo avec Instruction DO Until suivi de Loop

04 Exos boucles do… Sub


La condition s'arrête à la fin

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()

' Démarre à partir de B4


Range("B4").Select

'Fait Dés qu'il ne trouve du vide


Do Until IsEmpty(ActiveCell)

'Définit une mise en forme de déplace


If IsNumeric(ActiveCell) Then
Selection.NumberFormat = "#,##0.00 €"
'Sinom
Else
MsgBox "ce n'est pas du numérique"
End If
'Déplacement se fait en col : (1 , 0) 1 : ligne 0 : colonne
ActiveCell.Offset(1, 0).Select
Loop
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 87/164


39 Instruction Exit Do
Permet de sortir de façon anticipée de la procedure
Remarques
Vous pouvez placer autant d'instructions Exit Do que vous le souhaitez dans une
instruction Do…Loop, afin de sortir de la boucle. Souvent utilisée dans l'évaluation d'une
condition (notamment If…Then), l'instruction Exit Do passe la main à l'instruction qui suit
immédiatement l'instruction Loop.

39.1.1 Boucle Exit Do

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()

'cellule active = vide avec Until


Do Until ActiveCell = ""
Selection.Interior.Color = RGB(255, 0, 0)
If ActiveCell > 5000 Then Exit Do
ActiveCell.Offset(1, 0).Select
Loop

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 88/164


40 At el ier avec For…Next

40.1 Procedure d'un tableau avec format


Sub tableau()
Dim i As Integer
Dim regions

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

'Format des cellules


Range("B4:E7").NumberFormat = "# ##0.00 €"
Range("a7").Value = "Totaux"

'Nomme les cellules contenant les totaux


'Affecte une formule aux cellules nommées
Range("b7").Name = "Total1"
Range("total1").Formula = "=Sum(b4:b6)"

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

6 déc 09 Luc Mersier & Sylvie Condé 89/164


40.2 Compare le contenu du tableau 1 et le tableau 2 avec fx UBound

03 Exos macros VBA language Sub


Nous allons utiliser la fonction UBound, qui renvoie une valeur de type Long pour tableau.
La fonction UBound est utilisée avec la fonction LBound pour déterminer la taille d'un
tableau.
Syntaxe : UBound(arrayname[, dimension])
arrayname Nom de la variable de tableau.
dimension Facultatif. Donnée de type Variant (Long). Nombre entier définissant la
dimension dont la limite supérieure est renvoyée. Utilisez 1 pour la première
dimension, 2 pour la deuxième, etc. Si l'argument dimension est omis, la valeur supposée
est 1.

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

'Définit la dimension du tableau sur les variables


nombreA = UBound(tableauA) Fonction qui Limite la largeur
nombreB = UBound(tableauB) Reprend les varaibles au-dessus
'Se placer en E1
Range("E1").Select

'Compteur avec variable I = 1 to variable nombreA : 2 compteurs


For i = 1 To nombreA
For J = 1 To nombreB

‘TableauA(I indique le compteur, le 1 represente la réf de départ)


If tableauA(i, 1) = tableauB(J, 1) Then

‘Définit la comparaison du tableau 1


ActiveCell.Value = tableauA(i, 1)
ActiveCell.Offset(1, 0).Select

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()

Set Travail = Application.FileSearch


With Travail
réponse = InputBox("classeurs dont le nom commence par :" & "cliquez sur OK pour
obtenir tous les classeurs ", "première lettres ", "")
.LookIn = "C:\data"
.Filename = réponse & "*.xls"
If .Execute > 0 Then

For i = 1 To .FoundFiles.Count

'Ouvrir le classeur concerné ?


If MsgBox("Désirez vous ouvrir " & .FoundFiles(i), vbYesNoCancel) = vbYes Then
Workbooks.Open (.FoundFiles(i))

End If
Next i
Else
MsgBox "pas de fichier "
End If
End With
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 91/164


40.4 Actualiser un tarif (For avec variable)
Objectif
Créer une macro qui applique une augmentation/minoration de tarif
Ajoute une colonne et définir le taux

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"

'Après saisie du taux à appliquer, calculer le nombre de valeurs saisies dans la


colonne Prix
taux = InputBox("Quel est le taux à appliquer ? ", "Taux", 0)
'variables sur objet PrixArticles
Set PrixArticles = Range("C2", [C2].End(xlDown))

'variable qui cpte les valeurs PrixArticles


nbreval = PrixArticles.Count

'A partir de C2 créer une Boucle mettant à jour chaque cellule de la plage Prix
Range("C2").Select

For cpt = 1 To nbreval


ActiveCell.Value = ActiveCell.Value * (1 + taux / 100)
ActiveCell.Offset(1, 0).Select
Next cpt

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 92/164


40.5 Actualiser un tarif en fonction d'un critère (For + If)

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

'Calcul le nombre d'articles


Set Fournisseurs = Range("A4", [A4].End(xlDown))
nbrFourn = Fournisseurs.Count

'Saisir le nom du fournisseur ainsi que le taux à appliquer


Fournisseur = InputBox("Quel est le fournisseur concerné par l'augmentation ? ",
"Fournisseur", "")
taux = InputBox("Quel est la taux à appliquer ? ", "taux", 0)
Range("A4").Select
'Pour chaque, si le fournisseur correspond à celui qui à été saisi = augmentation
For cpt = 1 To nbrFourn
'Est_ce le fournisseur concerné ?
If ActiveCell.Value = Fournisseur Then
'Si oui, se déplacer de 2 colonnes vers la droite pour appliquer l'augmentation
ActiveCell.Offset(0, 2).Range("a4").Select
ActiveCell.Value = ActiveCell.Value * (1 + taux / 100)

'Revenir dans la colonne A


ActiveCell.Offset(1, -2).Range("a4").Select
End If
'Passer à la ligne suivante
ActiveCell.Offset(1, 0).Range("a4").Select
Next cpt

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 93/164


40.6 Renommer un onglet : Dim…As / For…Next

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

Dim NomFeuille As String


Dim Feuille As Integer
nbFeuilles = Sheets.Count

For Feuille = 1 To nbFeuilles

'Sélectionne la feuille numéro Feuille


Sheets(Feuille).Select

'Stocke le contenu de B1 dans la variable NomFeuille


NomFeuille = Range("B1")

'Modifie le nom de l'onglet


ActiveSheet.Name = NomFeuille
Next

End Sub

40.6.1 Boucle sur En-tête

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

6 déc 09 Luc Mersier & Sylvie Condé 94/164


41 At el ier avec DO WHILE LOOP
04 Exos boucles do…
41.1 Supprimer lignes sur des valeurs <=10%
A partir de la première cellule, il compare la valeur du pourcentage, puis supprime la ligne
ou la valeur est <=10%

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

Do While ActiveCell <> “” Cette ligne sera supprimer

If ActiveCell.Value <= 0.1 then


Selection.entireRow.Delete
Else
ActiveCell.Offset (1,0).select
End If

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()

'Détermine le dernier n° de ligne du tableau


fin = ActiveSheet.UsedRange.Rows.Count
Range("a1").Select

'Positionnement du curseur sur la dernière ligne


ActiveCell.Offset(fin - 1, 0).Range("a1").Select

'Suppression de chaque ligne vierge en partant de la dernière ligne du tableau


Do While ActiveCell.Row() <> 1

If ActiveCell.Value = "" Then


ActiveCell.EntireRow.Cells().Select
Selection.delete shift:=xlUp

End If

'Remonte d'une ligne


ActiveCell.Offset(-1, 0).Range("a1").Select
Loop
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 95/164


41.3 Insert et renommer Feuilles (Dim / Do While…loop)
Macro permettant de demander nb feuilles et de renommer chaque feuille.
Utilisation : Dim / Do While…loop
Sub InsererFeuilles()
'macro qui permet de demander nb feuilles et de renommer
chaque feuille.
Variable
Dim nb As Integer Important
nb = 1
NbreTotal = InputBox("saisir le nombre de feuilles à créer", _
"Nombre", 1)
'Effectue nb <= au nbre total indiquer dans inpubox
Do While nb <= NbreTotal Ne pas mettre la
variable et utilisation
'Ajoute la feuille après la dernière du classeur dans l'éditeur de
Application.Sheets.Add After:=Sheets.Item(Sheets.Count), _ l'espion
Type:=xlWorksheet ""
'Renomme la feuille crée
Application.ActiveSheet.Name = InputBox("Nommez la
nouvelle feuille", _
"Renommer", "")
nb = nb + 1
Loop
End Sub
41.4 Ajouter un format num dans colonne
Objectif
Dans l’exercice (page 46) précédent (copier les données du fichier fournisseurs), nous
allons convertir une colonne en numérique

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

6 déc 09 Luc Mersier & Sylvie Condé 97/164


43 Utilisation d'instructions For Each...Next

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

For Each element In group


[statements]
[Exit For]
[statements]
Next [element]
La syntaxe de l'instruction For...Each...Next comprend les éléments suivants :
Élément Description
element Variable utilisée pour être répétée sur tous les éléments d'une
collection ou d'un tableau. Dans le cas d'une collection, la variable
element peut uniquement être une variable de type Variant, une
variable objet générique ou toute variable objet spécifique. Dans le cas
d'un tableau, il peut uniquement s'agir d'une variable de type Variant.
group Nom d'une collection ou d'un tableau d'objets (à l'exception d'un
tableau de type défini par l'utilisateur).
statements Facultatif. Une ou plusieurs instructions exécutées pour chaque
élément d'un group.

La différence entre For Each et For Next


Vous n'avez pas besoin d'indiquer le nombre de fois que devra exécuter la boucle, le VBA
le fait pour vous.

6 déc 09 Luc Mersier & Sylvie Condé 98/164


43.2 Définir un taux de conversion
Sub Valeur() Sans Coversion Avec conversion
Dim nombres as Range 12 2,4
Taux =InputBox("Entrez le taux de 14 2,8
16 3,2
conversion","conversion")
18 3,6
For Each nombres In Selection 20 4
Nombres.value = Nombres.value / taux 22 4,4
Next 24 4,8
End Sub 26 5,2
28 5,6
30 6
Utilisation ; Sélection des cellules à
Sur Valeurs convertir et envoyer la macro

43.3 Afficher toutes les feuilles


Sub affiche_toutes_les_feuilles()
For Each Sheet In Sheets
Sheet.Visible = True
Next Sheet
End Sub
43.4 N'imprime pas la feuille toto
Sub Workbook_Print()
'Le test s'effectue sur toutes les feuilles sélectionnées
For Each Feuille In ThisWorkbook.Windows(1).SelectedSheets
'si une feuille porte le nom "toto"
If Feuille.Name = "Toto" Then
'on imprime pas
Cancel = True
'et on sort de la procédure
Exit Sub
End If
Next
End Sub
43.5 Convertir du texte en numérique 04 Exos boucles do…
Sub Conversion_texte_vers_num() Tester la procedure
'Si erreur (type texte), on continue Il faut récuperer des données en format
On Error Resume Next texte
'variable Avec Access ou BO, nous pouvons
Dim Cellule As Range récupere en format de texte sur Excel
'Boucle sur toute la sélection en cours Manipulation :
For Each Cellule In Selection Selection des données et utiliser la macro
'On multiplie par 1 la valeur trouvée prix prix
12 12
Cellule.Value = Cellule.Value * 1
44 44
Next 2222 2222
End Sub 2255 2255

6 déc 09 Luc Mersier & Sylvie Condé 99/164


43.6 Mise en forme conditionnelle avec couleur (For Each)

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()

Dim plage As Range


Range("a3").CurrentRegion.Select 'liste zone en cour
Set plage = ActiveSheet.UsedRange 'plage utilisé

For Each plage In Selection


Select Case plage.Value
Case Is <= 500
plage.Interior.ColorIndex = 3 'rouge
Case 501 To 1000
plage.Interior.ColorIndex = 6 'jaune
Case 1001 To 5000
plage.Interior.ColorIndex = 4 'vert
Case 5001 To 10000
plage.Interior.ColorIndex = 7 'magenta
Case Is > 10000
plage.Interior.ColorIndex = 8 'cyan
End Select
Next plage
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 100/164


43.6.1 Mettre la 1ère lettre en Majuscule
Objectif
Transformer le texte des cellules sélectionnées en mettant la 1ère lettre en majuscule et le
reste en Minuscule
Sub Majuscule1Lettre()
'Si erreur, on continue
On Error Resume Next
Dim Cellule As Range
'Boucle sur toutes mes cellules de la selection
For Each Cellule In Selection
Cellule = UCase(Left(Cellule, 1)) & LCase(Right(Cellule, Len(Cellule) - 1))
Next
End Sub
Remarques :
UCase(Left(Cellule, 1)) & LCase(Right(Cellule, Len(Cellule) - 1))
'Mettre en majuscule (UCase) la 1ère lettre à Gauche (Left) et en minuscule (LCase)
tous les caractères -1 (Len(Cellule) - 1) à partir de la droite (Right). Concerne
uniquement la 1ère lettre du 1er mot

6 déc 09 Luc Mersier & Sylvie Condé 101/164


44 An al yse avec l'espion dans l'éditeur
Nous allons effectuer une erreur sur une procédure pour utiliser la fenêtre Espion dans
l'éditeur.
Nous remplaçons la variable
'Dim nb As Integer par 'Dim nb

44.1 Insert et renommer Feuilles (Dim / Do While…loop)


Macro permettant de demander nb feuilles et de renommer chaque feuille.
Utilisation : Dim / Do While…loop
Sub InsererFeuilles()
'macro qui permet de demander nb feuilles et de renommer chaque feuille.
As
Dim nb Integer

nb = 1
NbreTotal = InputBox("saisir le nombre de feuilles à créer", _
"Nombre", 1)

Do While nb <= NbreTotal

'Ajoute la feuille après la dernière du classeur


Application.Sheets.Add After:=Sheets.Item(Sheets.Count), _
Type:=xlWorksheet

'Renomme la feuille crée


Application.ActiveSheet.Name = InputBox("Nommez la nouvelle feuille", _
"Renommer", "")
nb = nb + 1
Loop

End Sub

La variable n'est pas reconnue, la boucle continue et provoque un bog


Vérifier la routine dans l'éditeur avec l'espion
Sub InsererFeuilles()
'macro qui permet de demander nb feuilles et de renommer chaque feuille.

44.2 Afficher l'espion


Mennu Débogage et commande Espion
6 déc 09 Luc Mersier & Sylvie Condé 102/164
Dim nb As Integer
nb = 1
NbreTotal = InputBox("saisir le nombre de feuilles à créer", _
"Nombre", 1)

Do While nb <= NbreTotal

'Ajoute la feuille après la dernière du classeur


Application.Sheets.Add After:=Sheets.Item(Sheets.Count), _
Type:=xlWorksheet

'Renomme la feuille crée


Application.ActiveSheet.Name = InputBox("Nommez la nouvelle feuille", _
"Renommer", "")
nb = nb + 1
Loop

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 103/164


45 Gestion des érreurs

Sub

45.1.1 Il existe trois types d'erreurs :


05 Gestion des erreurs
Erreurs de syntaxes :
Elles sont détectées par le VB

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.

45.3 Définir la procédure pour qu'il ne reconnaît pas le fichier à l'ouverture

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

6 déc 09 Luc Mersier & Sylvie Condé 104/164


45.4 Utilisation de l'instruction On Error Goto
Elle continue la procédure malgré qu'il n’ait pas reconnu le fichier, nous allons afficher un
message d'erreur

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.

45.5 Testez votre application "Pas à Pas"

Testez votre application "Pas à Pas"


En cliquant dans la procédure puis faîtes "F8". La ligne d'instruction lue est alors surlignée
et une flèche s'affiche à sa hauteur dans la marge. A chaque touche "F8", la procédure
avance d'une ligne.

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.

45.5.1 Placez des points d'arrêts


Placez des points d'arrêts pour arrêter votre procédure ou vous le souhaitez. Pour cela,
cliquez dans la marge à la hauteur de la ligne désirée. Vous pouvez créer autant de points
d'arrêt que nécessaire.

6 déc 09 Luc Mersier & Sylvie Condé 105/164


46 At el ier 3

Objectif : Ouverture automatique


♦ Ouvrir automatiquement sur un Beep, avec message dans une boîte de dialogue.
Objectif : Sélection d’une feuille
♦ Aller sur la feuille Accueil
Objectifs : d’Excel
♦ Message de fermeture
Objectif : Variable InputBox
♦ Utilisation de l'instruction InputBox
♦ Entrez votre jour et date de naissance dans une boîte de dialogue, il vous l’envoie
dans la cellule C7 .
Objectif Ajouter des feuilles dans un classeur
♦ Utilisation de l'instruction For…Next
♦ Variables avec boucle et boîte de dialogue
♦ Une boîte de dialogue vous demande combien de feuilles souhaitez-vous ?
Objectif : Boîte de dialogue qui vous indique combien il y a de feuilles
♦ Utilisation de l'instruction MsgBox
♦ Combien avez vous de feuilles dans ce classeur ?
Objectifs Mettre en format majuscules (ucase) à parti de la cellule A4
♦ Utilisation de l'instruction : Do Loop While
♦ Il recherche à partir de la cellule A4, les cellules non vide pour les mettre en
Majuscule.
♦ Il finit sa course sur la dernière ligne en dessous

6 déc 09 Luc Mersier & Sylvie Condé 106/164


47 Exos révision et d’exemples divers

04 Exos boucles do…


47.1.1 Ouverture automatique
♦ Ouvrir automatiquement sur un Beep, avec message dans une boîte de dialogue.

Sub auto_open()
Beep

MsgBox "Bienvenue à la formation Excel VisualBasic .... Bonne chance"

End Sub

47.1.2 Sélection d’une feuille


♦ Aller sur la feuille Accueil

Sub aller_a()

Sheets("accueil").Select

End Sub

47.1.3 Fermer Excel


♦ Message de fermeture
Sub auto_close()

Beep
MsgBox "Merci de votre participation ... A bientôt"

End Sub

47.1.4 Variable InputBox


♦ Entrez votre jour et date de naissance dans une boîte de dialogue, il vous l’envoie
dans la cellule C7 .

Sub journaiss()

jour = InputBox("Entrez votre date de naissance", "Jour de naissance")


Range("c7").Value = jour
Range("C7").NumberFormat = ("dddd")

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 107/164


04 Exos boucles do…
47.1.5 Ajouter des feuilles dans un classeur
♦ Variables avec boucle et boîte de dialogue
♦ Une boîte de dialogue vous demande combien de feuilles souhaitez-vous ?

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

47.1.6 Boîte de dialogue qui vous indique combien il y a de feuilles


♦ Combien avez vous de feuilles dans ce classeur ?

Sub nbfeuilles()

a = Sheets.Count
MsgBox "il y a " & a & " feuilles dans ce classseur"

End Sub

47.1.7 Mettre en format majuscules (ucase) à parti de la cellule A4


Objectifs
♦ Il recherche à partir de la cellule A4, les cellules non vide pour les mettre en
Majuscule. Il finit sa course sur la dernière ligne en dessous

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

Do While Not IsEmpty(ActiveCell) En tant que cellule pas vide


ActiveCell.Value = UCase(ActiveCell.Value)
ActiveCell.Offset(1, 0).Select
Déplace la cellule
Loop Faire la boucle active( ligne,col)
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 108/164


A voir ????
04 Exos boucles do…

47.1.8 Création d’un calendrier avec l’indication du samedi et dimanche


.Sub calendrier()

Dim jour As Date


Dim mois As Integer Variable sur les dates …
Dim mtest As Integer
Dim jtest As Integer

jour = InputBox("Entrez une date", "Calendrier")

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))

If mois = mtest Then


ActiveCell.Offset(1, 0).Select Compteur avec le IF
ActiveCell = jour + i
Selection.NumberFormat = "ddd dd mmm yyy"

End If
Next i

Range("a9").Select
Do While Not IsEmpty(ActiveCell)

jtest = Weekday(ActiveCell.Value, 2) Test les Weekday et


mise en forme des
Select Case jtest cellules Weekday +
Case Is = 6 deux lignes en
ActiveCell.Interior.Color = RGB(200, 200, 200) dessous
Case Is = 7
ActiveCell.Interior.Color = RGB(200, 200, 200)
End Select 6éme cellule à parti
de dimanche
ActiveCell.Offset(1, 0).Select
Loop
End Sub

47.1.9 Supprimer le calendrier

Sub supcalendrier()
Range("a7:A50").Select
Selection.Clear
Range("a7").Select
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 109/164


48 Déclarer des variables publics

48.1 Objectif de Déclarer des variables dans un Module


Objectif

48.1.1 Définition d'une Variable locale


Procédure qui se termine avec l'instruction EndSub ou End Fonction, le contenu des
variables est supprimé. Ce sont des variables Locales

48.1.2 Définition d'une Variable Public


Pour que le contenu des variables soit conservé, il faut les déclarer au module et non dans
une procédure.

48.2 Création d'une déclaration d'une variable dans un Module


Sélection du module 2. Sélection Déclaration dans la liste procédure.
Public y As Integer

48.3 Objectif : Appel d'une autre procédure


Créons une procédure Principale qui appelle notre procédure TablesMultiplication

6 déc 09 Luc Mersier & Sylvie Condé 110/164


49 Variable Public

49.1 Définition d'une Variable Public


Pour que le contenu des variables soit conservé, il faut les déclarer au module et non dans
une procédure.

50 Déclarer des variables dans un Module

Public y As Integer

Sub principale()
y = 10
Z = 20
TablesMultiplication
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 111/164


51 Formulaire avec liste déroulante
Dans la feuille
Saisir la liste à partir de la cellule

A1

51.1 Formulaire ave liste déroulante


Ouvrir vba

51.1.1 Insertion UserForm


Insérer la zone de liste (listBox) puis les deux boutons.

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

6 déc 09 Luc Mersier & Sylvie Condé 112/164


51.1.3 Paramètre du formulaire
Faire un clic droit sur le nom du formulaire puis sélectionner Code pour accéder au code
du formulaire.

51.1.4 Créer le code associé à l'activation du formulaire


Private Sub userform_Activate()

'définition de l'adresse de la dernière cellule de la liste dans la variable DernierProd


'Ceci permet de prendre en compte automatique ajout de nouveaux produits
DernierProd = Range("a1").End(xlDown).Address
'Définition des élément constitutifs de la liste déroulante
'Ensemble des cellules A1 à DernierProd
Liste.RowSource = "a1:" & DernierProd
'Sélection par défaut du premier élément de la liste
Liste.ListIndex = 0
End Sub

51.1.5 Insérer un module :


Insertion Module, puis créer la macro d'affichage du formulaire

Sub choisirProd()
ChoixProd.Show
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 113/164


51.1.6 Bouton dans la feuille
Créer dans la feuille un bouton permettant de lancer cette macro

51.1.7 Code du Bouton Annuler


Private Sub ANNULER_Click()
ChoixProd.Hide
End Sub

51.1.8 Code du Bouton OK


Private Sub OK_Click()
ChoixProd.Hide
'Mémorisationdu numèro (num) de l'élément sélélectionné
'Dans la liste
num = Liste.ListIndex
'Introduction en D5 du produit numéro num de la liste
Range("D5").Value = Liste.List(num)
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 114/164


52 Création du formulaire

Objectif A faire

Feuil 1

Feuil2

52.1 Afficher User Form

Cliquez dans le bouton Ajouter User Form


52.2 Changer le nom de la barre de Titre et de la feuille
Dans l'éditeur, cliquez dans le bouton Propriétés

Cliquez sur la propriété pour changer le titre

Propriétés
Caption Choisir

Cliquez sur la propriété pour changer le nom de la feuille

Propriétés
Name Formulaire

6 déc 09 Luc Mersier & Sylvie Condé 115/164


52.2.1 Création de la procédure

Sub
Objectif
Rendre actif l'objet

Double cliquez dans le formulaire et remplacer Click et userform

Private Sub UserForm_Click()


End Sub
Remplacer Click par Activate
Private Sub Formulaire _Activate()
End Sub

52.3 Création du bouton Zones de Texte

Dans la barre à outils, cliquez sur le bouton Zone de texte et tracer

52.3.1 Création de la procédure et définir les propriétés

Double cliquez dans le bouton Zone de texte


Modifier le nom de la procédure

Private Sub nom_Change()


End Sub

Pour revenir dans le userform : double clic sur la feuille nommée Formulaire

6 déc 09 Luc Mersier & Sylvie Condé 116/164


Modifier les propriétés

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

52.4 Création d'une Zones de liste modifiable

Dans la barre à outils, cliquez sur le bouton Zones de liste modifiable

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.

52.5 Création du Bouton OK

Clic dans le bouton de commande et


Propriétés
tracer une zone Name OK
Dans la liste des propriétés tapez : Caption OK

6 déc 09 Luc Mersier & Sylvie Condé 117/164


52.5.1 Création de la procédure dans OK
Objectif : Supprime un objet de la mémoire
Double cliquez dans le bouton OK

Private Sub OK_Click()


Worksheets("feuil1").Rows(2).Select
Selection.Insert
With Formulaire

.Nom.Text = ""
.Liste.Text = ""

End With
Unload Formulaire ‘Supprime un objet de la mémoire
End Sub

52.6 Création du Bouton Fermer

Clic dans le bouton de commande et tracer une zone


Dans la liste des propriétés tapez :

Propriétés
Name Fermer
Caption Fermer

52.6.1 Procédure et définir les propriétés


Objectif : ouvrir à partir de la feuille de calcul

Double cliquez dans le bouton Fermer

Private Sub Fermer_Click()


Formulaire.Hide 'masquer
Worksheets("feuil1").Rows(2).Select
Selection.Delete
Unload Formulaire ‘Supprime un objet de la mémoire
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 118/164


52.7 Objet Feuil1 : définir procédures
Permet de lancer la procédure à partit de la feuille

Formulaire

Dans l'explorateur de projets : doubles clics sur l'objet Feuil1


Ecrire la procédure
Sub ouverture()
Worksheets("feuil1").Rows(2).Select
Selection.Insert
With Formulaire

.Nom.Text = ""
.Liste.Text = ""

End With
End Sub
52.8 Dans la feuille de calcul, créer un bouton et l'affecter

Afficher la barre d'outils Formulaire


Tracer une zone avec le : Bouton dans la barre d'outils
Affecter la macro à Sub ouvrir

6 déc 09 Luc Mersier & Sylvie Condé 119/164


A lire

Private Sub nom_Change()


Private Sub Liste_Change()
End Sub
End Sub

A la fin
Private Sub Formulaire_Activate()

End Sub
1

Private Sub Bouton_OK_Click() Private Sub Bouton_fermer_Click()


Worksheets("feuil1").Rows(2).Sel Formulaire.Hide 'masquer
ect Worksheets("feuil1").Rows(2).
Selection.Insert Select
With Formulaire Selection.Delete
Unload Formulaire ‘Supprime
.Nom.Text = "" un objet de la mémoire
.Liste.Text = "" End Sub

End With
Unload Formulaire
‘Supprime un objet de la
mémoire
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 120/164


53 Projet Tableau croisé dynamique

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

TCD = Tableau croisé dynamique


Objectif
1) Nous ajoutons de nouvelles données dans la tableau dépense
2) Un bouton permet de mettre à jour le tableau croisé

53.1 Démarche Mise à jour budget 2010


1) Définir dans le tableau des noms de plage de cellule
2) Atteindre la dernière ligne du tableau base de données et effectuer la mise à jour
3) Création d'un bouton de procédure

53.1.1 Explication des noms de plages

=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

6 déc 09 Luc Mersier & Sylvie Condé 121/164


53.1.2 Détail des procédures

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

Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False,


Transpose:=False
Application.CutCopyMode = False

End Sub
Objectif
Effectuer la mise à jour.
Sub Refresh_QuandClic()

'Définir la variable La zone qui représente la table


'Activer la feuille Dépense, selection de la cellule Début pour saisir
Dim laZone As Range
Sheets("Dépenses").Activate
Range("DEBUT").Select
'Sélection de la droite vers le bas
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
'La zone = affecte la feuille et la zone pour rafraîchir
Set laZone = Selection
ActiveWorkbook.Names.Add Name:="LaZONE", RefersTo:=laZone
'Sélection début de la ligne, active la feuille synthèse, selection A1
Range("DEBUT").Select
Sheets("Synthèse").Activate
Range("A1").Select
'Active la tableau croisé pour le rafraîchir
ActiveSheet.PivotTables("tSynth").RefreshTable
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 122/164


54 Formulaire pour base de données

A faire Sub

6 déc 09 Luc Mersier & Sylvie Condé 123/164


55 Procédure

55.1 Objectif
Création d'un formulaire pour saisir les informations dans un tableau de données.

Saisir les données dans les feuilles


Renommer la feuille 1 : Base

55.2 Insertion de la feuille 2


Saisir Madame / Mademoiselle /Monsieur (A1:A3)
Renommer la feuille 2 : Titres

55.3 Créer une feuille utilisateur


Dans la barre d'outil Visual Basic Editor, cliquez sur le bouton Ajouter une feuille utilisateur

Ajouter une feuille


utilisateur

56 Réalisation du Formulaire élaboré

56.1 Création de la feuille de formulaire

Dans l'éditeur, cliquez dans le bouton Propriétés

Cliquez dans le bouton Ajouter User Form

6 déc 09 Luc Mersier & Sylvie Condé 124/164


56.2 Changer le nom de la barre de Titre
Cliquez sur la propriété Caption
Dans propriété Caption tapez Gestion des prospects

6 déc 09 Luc Mersier & Sylvie Condé 125/164


56.3 Fenêtre Propriétés
A lire

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

6 déc 09 Luc Mersier & Sylvie Condé 126/164


56.4 Création du bouton Formulaire et définir les propriétés
Dans la feuille utilisateur : Création d'un Intitulé

Dans la barre à outils, cliquez sur le bouton A


Dans la liste des propriétés: tapez :
Propriétés
Caption FORMULAIRE
Clique sur …
Font
Bold/Size 20
SpécialEffect FmSpecialEffetRaised
TextAlign FmTextAlignCenter

56.4.1 Dans la feuille utilisateur : Création d'une Zones de liste modifiable

Dans la barre à outils, cliquez sur le bouton Zones de liste modifiable


Objectif :
• Relier la liste des données de la feuille "Titres" de la plage A1:A3
• Relier le bouton du formulaire à la feuille "Base"pour que les nouveaux
enregistrement commencent en ligne 2.

Dans la liste des propriétés: tapez :

Propriétés
RowSource Titres!A1:A3
ControlSource Base!A2

56.4.2 Ajouter un intitulé Titre à gauche de la liste déroutante.

Clic dans le bouton A et tracer une zone


Dans la liste des propriétés Caption : tapez Titres + dans TextLign choisir l'alignement
Propriétés
Caption Titres
Textlign FmTextAlignRight

6 déc 09 Luc Mersier & Sylvie Condé 127/164


56.4.3 Dans la feuille utilisateur : Création bouton Zones de texte

Dans la barre à outils, cliquez sur le bouton Zone de texte


Objectif :
• Relier la liste des données de la feuille Base à la plage B2 (Nom). Il faut indiquer le nom de
la feuille.

Dans la liste des propriétés: tapez :


Propriétés
CrontrolSource Base!B2

56.4.4 Ajouter un intitulé Nom

Clic dans le bouton intitulé A et tracer une zone


Dans la liste des propriétés :

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

6 déc 09 Luc Mersier & Sylvie Condé 128/164


56.4.5 Ajouter un cadre d'option

Cliquez dans le bouton Cadre et tracer une zone


Dans la liste des propriétés Caption: tapez Type de téléphones
Propriétés
Caption Type de téléphones

56.4.6 Ajouter un bouton d'option dans le cadre Type de téléphones

Cliquez dans le bouton Option et tracer une zone


Dans la liste des propriétés Caption: tapez
Propriétés
Caption Personnel
ControlSource Base!E2
Name Perso
Base!E2 permet de relier la cellule E2 de la feuille Base.

56.4.7 Définir la procédure pour le bouton d'option Professionnel

Clic dans le bouton Option et tracer une zone


Dans la liste des propriétés Caption: tapez
Propriétés
Caption Professionnel
Remarque
Comme il n'y a que deux boutons, ce dernier n'est pas relié à une cellule puisqu'il change la valeur
de l'autre bouton quand on clique dessus.

56.4.8 Ajouter un intitulé Nombre de relances

Clic dans le bouton A et tracer une zone


Dans la liste des propriétés tapez :
Propriétés UserForm1
Caption Nombre de relances
TextAlign FmTextAlignCenter

6 déc 09 Luc Mersier & Sylvie Condé 129/164


56.4.9 Ajouter une barre de défilement

Objectif : Faire varier des valeurs numériques de 0 à 10 avec la souris.

Clic dans le bouton Défilement et tracer une zone


Dans la liste des propriétés tapez :
Propriétés
Max 10
De 1à1
LargeChange 2
ControlSource Base!F2

56.4.10 Ajouter Case à cocher

Clic dans le bouton case à cocher et tracer une zone


Dans la liste des propriétés tapez :
Propriétés
Caption Abonnement mensuel
ControlSource Base!G2

De la même manière, ajouter trois cases à cocher nommées

Abonnement Annuel-----------------lié à la cellule H2


Salle de Gym--------------------------liée à la cellule I2
Sauna/Hammam---------------------lié à la cellule J2

6 déc 09 Luc Mersier & Sylvie Condé 130/164


56.4.11 Ajouter un bouton de commande de validation ou d'annulation

56.4.12 Bouton OK

Clic dans le bouton de commande et tracer une zone


Dans la liste des propriétés tapez :

Propriétés
Caption OK

56.4.13 Bouton Annuler


Clic dans le bouton de commande et tracer une zone
Dans la liste des propriétés tapez :

Propriétés
Caption Annuler

Enregistrer le classeur sous le nom Prospects

6 déc 09 Luc Mersier & Sylvie Condé 131/164


56.5 Nom des contrôles

56.5.1 Définir un nom à la feuille formulaire


Objectif
• Nous allons nommé la feuille du formulaire
Cliquez dans la feuille UserForm et tapez dans propriétés Names : Saisie

56.5.2 Nom avec les propriétés des contrôles

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

Pour l'objet Titres


Cliquez sur l'objet zone de liste et saisir dans les propriétés :
Propriétés
Name Titre

Pour les autres objets, même procédure


Objets Propriétés UserForm1

Zone de saisie : Nom Name Nom

Zone de saisie : Prénom Name Prénom

Zone de saisie : Téléphone Name Téléphone

Options : Personnel Name Perso

Cadre : Nombre de relances Name Compteur


Cadre : Dans la barre de
Name Relances
défilement
Case à cocher : Abonnement
Name Mensuel
mensuel
Case à cocher : Abonnement
Name Annuel
Annuel
Case à cocher : Salle de Gym Name Gym

Case à cocher : Sauna/Hammam Name Sauna

6 déc 09 Luc Mersier & Sylvie Condé 132/164


56.5.3 Procédures événementielles sur la barre de défilement "Relance"
Objectif
• Pour que le compteur varie en fonction de la barre de défilement Relance, il faut ajouter
une procédure Relance.

56.5.4 Procédures événementielles sur l'intitulé Compteur

Sub
Double cliquez dans la barre de défilement Relance

Dans la procédure Private Sub Relances_Changes() saisir le contenu en dessous

Private Sub Relances_Change()

Compteur.Caption = "Nombre de relances : " &


Relances.Value

End Sub

56.5.5 Revenir dans la feuille Excel


Cliquez sur le bouton (gauche) Excel dans la barre d'outils.

6 déc 09 Luc Mersier & Sylvie Condé 133/164


56.6 Création d'un bouton d'exécution dans la feuille Base à partir d'Excel

Objectif
• Exécuter à partir de la feuille de calcul d'Excel de la feuille BASE le bouton l'affichage du
formulaire

56.7 Première Phase : Renommer plage de cellules

Dans la feuille Base, il faut définir un nom à la plage de cellules

Renommer la plage de cellules A1:J2 par ListesProspects


Sélection des cellules A1:J2, menu insertion / Nom / Définir puis saisir le nom "ListesProspects"

Les données de la liste seront triées sur les noms. Nommons la colonne des noms pour y accéder
plus facilement

Renommer la colonne B par Nom .


Cliquez dans l'en-tête B
Sélection de toute la colonne B / menu insertion / Nom / Définir puis saisir "Nom"

6 déc 09 Luc Mersier & Sylvie Condé 134/164


56.8 Ajouter un bouton de commande dans la feuille Base

Dans la barre d'outils VB cliquez sur le bouton et cliquez dans le

bouton commande et tracez une zone

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

Fermer la fenêtre propriétés

56.10 Objectif : Ouvrir la feuille saisie à partir du bouton Ajouter un


prospect
Objectifs
• Permet d’ouvrir la feuille de données directement sur la ligne 2.
• Définir chaque endroit à saisir.
• Initialiser les valeurs par défaut.

Sub

Procédure :
Double cliquez sur le bouton Ajouter un prospect
Saisir la procédure

Permet d’ouvrir la feuille


de données directement
sur la ligne 2
Remarque ;
Vous êtes bien dans la
feuille saisie

6 déc 09 Luc Mersier & Sylvie Condé 135/164


56.10.1 Procédure sur le Bouton Ajouter un prospect dans la feuille Excel
Objectif
• Définir un nouvel enregistrement

Sub

Saisir la procédure à la suite de Selection.Insert


With Saisie
.Titre.Text = "" Définir chaque endroit à
.Nom.Text = "" saisir
.Prénom.Text = "" Attention
.Téléphone.Text = "" Ne pas faire de faute de
.Compteur.Caption = "Nombre de relances" saisie
.Relances.Value = 0
.Perso.Value = True
.Mensuel.Value = False
.Annuel.Value = False
.Gym.Value = False
.Sauna.Value = False
End With

6 déc 09 Luc Mersier & Sylvie Condé 136/164


56.11 Suite pour le nouvel enregistrement
Initialisation des valeurs par défaut dans les cases à cocher

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

Saisir après de End With


Plage E2 = Par défaut (Option
Personnel est défini par défaut pour
type de téléphone

Plage() = faux. Nous ne


cochons pas les quatre cases
à cocher :

Pour afficher une feuille, il


faut utiliser la méthode Show

Procédure au-dessus Idem

End With

'Choisir l'option personnel pour le type de tél. par défaut


Range("E2") = True
Initialisation des valeurs par
'Ne pas cocher les quatre cases à cocher
défaut dans les cases à
Range("G2:J2") = False cocher

'Pour afficher une feuille, il faut utiliser la méthode Show


Saisie.Show

End Sub

56.11.1 Enregistrer et Fermer la fenêtre VB

6 déc 09 Luc Mersier & Sylvie Condé 137/164


56.12 Résultat de la procédure qui ouvre la feuille saisie
A lire

Private Sub OuvrirSaisie_Click()


'Ouverture de la feuille saisie
Worksheets("base").Rows(2).Select
Selection.Insert

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

6 déc 09 Luc Mersier & Sylvie Condé 138/164


56.13 Feuille saisie Bouton OK
OK

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

A partir de l'éditeur, double cliquez dans le formulaire nommé "saisie"


Double cliquez sur le bouton OK
Saisir la procédure

Private Sub CommandButton1_Click()

Saisie.Hide

'Insertion d'une autre ligne


Rows(2).Select
Selection.Insert

56.13.2 Continuer la procédure avec le IF à partir du bouton OK


Objectif de l'utilisation du IF:
• Dans la colonne E, remplacer personnel par Perso et Professionnel par Pro à la place de
vrai ou faux

Saisir la procédure à la suite de la procédure en dessus.

'Remplaçons le type de tél par pro ou perso à la place de vrai ou faux


If Range("E3") = True Then

'pour la valeur TRUE,c'est la case personnel qui est cochée


Range("E3") = "perso"

'pour la valeur False, c'est la case Prosionnel qui est cochée


Else
Range("E3") = "Pro"
End If

6 déc 09 Luc Mersier & Sylvie Condé 139/164


Suite avec la procédure avec la IF
Objectif du deuxième IF avec For …Next
Remplaçons les valeurs Vrai faux des quatre cases à cocher par des Oui ou des cellules vides
For …. Next veut dire création d'une boucle

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

'Valeurs se trouvent dans les colonnes = 7 à 10


For I = 7 To 10
If Cells(3, I) = True Then
Cells(3, I) = "oui"
Else
Cells(3, I) = ""
End If
Next I

Objectif
• Supprimons maintenant la ligne insérée au début de la procédure.

'Supprimons maintenant la line Insérée au début de la procédure


Selection.Delete

'Trier la liste des prospects


Range("listesprospects").Sort key1:="Nom", header:=xlYes
End Sub

Revenir dans la feuille de saisie du formulaire


(enregistrer).
Remarques :
Key1 : correspond à la colonne sur laquelle s'effectue le tri (colonne B que nous avons appelé
nom)
Header : indique que la liste contient des en-têtes de colonnes qui ne doivent pas être triées avec
les données

6 déc 09 Luc Mersier & Sylvie Condé 140/164


Récap de la procédure

Private Sub CommandButton3_Click()


'Saisie.Hide
Rows(2).Select
Selection.Insert

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

56.14 Procédure pour le bouton ANNULER


ANNULER
Objectif
• Si l'utilisateur clique sur le bouton annuler, la ligne ajoutée dans la liste doit être supprimée

Double clique sur le bouton Annuler

Private Sub CommandButton2_Click()


Saisie.Hide
Worksheets("base").Rows(2).Select
Selection.Delete
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 141/164


56.15 Ordre de tabulations
Cliquez droit dans l'objet / Ordre de tabulations

Enregistrer et fermer la fenêtre VB

56.16 Propriétés des contrôles à partir du bouton Ajouter un Prospect

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

Désactiver le bouton Mode création de la barre d'outils VB


Fermer Excel puis ouvrir pour tester

6 déc 09 Luc Mersier & Sylvie Condé 142/164


57 Protéger son projet VBA
Dans l'éditeur, cliquez droit sur le nom de votre projet.
Choisir Propriétés VBAproject
Onglet Protection

6 déc 09 Luc Mersier & Sylvie Condé 143/164


58 Graphique

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

'sélectionne l'axe de X et passe les étiquettes en alignement vertical


ActiveChart.Axes(xlCategory).Select
With Selection.TickLabels
.Alignment = xlCenter
.Offset = 100
oriention = xlUpward
End With

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.

6 déc 09 Luc Mersier & Sylvie Condé 144/164


59 Graphique Elaboré

A faire Sub

59.1 Présentation des graphiques

6 déc 09 Luc Mersier & Sylvie Condé 145/164


59.2 Boutons d'actions
Création à partir d la barre d'outils commande
Case à cocher
Barre de défilement
Bouton démarrer

Définir les propriétés sur chaque bouton de commande


60 Graphique VBA

60.1 Modifier le graphique


Bouton Démarrer : Double clic

Private Sub CommandButton1_Click()


SensRotation = Vitesse
SensPerspective = Vitesse
SensAltitude = Vitesse

End Sub

6 déc 09 Luc Mersier & Sylvie Condé 146/164


60.2 Définir une feuille graphique

ActiveSheet.ChartObjects(1).Activate

Pour modifier l'orientation du graphique, il faut sélectionner la zone de


traçage.
ActiveChart.Plotarea.Select

Pour toutes les modifications du graphiques, nous faisons référence au graphique actif
With ActiveChart

60.3 Modifions l'orientation 100 fois


For i = 1 To 100

60.4 Résultat

Private Sub CommandButton1_Click()


SensRotation = Vitesse
SensPerspective = Vitesse
SensAltitude = Vitesse
ActiveSheet.ChartObjects(1).Activate
ActiveChart.PlotArea.Select
With ActiveChart
For i = 1 To 100

6 déc 09 Luc Mersier & Sylvie Condé 147/164


60.5 Rotation
Démarrer une boucle
For i = 1 To 100

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

Modifions maintenant la rotatation en foction du sens


.Rotation = .Rotation + SensRotation
End If

6 déc 09 Luc Mersier & Sylvie Condé 148/164


61 At el ier sur un planning : Présentation du projet

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

6 déc 09 Luc Mersier & Sylvie Condé 149/164


61.1 Atelier sur un projet : Créer un Planning
Objectif du projet
Création sur plusieurs phases
Phase 1 :
Création du planning avec l'enregistreur

61.2 Objectif du projet


Construire un planning généré par la VB
Tableau avec deux colonnes : Date et événement du jour.
Pour distinguer chaque semaine, le fond de la première colonne doit alterner entre le gris
et le blanc au début de chaque semaine.
61.3 Création sur plusieurs phases
Phase 1 : Utilisation de l'enregistreur Macro pour la réalisation du planning de base
Phase 2 : Ajouter des procédures afin d'automatisée des tâches
Phase 3 : Gestion des erreurs d'exécution
61.4 Phase 1 : Création du planning avec l'enregistreur
Nouveau classeur et enregistrer sous le nom ; Planning 2002
Il faut une seul feuille dans votre classeur.

 Lancer l'enregistreur : Nom PlanningFC2001 + Description ; Saisir Planning formation.


 Cliquez sur le menu Insertion Feuille
 Sélectionner la plage A3:B33.
 Format Cellule Onglet Bordure : Trait intérieur fin et contour Epais puis OK
 Personnalisation du format des nombres de la cellule A1
 Cliquez sur A1 puis Format Cellule / Onglet Nombre / Personnalisé et dans
type saisir mmmm aaaa et entrée
 Personnalisation du format des nombres de la plage A1 : A33
 Sélection de la plage A3:A33 puis Format Cellule onglet Nombre / choisir
personnalisé et dans type saisir jjjj j et touche Enter du clavier
 Agrandir les colonnes
 Sélection de la colonne A : (en-tête) Format colonne largeur : 20
 Sélection de la colonne B : (en-tête) Format colonne largeur : 60
 Fusionner les cellules
 Sélection plage A1:B1 puis cliquez sur le bouton fusionner puis taille police
20
 Double clic sur l'onglet Feuil 2 puis tapez : janvier 2002

 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.

6 déc 09 Luc Mersier & Sylvie Condé 150/164


61.5 Détail de la 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

61.8 Objectif : modifier une macro enregistrée


 Ouvrir Visual Basic Editor (Barre d'outils Visual Basic).
Double clic sur Module1

 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 dernière ligne de la procédure change le nom de la nouvelle feuille (Feuil2) . Si l'on


exécute plusieurs fois la macro, Excel ajoutera les feuilles (Feuil 3" Feuil 4 etc..') .
Changeons cette ligne pour qu'elle fasse référence à la feuille active et tienne compte
de la date saisie.

 Remplacer la dernière ligne Sheets("Feuil2").Name de la procédure par :


 ActiveSheet.Name = Format(DateChoisie, "mmmm yyyy")

 La fonction format retourne la valeur du premier argument (ici le contenu de la variable


date) avec le format du second argument (argument identique au format des cellules
d'une feuille de calcul mais en notation Anglais

 La cellule A1 doit contenir le mois et l'année du planning.


 Placer le curseur au début de la ligne End Sub et saisir :
 Range("A1") = DateChoisie

 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)

6 déc 09 Luc Mersier & Sylvie Condé 152/164


 Tous les mois non pas le même de jour. Pour vérifier la fin du mois en remplissant la
plage A1:A33, conservons dans la variable MoisEnCours le numéro du mois en cours.
La fonction Month retourne 1 Pour le mois de janvier, 2 pour le mois de février, etc…
 Saisir : MoisEnCours = Month(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)

Partie en Début de la Proc

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)

Partie de la fin de la Proc

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

6 déc 09 Luc Mersier & Sylvie Condé 153/164


61.10 Suite du Projet Modifier la mise en forme
Phase 3: Modifier la mise en forme
Objectif : Modifier la mise en forme
 La méthode Cells de l'objet sheet retourne un objet Range Plage. Le premier argument
donne le numéro de la ligne et le second le numéro de la colonne. Plaçons la date
dans la cellule désignée par la variable JourEnCours (notre compteur) et dans la
colonne 1.
 Tapez : Cells(JourEnCours, 1) = DateChoisie

 Il faut maintenant modifier la couleur de fond de cette cellule.


 Tapez : Cells(JourEnCours, 1).Interior.ColorIndex = Fond

 LA FONCTION WeekDay retourne 1si le jour de la semaine est un dimanche, 2 pour


un lundi 2, etc. Si on est en début de semaine , il faut modifier la couleur de fond.
 If WeekDay(DateChoisie) = 1 Then

 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 le fond est gris, il faut la mettre en blanc


 Tapez : Fond = 0

 Dans le cas contraire


 Tapez : Else

 Il faut le mettre en gris


 Saisir : Fond = 15

 Fermons nos deux instructions de conditions IF


 Saisir : End IF Saisir à la ligne suivante : End IF

 Il faut augmenter la date


 Saisir : DateChoisie = DateChoisie + 1

 Si après l'augmentation de la date le mois a changé, il faut sortir de la boucle For …


Next
 Saisir : If Month(DateChoisie) > MoisEnCours Then Exit For

 Il ne reste plus qu'a cloturer la boucle For…Next


 Tapez : Next JourEnCours

 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

6 déc 09 Luc Mersier & Sylvie Condé 154/164


61.11 Détail de la procédure (module 3)

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

6 déc 09 Luc Mersier & Sylvie Condé 155/164


61.12 Résultat de la procédure planning complète

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

6 déc 09 Luc Mersier & Sylvie Condé 157/164


62 Gestion des erreurs d'exécution
Gestion des erreurs
Méthode pour remédier au problème
Actions de procédures On Error Goto

62.1 Gestion des erreurs

Dans le classeur : saisir à nouveau 01/02/02

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.

6 déc 09 Luc Mersier & Sylvie Condé 158/164


62.4 Suite : Gestion des erreurs d'exécution
Gestion des erreurs
ChR (10)
VbYesNo
VbCristical

62.5 Actions de procédures On Error Goto


Placez-vous au début de la procédure Planning

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

 Placez vous avant Sheets.Add


 Saisir : On Error GoTo ErreurPlanning

 Placez-vous à la fin de la procédure avant End Sub

 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)

62.7 Voir ChR (10)


MsgBox
C'est une fonction qui retourne le bouton choisi par l'utilisateur
62.8 VbYesNo
Cela précise que la boîte de dialogue contient un bouton oui et un bouton non
62.9 VbCristical
C'est une constante qui ajoute le pictogramme X dans une boîte de dialogue.

6 déc 09 Luc Mersier & Sylvie Condé 159/164


62.10 Suite : Gestion des erreurs d'exécution
Gestion des erreurs
SenKkeys : permettra de répondre à la place de l'utilisateur
ENTER : simule l'appui sur la touche Entrée du clavier
WAIT:=
Error(Err)
False : indique à VB de ne pas attendre et de continuer la procédure

62.11 Objectif avec l'instruction SenKkeys


Vérifions le choix de l'utilisateur

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.

62.11.1 SenKkeys permettra de répondre à la place de l'utilisateur.

62.11.2 L'argument {ENTER} simule l'appui sur la touche Entrée du clavier.


C'est donc le bouton OK qui est pris par défaut.

62.11.3 L'argument False indique à VB de ne pas attendre et de continuer la


procédure.

Comme les boîtes de dialogue stoppent toutes actions, l'instruction SENDKEYS est
placée avant la suppression de la feuille.

 Vérifions le choix de l'utilisateur


 Saisir : If Réponse = vbYes then
Si la réponse est égal au bouton OUI

 Saisir : SendKeys String: ="{ENTER}" , Wait: =False


Répondre à la place de l'utilisateur = {Par défaut} , suite continuer

 Pour supprimer l'ancienne feuille


 Saisir ; Sheets(Format(DateChoisie, "mmmm yyyy")).delete

 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

6 déc 09 Luc Mersier & Sylvie Condé 160/164


62.12 Suite : Gestion des erreurs d'exécution
Gestion des erreurs
VB affichera Erreur 13
vbEclamation

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

 Affichons un message pour informer de l'erreur de saisie.


 Saisir : MsgBox "Vous devez tapez une date pour créer une nouvelle feuille "
& DateChoisie & n'est pas une date, " , vbEclamation

 Comme pour l'erreur 1004, il faut supprimer la nouvelle feuille et ressortir de la


procédure.
Saisir :
 SendKeys string:= "{ENTER}" , Wait: = False
 Active.Sheet.Delete
 Exit Sub
 End IF

 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.

6 déc 09 Luc Mersier & Sylvie Condé 161/164


Sub Planningcf()
' Planningcf Macro
' Macro enregistrée le 06/12/2001 par Luc
On Error GoTo ErreurPLanning
Sheets.Add
Range("A3:B33").Select

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

6 déc 09 Luc Mersier & Sylvie Condé 162/164


62.14 Perspective

La perspective des graphiques varie de 0 à 100. Le programme est le même que pour la
rotation en respectant ces limites

If .Perspective.Value = True Then


If .Perspective + Vitesse > 100 Then SensPerspective = -Vitesse
If .Perspective - Vitesse < 0 Then SensPerspective = Vitesse
.Perspective = .Perspective + SensPerspective
End If

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.

If Altitude.Value = True Then


If .Elévation + Vitesse > 90 Then SensAltitude = -Vitesse
If .Elevation - Vitesse < -90 Then SensAltitude = Vitesse
.Elevation = .Elevation + SensAltitude
End If

Fermons la boucle For et fermons l'instruction With et sélectionnons une cellule


Next i
End With
Range("F6").Select
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 163/164


Résultat

Private Sub CommandButton1_Click()


SensRotation = Vitesse
SensPerspective = Vitesse
SensAltitude = Vitesse
ActiveSheet.ChartObjects(1).Activate
ActiveChart.PlotArea.Select
With ActiveChart
For i = 1 To 100
If Rotation.Value = True Then
If .Rotation + Vitesse > 360 Then SensRotation = -Vitesse
If .Rotation - Vitesse < 0 Then SensRotation = Vitesse
.Rotation = .Rotation + SensRotation
End If
If Perspective.Value = True Then
If .Perspective + Vitesse > 100 Then SensPerspective = -Vitesse
If .Perspective - Vitesse < 0 Then SensPerspective = Vitesse
.Perspective = .Perspective + SensPerspective
End If
If Altitude.Value = True Then
If .Elevation + Vitesse > 90 Then SensAltitude = -Vitesse
If .Elevation - Vitesse < -90 Then SensAltitude = Vitesse
.Elevation = .Elevation + SensAltitude
End If

Next i
End With
Range("F6").Select
End Sub

6 déc 09 Luc Mersier & Sylvie Condé 164/164

Vous aimerez peut-être aussi