Contrôler les programmes VBA



Documents pareils
Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

TD3 - Facturation avec archivage automatisé

Visual Basic for Applications

Excel. Identification. Informations sur vos besoins et objectifs. Notions fondamentales. Fiche de validation des besoins en formation Bureautique

Comment créer et utiliser une fonction

Algorithmique et programmation : les bases (VBA) Corrigé

Formations 2015 Bureautique

Stockez et organisez vos données sous Excel. Une approche systématique, structurée et simplifiée

EXCEL TUTORIEL 2012/2013

Utiliser un tableau de données

Formation VBA 3 Interagir

Séminaire d information MIGRATION WINDOWS 7 ET OFFICE 2010

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Excel 2007 Niveau 3 Page 1

Utilitaires méconnus de StrataFrame

Langage SQL : créer et interroger une base

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

FORMATION au VBA Pour EXCEL. Version 2007 & +

Initiation à VBA pour Excel. Philippe Bernard Ingénierie Economique et Financière Université Paris-Dauphine

Préparation à l examen EFA en Macro

CATALOGUE DES FORMATIONS 2014

1 TD 2 : Construction d'une chier Acrobat et envoi par

TABLEAU CROISE DYNAMIQUE

Se Perfectionner à Excel

SRAL Saint Raphaël. Maison des associations 213, rue de la Soleillette Saint Raphaël. : : dromain.jean-pierre@neuf.

Excel 2010 Intermediaire

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

TABLEAU CROISE DYNAMIQUE

Utiliser une base de données

Guide de formation avec cas pratiques. Programmation. Philippe Moreau Patrick Morié. Daniel-Jean David

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Calc 2 Avancé. OpenOffice.org. Guide de formation avec exercices et cas pratiques. Philippe Moreau

Visual Basic.NET Interaction avec Excel

CALC2QIF Conversion de données OpenOffice au format QIF

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Avant-propos. Conventions typographiques

Parcours FOAD Formation EXCEL 2010

PROGRAMMATION EVENEMENTIELLE sur EXCEL

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation VBA. Excel Daniel-Jean David. et Groupe Eyrolles, 2014, ISBN :

MAÎTRISE DE L ENVIRONNEMENT WINDOWS VISTA

FORMATION EXCEL NIVEAU 2

Traitement des données avec Microsoft EXCEL 2010

12 Tableaux croisés dynamiques

Avant-propos FICHES PRATIQUES EXERCICES DE PRISE EN MAIN CAS PRATIQUES

ISBN : Micro Application 20-22, rue des Petits-Hôtels Paris. 1 ère Édition - Septembre Premium CONSULTANTS

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Créer et modifier un fichier d'import des coordonnées approximatives avec Excel

Utiliser Access ou Excel pour gérer vos données

LES DECIMALES DE π BERNARD EGGER

Université de Picardie - Jules Verne UFR d'economie et de Gestion

Créer le schéma relationnel d une base de données ACCESS

COURS DE MS EXCEL 2010

Créer vos données sources avec OpenOffice, adieu Excel

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programme de Formation Office 2010 Word, Excel, Powerpoint et Outlook 2010 pour Windows

Démonstration d utilisation De NesmaCom

Table des matières A. Introduction... 4 B. Principes généraux... 5 C. Exemple de formule (à réaliser) :... 7 D. Exercice pour réaliser une facture

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Module 1 : Tableau de bord Excel * 2010 incl.*

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Sommaire. BilanStat manuel de présentation et d utilisation Page 2

BIRT (Business Intelligence and Reporting Tools)

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Introduction à Microsoft InfoPath 2010

WEB-OFFICE-FORMATION.FR FORMATION PROFESSIONNELLE CONTINUE ET DEVELOPPEMENT DE SITES WEB CATALOGUE 2013

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Organigramme / Algorigramme Dossier élève 1 SI

R01 Import de données

Évaluation des compétences. Identification du contenu des évaluations. Septembre 2014

FORMATION EXCEL NIVEAU 2

Guide Calc. Chapitre 13 Calc en tant que Base de Données Simplifiée

Utilisation avancée de SugarCRM Version Professional 6.5

Perfectionnement Excel 2007

PRÉSENTÉ PAR : NOVEMBRE 2007

Astuces_Générales1_excel.doc - bitsch.gerard@orange.fr VERTOU Page : 1 / 29

manuellement. Le prototype ayant obtenu des résultats satisfaisants aux différents essais de labour est validé sur le plan suivant :

des Données et Référentiels sur l'eau Service d'administration Nationale

EXCEL Les tableaux croisés dynamiques

Microsoft Excel Présentation du tableur Excel

Groupe Eyrolles, 2006, pour la présente édition, ISBN :

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Module 16 : Les fonctions de recherche et de référence

Guide de démarrage Janvier 2012

Formation Excel, Niveau initiation, module 1 DUREE DE LA FORMATION OBJECTIFS DE LA FORMATION

Page Paragraphe Modification Mise en page du document Le bouton "Format de page" est maintenant "Page"

COURS BARDON - ACCESS 2010

Objectifs du TP : Initiation à Access

A.-M. Cubat PMB - Import de lecteurs - Généralités Page 1 Source :

Les différents types de relation entre les tables

Guide d utilisation des fichiers bonus accompagnant le guide «L Argent est une science exacte»

Programmer en JAVA. par Tama

Console IAP Manuel d utilisation

Application 1- VBA : Test de comportements d'investissements

Comment Définir une Plage de données Pour Utiliser Fonctions de Filtres et de Tris

Transcription:

7 Contrôler les programmes VBA Au sommaire de ce chapitre Répéter une série d instructions : les boucles Utiliser des instructions conditionnelles Définir l instruction suivante avec GoTo Interagir avec l utilisateur via des boîtes de dialogue Utiliser les opérateurs logiques Trier des données

210 Excel et VBA Visual Basic intègre des instructions permettant d orienter le comportement d une macro. Ces instructions sont appelées des structures de contrôle on parle du flux de contrôle d un programme. La connaissance et la maîtrise de ces structures constituent un préalable indispensable à la création de programmes VBA souples et puissants, se comportant différemment selon l état du document et de l application au cours de son exécution, ou des informations fournies par l utilisateur. Ce chapitre aborde une à une les structures de contrôle de Visual Basic. Leur combinaison permettra de gagner un temps précieux dans vos tâches les plus communes comme les plus complexes. L instruction GoTo et les fonctions MsgBox et InputBox, ainsi que la collection Dialogs sont aussi traitées dans ce chapitre. Il ne s agit pas de structures de contrôle, mais elles permettront aussi de contrôler le comportement des programmes VBA, et d interagir avec l utilisateur. Répéter une série d instructions : les boucles On entend par instructions en boucle, des instructions se répétant en série. Des instructions en boucles peuvent se répéter un nombre de fois déterminé dans le code ou un nombre de fois indéterminé, en fonction du contexte au moment de l exécution du programme. Do...Loop et While...Wend. Permettent de généraliser une série d instructions particulières à l ensemble d un document ; dans ce cas, ce sont l état du document et l état de l application qui déterminent le nombre de boucles réalisées. For...Next. Permet de répéter sur un document une série d instructions un nombre de fois déterminé par l utilisateur. For Each...Next. Permet d exécuter une série d instructions sur tous les objets d une collection. La boucle While...Wend La structure de contrôle While...Wend permet de répéter une série d instructions tant qu une condition spécifiée est remplie. C est l une des structures les plus utilisées pour automatiser les tâches répétitives. Elle permet de répéter un traitement sur une chaîne, un format, un objet, etc., déterminé dans un document. La syntaxe de la structure While...Wend est la suivante : While Condition Wend

Chapitre 7 Contrôler les programmes VBA 211 où Condition est une expression comparant deux valeurs à l aide d un opérateur relationnel. Lorsque la condition spécifiée après While est réalisée, le programme exécute la, placée entre While et Wend. Lorsque l instruction Wend est atteinte, le programme retourne à l instruction While et interroge à nouveau la condition. Si elle est réalisée, la s exécute à nouveau, etc. Dans le cas contraire, les instructions placées entre While et Wend sont ignorées, et l exécution du programme se poursuit avec l instruction située immédiatement après Wend. Pour poser une condition, on conjugue généralement une expression avec un opérateur relationnel, ou opérateur de comparaison, et une valeur. L opérateur relationnel permet d établir un rapport entre la valeur renvoyée par l expression et la valeur qui lui est associée. Si ce rapport est vérifié, la condition est respectée. Le Tableau 7.1 présente les opérateurs relationnels de Visual Basic. Tableau 7.1 : Les opérateurs relationnels de Visual Basic Opérateur relationnel Signification = Égal à > Supérieur à < Inférieur à <> Différent de >= Supérieur ou égal à <= Inférieur ou égal à Like Is Identique à (pour comparer des chaînes de caractères) Égal à (pour comparer des variables objet) Conseil Deux chaînes de caractères peuvent être comparées à l aide des opérateurs relationnels =, <, >, etc. La comparaison s effectue alors entre les codes ANSI attachés aux caractères comparés. Si vous devez effectuer des comparaisons précises, préférez l opérateur Like. Celui-ci permet en effet de prendre ou non en compte la casse et permet l utilisation de caractères génériques. Consultez l aide en ligne pour plus de précisions. La technique d enregistrement d instructions en boucle la plus courante consiste à exécuter la série d instructions après avoir activé l Enregistreur de macro, puis à ouvrir la fenêtre Code de la macro et à y insérer la structure While...Wend.

212 Excel et VBA Nous utiliserons une structure While...Wend pour automatiser la saisie d informations dans une feuille de calcul. Considérez le classeur Representants par departements représenté à la Figure 7.1. La feuille de calcul active (libellée Representants) recense les départements affectés à chaque représentant de la société. Les noms des représentants apparaissent dans les cellules de la ligne 3. Pour chaque cellule contenant le nom d un représentant, nous avons inséré en commentaires les initiales du représentant. Sous le nom du représentant se trouvent les numéros des départements dont il a la charge. Figure 7.1 La répartition des représentants par départements. Le classeur Representants par clients illustré à la Figure 7.2 contient la liste des clients de la société (colonne A). La colonne B nous renseigne sur la ville du client, et la colonne D sur son numéro de client. Les deux premiers chiffres de ce numéro correspondent au département d origine du client. La colonne C contient les initiales du représentant en charge du client. Nous profiterons de ce que ces deux classeurs ont en commun le numéro du département pour automatiser la mise à jour de la colonne C. Figure 7.2 Le classeur avec la répartition des représentants par clients avant mise à jour de la colonne C.

Chapitre 7 Contrôler les programmes VBA 213 La macro suivante interroge les deux premiers chiffres du numéro de client. Elle recherche ensuite cette valeur dans le classeur Representants par departement de façon à identifier le représentant en charge du client. Les initiales du client sont alors insérées dans la cellule située à gauche du numéro de client. La structure While...Wend permet de répéter cette procédure en boucle. Chaque fois que les initiales d un représentant ont été insérées, la cellule Numéro de client suivante est activée. La procédure s exécute TANT QUE la cellule sélectionnée contient une valeur. 1: Sub InsererInitialesRepresentants() 2: Dim ClasseurRepresentants As Workbook 3: Dim NumDepartement As String 4: Dim Colonne As Variant 5: Dim Initiales 6: Set ClasseurRepresentants = _ GetObject("C:\Documents and settings\administrateur\bureau\representants par departements.xlsx") 7: Range("D4").Select 8: While ActiveCell.Value <> 9: NumDepartement = Left(ActiveCell.Value, 2) 10: Colonne = ClasseurRepresentants.Sheets(1).Range( A4:I50 ). Find(What:=NumDepartement, LookIn:=xlFormulas, LookAt:=xlWhole).Address 11: Colonne = Range(Colonne).Column 12: Colonne = CInt(Colonne) 13: Initiales = ClasseurRepresentants.Sheets(1).Cells(3, Colonne).Comment. Text 14: ActiveCell.Offset(0, -1).Range( A1 ).Select 15: ActiveCell.FormulaR1C1 = Initiales 16: ActiveCell.Offset(1, 1).Range( A1 ).Select 17: Wend 18: Set ClasseurRepresentants = Nothing 19: Workbooks( Representants par departements.xlsx ).Close 20: End Sub Lignes 2 à 6, les variables qui seront exploitées par le programme sont déclarées, et à la variable objet ClasseurReprésentant est affecté le classeur Representants par departements.xlsx, situé sur le Bureau. Ligne 7, la cellule D4 est sélectionnée. La boucle While...Wend des lignes 8 à 17 s exécute tant que la cellule sélectionnée contient des informations. Ligne 9, la fonction Left affecte à la variable NumDepartement les deux caractères de gauche (correspondant au numéro de département) de la valeur de la cellule active. Cette valeur est ensuite recherchée dans le classeur des représentants par départements (ligne 10). L objet Range renvoyé par la méthode Find est affecté à la variable Colonne notez que la variable Colonne a été déclarée de type Variant de sorte qu elle

214 Excel et VBA puisse recevoir des valeurs de différents types. Ligne 11, Colonne reçoit la valeur correspondant au numéro de la colonne de la cellule trouvée. Ligne 12, la fonction CInt convertit la valeur de Colonne en valeur de type Integer. La variable Colonne peut ainsi être utilisée comme argument de la propriété Cells. Ligne 13, la variable Initiales reçoit pour valeur les initiales du représentant en charge du département. On lui affecte pour cela le texte de commentaires de la cellule située dans la même colonne que l objet Range renvoyé par la fonction Find, mais sur la ligne 3 la ligne des noms de représentants. Lignes 14 et 16, un déplacement par référence relative aux cellules est effectué. Tout d abord, la cellule située à gauche de la cellule active est sélectionnée et reçoit la valeur de la variable Initiales (ligne 15). Un déplacement d une cellule vers la droite puis d une cellule vers le bas est ensuite effectué. La cellule active est alors la cellule suivante de la colonne D. Le mot clé Wend renvoie l exécution du programme à l instruction While correspondante. Celle-ci vérifie que la cellule active contient des données. Si tel est le cas, les instructions situées entre While et Wend sont exécutées, et les initiales du représentant en charge du client insérées. Lorsque la condition While n est plus vérifiée, les instructions situées entre While et Wend sont ignorées et le programme se termine avec les instructions des lignes 18 et 19. Les ressources système occupées par la variable objet ClasseurRepresentants sont libérées, et le classeur des représentants par départements est fermé. Conseil Pour sécuriser définitivement cette macro, commencez par lui faire activer la feuille devant recevoir les informations. Elle devra logiquement être stockée dans ClasseurRepresentants.xlsx, puisqu elle ne servira qu à ce classeur. Ainsi, elle ne s exécutera que si le classeur est ouvert. Figure 7.3 La macro a complété les informations de la colonne C.

Chapitre 7 Contrôler les programmes VBA 215 La boucle Do...Loop La structure de contrôle Do...Loop est semblable à While...Wend, mais offre plus de souplesse car elle peut se décliner sur quatre modes différents : Do While...Loop. Tant que la condition est respectée, la boucle s exécute. Do While Condition Loop Do Until...Loop. Jusqu à ce que la condition soit réalisée, la boucle s exécute. Do Until Condition Loop Do...Loop While. La boucle s exécute, puis se répète, tant que la condition est respectée. Do Loop While Condition Do...Loop Until. La boucle s exécute, puis se répète, jusqu à ce que la condition soit respectée. Do Loop Until Condition Le programme suivant utilise une boucle Do While...Loop pour supprimer les doublons dans un classeur Excel. Les Figures 7.4 et 7.5 présentent un classeur contenant des doublons avant et après passage de la macro. On estime, dans cette première version, qu il existe un doublon lorsque deux cellules de la colonne A contiennent les mêmes données. Le programme commence par faire un tri des données. Le contenu de chaque cellule de la colonne A est ensuite comparé à celui de la cellule suivante. S ils sont identiques, la ligne de la cellule courante est supprimée. 1: Sub SuppressionDoublons() 2: Dim CelluleCourante As Range 3: Dim CelluleSuivante As Range 4: Set CelluleCourante = ActiveSheet.Range("A1") 5: 6: Tri des données sur la cellule A1 7: ActiveSheet.Range("A1").Sort key1:=range("a1"), _ 8: Order1:=xlAscending, Header:= xlguess, OrderCustom:=1, _ 9: MatchCase:=False, Orientation:=xlTopToBottom

216 Excel et VBA 10: Boucle 11: Do While Not IsEmpty(CelluleCourante) = True 12: Set CelluleSuivante = CelluleCourante.Offset(1, 0) 13: If CelluleSuivante.Value = CelluleCourante.Value Then 14: CelluleCourante.EntireRow.Delete 15: End If 16: Set CelluleCourante = CelluleSuivante 17: Loop 18: End Sub Lignes 2 et 3 les variables objet de type Range CelluleCourante et CelluleSuivante sont déclarées. La variable CelluleCourante reçoit ensuite un objet Range correspondant à la cellule A1 de la feuille active. L instruction des lignes 7 à 9 trie les données. On applique pour cela la méthode Sort. Les arguments Key1 et Order1 définissent respectivement le premier critère de tri et l ordre de tri. Header indique s il existe des lignes de tri et reçoit ici la constante xlguess (Excel définit s il y a ou non une ligne de titre et, dans l affirmative, de quelle ligne il s agit). OrderCustom reçoit la valeur 1 et le tri est donc "Normal". Enfin MatchCase et Orientation correspondent au respect de la casse lors du tri et à son orientation (ici de haut en bas). Lignes 11 à 17, une boucle Do While...Loop est utilisée pour tester toutes les cellules. La cellule stockée dans CelluleCourante est testée, puis CelluleCourante reçoit la cellule stockée dans CelluleSuivante, soit la cellule située immédiatement en dessous. La boucle s exécute tant que la cellule stockée dans CelluleCourante n est pas vide [Not IsEmpty(CelluleCourante) = True]. Ligne 12, la propriété Offset est utilisée pour attribuer à CelluleSuivante la cellule située une ligne en dessous, sur la même colonne. Lignes 13 à 15, une instruction conditionnelle sert à supprimer la ligne de CelluleCourante (CelluleCourante.EntireRow) si la cellule contient les mêmes données que la cellule suivante. CelluleCourante reçoit ensuite la cellule stockée dans CelluleSuivante (ligne 16). Ligne 17, l instruction Loop renvoie le programme à l instruction While correspondante. L expression While est de nouveau évaluée et le corps de la boucle s exécute si elle est vérifiée. Lorsque l expression de la ligne 11 n est plus vérifiée, le programme se poursuit avec l instruction située immédiatement sous l instruction Loop. En l occurrence, il prend fin. Figure 7.4 La feuille avant passage de la macro.