VBA et Excel
Par Fabrice Pasquier
Cours III
Rappels: écriture dans une cellule
Plusieurs raccourcis possibles:– Sheets(1).Range("A1").Value = 12– Sheets("Feuil1").Range("A1").Value = 12– Range("A1").Value = 12– Worksheets(1). Range("A1").Value = 12– Worksheets("classeur.xls").Range("A1").Value = 12
Rappels: lecture d'une une cellule
Dim a As Integera = Sheets(1).Range("A1").Value
Cette syntaxe permet de prendre le contenu de la cellule A1 de la 1ère feuille de calculs et la stocker dans la variable a
Equivalence: a = Sheets("Feuil1").Range("A1").Value a =…
Méthodes et propriétés
Chaque objet (Range, Worksheet) possède une liste de propriétés et de méthodes
Une propriété est plutôt passive Une méthode est active, comme une fonction Pour simplifier: méthode = fonction
Exemples de méthodes et propriétés
L'objet Range possède les méthodes suivantes:– Activate, AddComment, AdvancedFilter,
ApplyNames, …, AutoFit, Clear, ClearContents, CheckSpelling, …
Les objets de la collection Sheets possède:– Delete, Select (méthodes) – Visible, Creator, Count
Intégration… suite
On peut maintenant faire des boucles afin de compléter des cellules, ou pour les lire
En fonction de certaines valeurs, on effectue telles ou telles opérations
Génération automatique de code
Bonne idée pour le formatage des cellules Outils -> Macro -> Nouvelle macro Spécifier le nom du programme (macro) Opérer des actions dans Excel Stopper l'enregisteur Se rendre dans l'éditeur VB pour modifier ou
adapter le code généré
Fonctions (function) dans VB
Dans un programme, cela peut-être utile de séparer les actions essentielles
On crée des fonctions qui sont appelées par la suite dans le programme principal
Syntaxe:– Public Function nom_fonct (variable As String) As Integer
--- instructionsEnd Function
Appel:– a = nom_fonct ("salut")
Fonctions
Exemple:Public Sub prog1()
Dim v1 As Integerv1 = somme(3, 5, 7)MsgBox v1
End Sub
Public Function somme (op1 As Integer, op2 As Integer, op2 As Integer) As Integersomme = op1 + op2 + op3
End Function
Conversion de type
Utilisation d'une variable dans un autre context
Une variable définie comme String contient un nombre -> Cint("expression")
Souvent implicite
CBool(expression) CByte(expression) CCur(expression) CDate(expression) CDbl(expression) CDec(expression) CInt(expression) CLng(expression) CSng(expression) CStr(expression) CVar(expression)
Exemple de conversion
Public Sub prog1()Dim special As String, age As Integer, d As Date, val As Double special = "234"age = CInt(special)d = CDate("12.04.2003")val = CDbl("324.1245454")
End Sub
Gestion des erreurs (1)
En cas d'erreur soupçonnée, on peut préparer Visual Basic à entreprendre une action
2 types de gestion:1. On Error Resume Next
– Permet de sauter la ligne qui crée le problème
2. On Error Goto qqpart– Permet de sauter à un endroit spécifique du programme
• On doit arrêter la détection des erreurs par• On Error Goto 0
Gestion des erreurs (2)
Gestion des erreurs importantes quand interraction avec utilisateur
A utiliser le moins possible Ralentit beaucoup le programme A insérer uniquement quand tout le reste
fonctionne
Gestion des erreurs (3)
ExemplePublic Sub prog1()
Dim v1 As Integer, v2 As IntegerOn Error Goto gesterr1v1 = InputBox("Enter votre âge:")v2 = v1 + 15On Error Goto 0
Exit Subgesterr1:
MsgBox "L'âge n'est pas correct.", vbCritical + vbOKOnlyEnd Sub
Exemple
Identation des programmes
Public Sub prog1()Dim i As Integer, j As IntegerFor i = 0 To 9
For j = 0 To 10MsgBox i
Next jNext i
End Sub
Non obligatoire Rend lisible le programme Identer après:
– If– While, For– Function– Sub– Select Case
Commentaires
Ajouter le plus de commentaires possibles dans un programme
Si possible, petit commentaire à côté de chaque variable déclarée
Commenter chaque nouvelle fonction 1 commentaire un moins toutes les 10 lignes Syntaxe:
– Rem commentaire commentaire, …..– ' commentaire commentaire, …..
Utilisation de l'aide de MS Excel
Toutes les fonctions sont bien documentées dans l'aide Visual Basic pour Excel
Dans Office 97, s'assurer que l'aide est bien installée. Pas fait pas défaut. Nécessite le CD d'installation
On presse sur F1 en ayant sélectionner la fonction qui pose problème
Débogage
En déhors des erreurs de syntaxe, il y a les erreurs de programmation plus subtiles
Index de tableau Variables non initialisées Comment s'y prendre ?
– Utiliser le mode pas à pas (Touche F8)– Mettre beaucoup de messages (MsgBox) dans le programme,
afin de bien vérifier le contenu des variables– L'expérience est constructive…– Utiliser des points d'arrêt (Touche F9 pour ajouter et enlever)
Démarrage d'un programme après une touche
Dans certain cas, il est utile s'associer des programmes à des touches du clavier.
On appuie sur la touche 8 et un programme est lancé. Application.OnKey "1", "test2"
– Démarre le programme test2 lorsque la touche 1 est frappé
Application.OnKey "1", ""– Ne fait rien lorsqu'on appuie sur la touche 1
Application.OnKey "1"– Rend à la touche sa fonction de base
Démarrage d'un programme à l'ouverture du fichier Excel (1)
Dans certains cas, il est nécessaire de démarrer un programme quand certaines actions se passent.– Ouverture du classeur Excel– Changement de feuille de calculs– Fermeture du classeur
Démarrage d'un programme à l'ouverture du fichier Excel (2)
Double-clique
Démarrage d'un programme à l'ouverture du fichier Excel (3)
Accès au système de fichiers (1)
Nous verrons:– Lecture et écriture de fichiers texte
Autre possibilités: (un peu compliqué !)– Lecture et écriture de fichiers binaires
En Visual Basic, on peut:– Créer des fichiers– Compléter des fichiers– Effacer des fichiers– Lire des fichiers– Créer et supprimer des répertoires
Accès au système de fichiers (2)
Syntaxe pour la lecture d'un fichier:
Dim TextLine as String
Open "fichier.txt" For Input As #1 Do While Not EOF(1) Line Input #1, TextLine
MsgBox TextLine Loop
Close #1
Ouverture du fichier
Fermeture du fichier
Lecture d'une ligne du fichier
Détection de la fin du fichier
No du fichierEn lecture
Accès au système de fichiers (3)
Syntaxe pour l'écriture d'un fichier:
Public Sub ecrirefichier()
Dim liste As Integerliste = 0Open "cible.txt" For Output As #1Do While liste < 100
liste = liste + 1Print #1, liste
LoopClose #1
End Sub
En écriture
Ecrit une ligne dans le fichier
Top Related