Accueil
Java Standard Edition
Java EE 5
Visual Basic .Net 2005
Visual C++ .Net 2005
Visual C# .Net 2005
Cours ASP .Net 2.0
Postgresql
Linux
Visual Studio 2008
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Cours Ajax
VBA
Assembleur
Perl
Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Exécution d'un programme
Les archives Jar
Les classes abstraites
Les interfaces
Les tableaux
La généricité
Les énumérations
Les classes internes
Classes anonymes et internes locales
E/S(1):InputStream et OutputStream
E/S(2):FileInputStream et FileOutputStream
E/S(3):Reader et Writer
E/S(4):FilterInputStream et FilterOutputStream
E/S(5):Les filtres d'octets: PrintStream
E/S(6):Les filtres d'octets: DataInputStream et DataOutputStream
E/S(7):Les filtres d'octets: BufferedInputStream et BufferedOutputStream
E/S(8):Flux de caractères: PrintWriter
E/S(9):Flux de caractères: FilterReader et FilterWriter
E/S(10):Flux de caractères: InputStreamReader, OutputStreamWriter, StreamDecoder, StreamEncoder
E/S(11):Flux de caractères: BufferedReader et BufferedWriter
E/S(12):Flux de caractères: FileReader et FileWriter
La classe String (java.lang)
La bibliothèque Swing en Java
Les bases de données en Java
JDBC ( Java Database Connectivity )
Les interfaces graphiques
Les fichiers de configuration en Java
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS LINUX
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS WINDOWS
Les applications Web en java
Les filtres Java (javax.servlet.Filter)
I Généralités
I.1 Le formulaire principal
I.2 Les objets créés par Visual
I.3 Les variables références
I.4 Le garbage collector
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Applications winforms
I.2 Applications MFC
I.3 Objets managés ou pas
I.4 Objets non managés
I.5 Objets managés - handle
I.6 Le top-level ^
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Puissant et Accessible
I.2 Créer ses classes
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
III Les services Windows
IV Le .net remoting
V Communication Tcp avec TcpClient et TcpListener
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Un EDI formidable
I.2 Inclure C# ou VB
I.3 L'objet Response
I.4 Les évènements
II ASP .net et les bdd
II.1 Essayer plusieurs fois la requête
I 2.1 Fichiers distincts
I.2.2 Avec la balise script
I.2.3 Inclure réellement
I.2.4 Avec Response.Write()
I.3.1 La méthode Response.Redirect()
I.4.1 Résoudre problème post
Installation Postgre Linux
Cours Postgresql
Le Shell Unix( Linux, Ubuntu)
Les scripts C-Shell
Programmation système Unix
Reseau Linux
Les iptables
Windows Presentation Foundation(WPF)
Le Framework 3.0
Windows Workflow Foundation(WF)
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Chat Ajax
VBA Excel 2003
Assembleur
Perl
Inscription
Liste membres
Livre d'or
Forum
Accueil
>
VBA
>
VBA Excel 2003
____________________________________________________________________________________________________
Connexion
VBA SUR EXCEL 2003
VBA = Visual Basic for Applications
Langage de programmation de la suite bureautique Office. Langage de Microsoft. Ici nous l’étudierons sur Excel 2003, de Microsoft Office 2003.
C’est un langage qui a la particularité d’être intégré à une application( Excel ici). Un langage de programmation permet d’apporter à une application(ici Excel) une puissance de déclaration de nos objectifs d’actions inégalable avec la simple interface d’Excel. L’intérêt est de pouvoir automatiser des tâches, qu’on devrait faire manuellement sinon avec le logiciel en question( Excel ici). Forcément, un langage de programmation intégré à une application concerne uniquement cette application. Il est destiné par conséquent à améliorer les apports de l’application ( Excel pour nous). VBA est intégré à Office : il y a VBA pour Excel, VBA pour Word, VBA pour Access, VBA pour Outlook, VBA pour PowerPoint. Il y a donc 5 VBA, avec bien sûr une grande base commune, plus des instructions spécifiques à l’application à laquelle il est rattaché. Car chaque application a des actions spécifiques à elle-même( par exemple outlook a besoin d’instructions VBA en rapport avec le courrier). VBA est surtout utile pour Excel.
Une autre façon de voir les choses serait de penser que VBA pour Excel( par exemple), c’est comme si vous développiez vous-même une application tableur, et qu’on vous donne la possibilité, dans VBA, d’utiliser des primitives élémentaires de tableur, pour vous éviter d’avoir à tout rééecrire.
I)Un langage plutôt orienté objet
VBA est un langage qui, comme VBScript, reprend les concepts principaux de la programmation orientée objet( d’ailleurs VBScript est un sous-ensemble de VBA). Mais on ne peut pas dire que VBA est un langage orienté objet, car tous les concepts n’y sont pas( pas d’héritage par exemple), mais les notions « vitales » sont présentes. On ne dispose pas de la classe des objets, ce qui ferme beaucoup les choses( et peut-être les simplifie pour vous en même temps !). On ne peut pas dire que VBA n’est pas objet, car tout est basé quand même sur l’objet : l’interface avec le programmeur, c’est-à-dire comment le programmeur exprime ce qu’il veut et comment il obtient les résultats, est basée sur les objets. Et c’est essentiellement ce qu’on a gardé des objets, juste le côté très pratique d’interfaçage.
La notion d’objet est présente. Et un objet possède, comme en POO, des propriétés et des méthodes.
Exemple de propriétés en VBA :
monObjet.prenom = « Jean »
ou encore monObjet.age = 26
Bien entendu, les propriétés peuvent être elle-même des objets.
b.1) La déclaration des propriétés avec With..End With
On peut déclarer les propriétés d’un objet de cette manière :
With Range("C1")
.Value = "Valeur C1"
.Font.Bold = True
End With
Donc:
With objet
.prop1 = valeur
.prop2 = valeur
.prop3 =
…
End With
b.2) Les propriétés « par défaut »
Certains objets possèdent ce que j’appelle une propriété « par défaut ». Prenons un exemple :
ActiveCell.Value = « jean »
Peut s’écrire ActiveCell = « jean ».
Il s’agit d’un raccourci d’écriture, intéressant car la propriété Value est souvent utilisé pour les objets cellules.
c) Les méthodes
Exemple de méthode sans paramètres :
monObjet.rouler
On remarque qu’il n’ya pas de parenthèses vides ( ). Mais nous reviendrons sur la présence ou non de parenthèses, ci-dessous.
Exemple de méthode avec paramètre :
monObjet.accelerer 200, 10 'accélere à 200 kms, pendant 10 secondes
On remarque qu’il n’y a pas de parenthèses autour des paramètres.
Autre exemple : monObjet.ecrire « Hello World »
d) Visual Basic Editor
Visual Basic Editor est l’éditeur de macros. C’est donc un éditeur de texte, avec un équivalent d’intellisense de .net( c’est-à-dire une aide à la frappe). Visual Basic Editor s’ouvre dans une fenêtre à lui, qui est distincte de la fenêtre Excel. Cette fenêtre s’appelle d’ailleurs « Microsoft Visual Basic ».
d.1) Ctrl + space
Contrôle + espace dans VBE permet de compléter automatiquement la frappe. Exemple : on tape « App » sur une nouvelle ligne, puis on fait ctrl + espace. L’éditeur nous suggère alors les diverses possibilités.
e) Les parenthèses
Prenons la fonction MsgBox. Tapons MsgBox dans Visual Basic Editor, et appuyons sur F1 pour obtenir l’aide. Une aide s’affiche en français, qui nous indique qu’il s’agit d’une fonction( et non pas une méthode, sinon « méthode » serait écrit dans l’aide).
Syntaxe affichée dans l’aide :
MsgBox(prompt[, buttons] [, title] [, helpfile, context]) 'il manque le retour qui est un integer
On nous dit que MsgBox retourne un integer, donc ceci manque à la déclaration de syntaxe ci-dessus.
On peut remarquer qu’on nous indique des parenthèses dans la syntaxe, et qu’on nous donne l’exemple :
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Souhaitez-vous continuer?" ' Définit le message.
Style = vbYesNo + vbCritical + vbDefaultButton2 ' Définit les boutons.
Title = "Démonstration de MsgBox " ' Définit le titre.
Help = "DEMO.HLP" ' Définit le fichier d'aide.
Ctxt = 1000 ' Définit le contexte de
' la rubrique.
' Affiche le message.
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then ' L'utilisateur a choisi Oui.
MyString = "Oui" ' Effectue une action.
Else ' L'utilisateur a choisi Non.
MyString = "Non" ' Effectue une action.
End If
Lors de l’appel de la fonction MsgBox ici, on a mis les paramètres entre parenthèses. La raison est qu’on utilise la valeur de retour ici, donc que la fonction est utilisée en tant que fonction, et pas en tant que procédure. Pourquoi cette différence de syntaxe ? Je suppose que c’est pour nous simplifier la vie. En effet, les parenthèses représentent bien une fonction( comme les fonctions mathématiques, par exemple). Alors que quand c’est une procédure( et on peut dire que c’est une procédure si on utilise pas la valeur de retour !), il peut paraître plus intuitif de ne pas mettre de parenthèses.
Autre intérêt : la programmation est rendue plus sûre, car on indique explicitement ce qu’on veut( utiliser en tant que procédure ou en tant que fonction). Ainsi, si on n’utilise pas la valeur de retour d’une fonction, on est certain que le programmeur l’aura fait consciemment, et pas par erreur ou par oubli.
En essayant d’enlever les parenthèses, VBE( Visual Basic Editor) nous annonce une erreur de syntaxe. De même, en enlevant la valeur de retour, et en essayant de laisser les parenthèses, on a ici aussi une erreur de syntaxe.
e.2) Cas du passage par valeur et des parenthèses
Attention, il existe un cas particulier, pour les fonctions qui n’ont qu’un paramètre.
Par exemple, on appelle la fonction maProc
maProc monParam
Dans ce cas, c’est comme d’habitude.
Mais on a le droit de faire, dans ce cas particulier d’un seul paramètre :
maProc( monParam) 'on indique expressément qu’on passe monParam par valeur
Ici, les parenthèses indiquent expressément qu’on passe monParam par valeur, et non par référence comme cela aurait été le cas par défaut.
Il s’agit ici d’une syntaxe particulière, propre aux fonctions à un seul paramètre. Microsoft exploite une possibilité de syntaxe laissée libre, pour faire une syntaxe signifiant qu’on veut passer le paramètre par valeur( c’est la signification de cette syntaxe).
e.3) Le cas du Call
Call est une instruction facultative servant à appeler une procédure ou une fonction. Mais pour les fonctions, on ne peut pas utiliser la valeur de retour de la fonction( c’est donc juste pour les fonctions qu’on utilise en tant que procédure !).
Exemple :
Call maProc( paramA, paramB)
Ici les parenthèses sont obligatoires, dans tous les cas( un seul paramètre ou plus). Cela peut sembler logique car le call est une instruction de VBA qui appelle quelque chose qui peut être considéré comme une instruction( votre procédure). Donc il peut sembler naturel « d’encapsuler » au maximum notre deuxième instruction, par rapport à la première.
Et pour indiquer, comme ci-dessus, qu’on veut passer le paramètre par valeur, on fera :
Call maProc( (paramA) )
On entourera donc le paramètre entre parenthèses.
e.4) Les paramètres nommés
Exemple :
Response = MsgBox(Prompt:=Msg, Buttons:=Style, Title:=strTitle, HelpFile:=Help, Context:=Ctxt)
On indique le nom du parametre, puis “:=”, puis la valeur du paramètre. L’intérêt est la clarté de lecture, surtout si on a une suite de valeurs numériques comme paramètre.
Remarque : dans ce cas bien précis, on utilise := pour l’affectation. Mais en VBA, dans tous les autres cas, on utilise « = » pour l’affectation. Ici, c’est :=, car il y aurait pu y avoir ambiguité avec le = du test de comparaison.
Un autre intérêt des paramètres nommés est qu’on peut renseigner uniquement les paramètres qui nous intéressent( les autres seront renseignés avec des valeurs par défaut !).
Exemple :
Response = MsgBox(Prompt:=Msg, Buttons:=Style, HelpFile:=Help, Context:=Ctxt)
Ici, on a omis le paramètre ‘Title’. Par défaut, il vaudra « Microsoft Excel ».
Remarque : on peut effectuer la même chose, sans les paramètres nommés, en ne renseignant tout simplement pas le paramètre :
Response = MsgBox(Msg, Style, , Help, Ctxt) 'Remarquez les deux virgules qui se suivent
Un autre avantage est aussi de mettre les paramètres dans l’ordre qu’on désire. Et si on se trompe d’ordre, ce qu’on voulait ne sera pas mal compris, on est sûr qu’un paramètre ne sera pas pris pour un autre.
Exemple :
'ATTENTION l’ordre des paramètres est changé volontairement
Response = MsgBox(Title:=strTitle, Prompt:=Msg, Buttons:=Style, HelpFile:=Help, Context:=Ctxt)
f) Le débogueur
Sous VBE, on peut lancer l’exécution de votre macro en mode débogage pas à pas, en appuyant sur F8. Chaque appui sur F8 avancera l’exécution d’une ligne.
g) Les procédures
Exemple de procédure
Sub MacroTest( ) 'votre macro
maProc
End Sub
Sub maProc( )
MsgBox « On est dans maProc »
End Sub
g.1) La macro
On remarque qu’une macro est une procédure( Sub), et que c’est un point d’entrée du programme( équivalent du main du langage C). Ainsi, dans l’exemple ci-dessus, lorsque vous faîtes F8, Excel sait qu’il doit exécuter la Sub MacroTest.
On constate également qu’une macro est juste une procédure( Sub), comme n’importe quel autre Sub.
II) L’objet application
L’objet application est un objet qui représente votre application. On peut donc considérer que c’est une variable d’environnement, qui permet d’interagir avec l’environnement.
h.1) La propriété ActiveCell
Application.ActiveCell donne la cellule active
Application.ActiveCell.Value = "OUI"
Ou encore( équivalent) :
Application.ActiveCell = "OUI"
On peut écrire
ActiveCell = « OUI », et c’est tout, sans avoir besoin de préciser « Application » avant.
Attention : il s’agit bien ici d’une propriété de l’objet Application.
h.2) La propriété ActiveSheet
(Application.)ActiveSheet est la feuille active de votre classeur.
h.2.a) L’objet Range
MsgBox ActiveSheet.Range("C1")
Définition de Range de l’aide F1 :
« Cette collection représente une cellule, une ligne, une colonne ou une sélection de cellules contenant un ou plusieurs blocs contigus de cellules ou une plage 3D. »
On peut dire que l’objet Range de ActiveSheet.Range, est un objet contenant toutes les cellules de la feuille active. L’objet Range est donc une collection contenant un ensemble de cellules. Et on demande une de ces cellules, en précisant ses coordonnées x et y.
Donc
MsgBox ActiveSheet.Range("C1")
Affiche la valeur de la cellule de coordonnées C1, de la feuille courante.
En réalité, cela équivaut à
MsgBox ActiveSheet.Range("C1").Value
- Mais on peut aussi écrire
ActiveSheet.Range("C1:H4").Value = "NON"
Ceci met à « NON » la plage de cellules C1:H4, ce qui signifie les cellules des 4 premières lignes, et des colonnes C à H, soit 6*4 = 24 cellules. Cette écriture est inhabituelle dans les langages de programmation objet, car d’habitude, on demande un objet de la collection d’objets. On demande donc ici un ensemble d’objets de la collection d’objets, et le résultat n’est donc pas un objet de la collection, mais un ensemble d’objets de la collection. Le résultat de Range est donc, lui-même soit une cellule, soit une collection de cellules.
D’ailleurs on peut écrire :
ActiveSheet.Range("C1:H4").Range("C2:H3") = "YES"
Le deuxième Range commence sa numérotation de coordonnées en se référant au premier Range retourné. Donc les coordonnées A1 du deuxième Range, c’est le coin supérieur gauche du résultat du premier Range. On remarque qu’on a débordé de la capacité du premier Range, en demandant « C2 :H3 » car on déborde de deux colonnes dans la capacité du premier Range. Mais ca marche quand même.
h.3) La propriété Sheets
Application.Sheets("Feuil2").Range("A1") = "Trouvé"
Ou encore
Sheets("Feuil2").Range("A1") = "Trouvé"
Ou encore
Application.Sheets.Item("Feuil2").Range("A1") = "Ok"
Donc Item est la propriété "par défaut".
On met la valeur « Trouvé » dans la cellule de coordonnée A1 de la feuille « Feuil2 ».
La propriété Sheets est donc une collection de feuilles.
III) Généralités sur Excel
On peut considérer qu’une feuille excel est à peu près l’équivalent d’une table en base de données. Les colonnes étant les champs de la table, et chaque ligne étant un enregistrement de la table. Et qu’un classeur est donc un ensemble de tables, donc l’équivalent d’une base de données.
Ces comparaisons peuvent vous aider à mieux vous représenter les choses.
III.1) La barre d’outil Visual basic
Vous pouvez disposer d’une barre d’outil visual basic, en faisant Affichage->Barre d’outils->Visual Basic( si ce n’est déjà fait). Une petit barre d’outil apparaît alors, que vous devez éventuellement déplacer pour la placer avec les autres( elle va « s’accrocher » toute seule). Cette barre d’outil vous permet d’avoir des icônes très pratiques.
III.1.a) Enregistrer une macro
Parmi les icônes de la barre d’outil, il y a une icône qui a la forme d’un gros point rouge, et qui est « Enregistrer une macro ». L’enregistrement d’une macro, c’est juste exécuter les actions qu’on veut que notre macro exécute, puis cliquer sur l’icône d’arrêt de l’enregistrement. Le code VBA correspondant aux actions qu’on a faites est automatiquement généré. Cela vous évite d’avoir à programmer le VBA, et c’est aussi un gage d’absence de bug. Cela permet également d’avoir des exemples de code VBA, donc d’apprendre le VBA !
III.1.b) Les autres icônes de la barre d’outil
- « Sécurité » permet de choisir le niveau de sécurité des macros.
- L’icône « Visual Basic Editor » permet de démarrer la fenêtre Visual Basic Editor.
- D’autres icônes sont intéressantes, nous les verrons sans doute plus tard.
RETOUR HAUT