Par Fabrice Pasquier Cours III 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 Integer a = 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 --- instructions End Function Appel: a = nom_fonct ("salut")
Fonctions Exemple: Public Sub prog1() Dim v1 As Integer v1 = somme(3, 5, 7) MsgBox v1 End Sub Public Function somme (op1 As Integer, op2 As Integer, op2 As Integer) As Integer somme = 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: On Error Resume Next Permet de sauter la ligne qui crée le problème 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) Exemple Exemple Public Sub prog1() Dim v1 As Integer, v2 As Integer On Error Goto gesterr1 v1 = InputBox("Enter votre âge:") v2 = v1 + 15 On Error Goto 0 Exit Sub gesterr1: MsgBox "L'âge n'est pas correct.", vbCritical + vbOKOnly End Sub Exemple
Identation des programmes Non obligatoire Rend lisible le programme Identer après: If While, For Function Sub Select Case Public Sub prog1() Dim i As Integer, j As Integer For i = 0 To 9 For j = 0 To 10 MsgBox i Next j Next i End Sub
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: En lecture No du 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 Détection de la fin du fichier Lecture d'une ligne du fichier Fermeture du fichier
Accès au système de fichiers (3) Syntaxe pour l'écriture d'un fichier: Public Sub ecrirefichier() Dim liste As Integer liste = 0 Open "cible.txt" For Output As #1 Do While liste < 100 liste = liste + 1 Print #1, liste Loop Close #1 End Sub En écriture Ecrit une ligne dans le fichier