300 likes | 627 Views
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
E N D
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 Functionnom_fonct (variable As String) As Integer --- instructionsEnd Function • Appel: • a = nom_fonct ("salut")
Fonctions • Exemple: Public Sub prog1() Dim v1 As Integer v1 = somme(3, 5, 7) MsgBox v1End Sub PublicFunctionsomme (op1 As Integer, op2 As Integer, op2 As Integer) As Integer somme = op1 + op2 + op3EndFunction
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) Conversion de type
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 Public Sub prog1() Dim v1 As Integer, v2 As IntegerOn Error Goto gesterr1 v1 = InputBox("Enter votre âge:") v2 = v1 + 15On Error Goto 0Exit Subgesterr1: MsgBox "L'âge n'est pas correct.", vbCritical + vbOKOnly End Sub Exemple
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 iEnd Sub Identation des programmes • 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
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
Public Sub ecrirefichier() Dim liste As Integerliste = 0Open "cible.txt" For Output As #1Do While liste < 100liste = liste + 1Print #1, listeLoopClose #1 End Sub Accès au système de fichiers (3) • Syntaxe pour l'écriture d'un fichier: En écriture Ecrit une ligne dans le fichier