VBA

Nouveau

Lister tous les fichiers - Avec ce classeur, listez tous les fichiers d'un dossier, ainsi que tous ses sous-dossiers et fichiers qu'ils contiennent

Gestion des fichiers, dossiers et lecteurs - Copier, déplacer, renommer, supprimer, mettre à la corbeille des fichiers et des dossiers, gérer les dossiers spéciaux, boîtes de dialogue intégrées de choix de fichier, analyse complète de l'arborescence et recherche de fichiers, attributs, tailles, lecteurs disponibles, création, modification et recherche dans des fichiers textes, et un grand exercice à la fin.

Un didacticiel très complet qui vous permet de synthétiser plusieurs classeurs dans un classeur de consolidsation ! Idéal pour s'immerger dans VBA Excel quand on est débutant !

Base

Programmez Office avec VBA

Les premières leçons du cours VBA pour Excel ici

Vous êtes un utilisateur averti de Word et d'Excel ? Vous avez souvent entendu parler de VBA, ce fameux langage de programmation qui permet de décupler la puissance de vos logiciels favoris ? Vous êtes tombé juste !Grâce à VBA (Visual Basic pour Applications), vous allez pouvoir automatiser plein de choses, et devenir encore plus productif.
Il faut savoir que Visual Basic est décliné en de nombreuses variantes : Il existe Visual Basic "Pur et Dur", qui est un langage de programmation commercialisé tel quel, et qui est vraiment destiné aux développeurs professionnels. Ensuite, Microsoft a intégré ce Visual Basic au sein de ses applications phaes : a savoir Office. Aussi, il existe Visual Basic pour Word, pour Excel, Pour Access, pour PowerPoint et pour Outlook. Pourquoi y a-t-il autant de variantes ? Simplement parce que chaque programme a ses spécificités : En effet, Word n'a nul besoin d'une commande de création de nouvel onglet spécifique à Excel, Excel, n'a nul besoin de comamndes Visual Basic permettant de créer un nouveau Courrier (spécifique à Outlook), et ainsi de suite. Par contre, certaines instructions, comme le MsgBox par exemple, qui permet d'afficher un court message à l'écran, est, lui, présent dans tous les Visual Basic que vous rencontrerez.
Au début de votre apprentissage, nous allons commencer par aborder les principes de programmation identiques dans tous les Visual Basic, aussi, peu importe le programme que vous allez utiliser (Word, Excel, Access, Powerpoint ou Outlook). Cependant, pour des raisons de pédagogie et de pratique, certains chapitres sont plutôt effectués avec Word, surtout en début d'apprentissage, et, petit à petit, nous allons principalement nous tourner vers Excel, pour étudier son VBA plus en profondeur. Pourquoi cette préférence ? Simplement parce qu'il s'avère qu'Excel est habituellement le programme pour lequel on désire le plus vite et le plus possible se tourner vers sa programmation.

Première approche

Que sont les objets ? Exemple du téléphone portable - Qu'entend-on exactement par "Programmation Orientée Objet" ? ou POO. Tout vous est expliqué
Qu'est-ce qu'un programme et à quoi sert-il ? - Un peu de théorie avant de commencer
Votre première macro Excel - Avant de vous plonger dans les arcanes de la programmation avancée (VBA EXCEL)
Attacher une macro à une icône d'une barre d'outils - Afin de pouvoir appeler votre macro d'un simple clic plutôt que d'aller dans Outils/Macros/Macros
Les variables et les constantes
Les tableaux

Utilisation de la fonction InputBox et du & (Et commercial)
Calcul mental - Ou comment partir d'un petit programme pour en faire un gros

Les boucles
Les boucles DO, LOOP, WHILE et UNTIL
Affichage d'un certain nombre de fois "Bonjour" à l'écran (Do While, Until, Loop, TypeText, TypeParagraph)

Transformation d'un nombre de jours en secondes
Changer de l'argent en monnaie différente

Créez votre premier jeu en VBA !
Utilisation de beaucoup de notions de base en programmation
Trop grand, trop petit (If Then, Select Case, RND, Do Until, Loop)

Chaînes de caractères
Traitement de chaînes de caractères (Left, Right, Mid, Len, Chr)
Comptage du nombre de voyelles d'une phrase
Réécriture d'une phrase à l'envers

Eviter les messages d'alerte

Par exemple, éviter un message d'avertissement lorsque vous effacez une feuille de calcul dans EXCEL :

Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

Détermination des diviseurs d'un nombre
Utilisation des Sub et des Function
+ passage de tableaux en paramètres
Petit exercice (avec la solution)
simplement ici
Les types de données - Lors de la déclaration des variables : Variant, Byte, Boolean, Double, etc. Tableau récapitulatif

VBA EXCEL seulement :

Accès aux cellules et plages de cellules

Comment déplacer une cellule complète (Format et contenu) ?

L'exemple suivant déplace la cellule B2 dans C1 :

Range("B2").Cut Range("C1")

Quelle est la différence entre Sheets et WorkSheets ? En fait, Sheets contient toutes les feuilles, même les graphiques ou les Macros Excel 4 (En fait, tout ce que vous pouvez insérer quand vous cliquez avec le bouton droit sur un onglet et que vous choisissez "Insérer..."). Tandis que WorkSheets ne parcourt QUE les feuilles "Normales"
Sub Feuille()
  For Ctr = 1 To Sheets.Count
    MsgBox Sheets(Ctr).Name
  Next
End Sub

Sub FeuilleTravail()
  For Ctr = 1 To Worksheets.Count
    MsgBox Worksheets(Ctr).Name
  Next
End Sub


Gestion des fonctions intégrées d'Excel dans VBA - Il est très possible d'écrire des fonctions intégrées d'Excel dans des cellules depuis VBA, encore faut il avoir une syntaxe correcte.
Gestion des plages de cellules
- S'y déplacer, aller a ses limites, compter ses cellules, lignes, colonnes (CurrentRegion et consorts)
Créez votre premier complément Excel .XLA - Mettez à disposition vos procédures et fonctions à toute votre entreprise
Calculez les notes sans les extrêmes - Vous avez déjà vu les compétitions sportives à la télé ? Les juges notent, mais on exclut les notes les plus hautes et les plus basses
Sélection de cellules - Comment sélectionner la première ou la dernière cellule, ou ligne ou colonne d'un tableau donné
Ecriture, sélection, déplacement dans les cellules - Cette section explique comment écrire quoi que ce soit dans la ou les cellules de votre choix, qu'il s'agisse de la feuille courante ou d'une autre, d'un autre classeur, ou même d'un calcul
Gestion des onglets - Comment les déplacer, supprimer, renommer...
Les événements de feuilles et de classeurs - Ou l'art de savoir non seulement ce que Visual Basic va faire, mais QUAND il va le faire
Les autres événements - On peut demander à VBA d'exécuter quelque chose à une heure précise, ou dans quelques muinutes, ou lorsqu'on fait Edition/Annuler
Où les macros sont-elles stockées ? - Il est bien de savoir quels sont les endroits possibles pour ranger ses macros, car ça va déterminer quand elles seront utilisables

Raccourcis clavier

On peut assigner des raccourcis clavier aux macros. Pour ce faire, allez dans le menu Outils/Macros/Macros, choisissez la macro qui vou intéresse, et cliquez sur le bouton "Options", en bas à droite. Assignez une lettre minuscule, par exemple s. Cliquez sur OK, et Annuler (car il n'y a pas de bouton OK). Maintenant, lorsque vous appuyez sur CTRL s, Excel exécute la macro au lieu d'enregistrer le classeur (CTL s étant le raccourci de Fichier/Enregistrer). Vous l'avez donc "Supplanté". La plupart des lettres et chiffres sont déjà utilisés par Excel en fait. Pour éviter l'écrasement, lorsque vous attribuez un raccourci clavier à une macro, utilisez une lettre MAJUSCULE, par exemple S. Comme ça, CTRL s, ce sera "Enregistrer", et CTRL SHIFT s, ce sera l'appel à votre macro. Attention : il n'y a pas moyen facile d'avoir la liste de tous vos raccourcis claviers assignés aux macros, ce qui fait que si vous attribuez le même raccourci clavier à deux macros différentes, Excel ne donnera PAS de message d'erreur, mais lorsque vous utiliserez votre raccourci clavier, ce sera la macro la première dans l'ordre alphabétique qui sera exécutée !
Les macros complémentaires - Enrichissez Excel grâce à des outils pointus et puissants qui ne sont pas installés par défaut
Création de ses propres fonctions - Bien qu'il existe des centaines de fonctions Excel (Romain, Max, Min, Somme, ...), vous avez la possibilités de créer vos propres fonctions personnelles (CalculeSurface, TransformeMilesKMH, MultiplieParTrois, etc...)
Traduction des fonctions Français>Anglais
- Dans Excel, on peut écrire =SOMME(A1:A6), mais quand on fait appel à une fonction Excel en VBA, on doit utiliser l'expression anglaise... C'est comme ça. C'est en cela que cette liste va vous être utile
Formules et valeurs : Comment insérer des formules ou des valeurs avec des références absolues ou relatives dans les cellules ?
Utilisation dans VBA des fonctions Excel : Somme, Moyenne, Max, Min, etc. Il est possible de les utiliser en programmation grâce à WorkSheetFunction
Création d'une petite application (recherche des diviseurs d'un nombre) - Utilisation des boîtes de dialogues personnalisées pour un cas concret
Conseils d'optimisation - Si votre code se comporte mal, ou est particulièrement lent, il est temps de penser à l'optimiser
Le saviez-vous ? Lorsque vous allez dans Outils/Macros complémentaires et que vous cochez la case "Utilitaires d'analyse", ça ajoute un complément "FuncRes.XLA", que vous pouvez voir dans l'environnement VBA (Alt-F11), mais il est protégé par mot de passe. Celui ci est : Wildebeest!! Mais il n'y a pas de module VBA visible... c'est magique... Ce mot de passe est le même pour tous les compléments XLA disponibles.

VBA Word seulement

Apprenez a faire votre première MacroWord - a vec l'enregistreur de macro bien pratique (VBA WORD)
Exécutez du code VBA WORD lors d'événements tels que Print ou Save Comment créer des événements non inclus à la base dans Word
Pourrissez la vie des spammeurs - Les spammeurs recherchent les adresses e-mails sur tout le web. Ce petit programme vous aide à générer une immense page HTML pleine d'adresses e-mails invalides

VBA De n'importe quel programme :

Listez toutes les imprimantes installées

Sub ListeDesImprimantesInstallees()
    For Ctr = 0 To Application.Printers.Count - 1
      Debug.Print Application.Printers(Ctr).DeviceName
    Next
End Sub

Les variables d'environnement - Comment retrouver le nom de l'utilisateur courant, le nom de l'ordinateur sur lequel on est, etc.
Ici le site MSDN
(Microsoft Developer Network)

Ecrire dans le bloc-notes depuis Excel. On lance l'application Notepad.exe, et on y écrit abc. Ensuite on sauvegarde et on ferme : (Attention : ca ne marche pas avec la touche F5 dans l'éditeur VBA, mais seulement en lançans la macro depuis Outils/Macros/Macros :

Sub EcrireBlocNote()
  ' Lancement du bloc-notes :
  AppActivate Shell("Notepad.exe", vbNormalFocus)
  ' Ecrire abc dans le bloc-notes
  SendKeys "abc"
  ' CTRL S pour sauver :
  SendKeys "^s"
  SendKeys "D:\Atelier\teste.txt"
  ' Comme si on cliquait sur OK :
  SendKeys "{ENTER}"
  ' Quitter le bloc notes avec ALT F4 :
  SendKeys "%{F4}"
End Sub

Utilisez l'assistant : Ce petit personnage sur votre programme Office (Le petit trombonne ou le petit Einstein). On peut leur faire dire ce qu'on veut :

Sub UtiliserAssistant()
  With Assistant.NewBalloon
    .BalloonType = msoBalloonTypeNumbers
    .Icon = msoIconTip
    .Button = msoButtonSetOK
    .Heading = "Astuces pour travailler en sécurité"
      .Labels(1).Text = "Enregistrez souvent (CTRL S)"
      .Labels(2).Text = "Installez un pare feu"
      .Labels(3).Text = "Fermez Windows correctement"
    .Show
  End With
End Sub

Les raccourcis clavier - Comment appeler une macro avec une touche, utilisation de Application.OnKey
Le panneau de configuration (Application.International) - Il peut être très intéressant de connaître le séparateur décimal (Point ou virgule), les séparateurs de date (point ou /), etc
L'explorateur d'objets - Les propriétés, méthodes, constantes sont innombrables dans Excel. Voyez ici une vue panoramique de l'explorateur d'objets
Accès à la base de registre - Si vous voulez sauvegarder des informations générales sur la configuration de votre programme
Les macros complémentaires : Emplacement, utilisation

si vous voulez afficher le contenu d'une variable, ou bien "Vide" si sa valeur est nulle il suffit de faire :
Nz(LaVariable, "vide")

Les fonctions de conversions de type : Integer, Single, String, Texte, Monnaie, Booléen...
Interaction avec Access : Notamment accès depuis Excel à des .MDB d'Access via DAO, Importation...
Créer automatiquement un raccourci sur le bureau
Conversion de nombres décimaux en binaires, et de binaires en nombres décimaux
Extraction d'une chaîne de caractères dans une autre chaîne
Calcul de temps pour des heures supérieures à 24 heures

Exécutez une procédure à une heure précise

Admettons que vous ouvriez une feuille Excel qui restera ouverte toute la journée, mais qu'à 16:00, Excel doit vous rappeler que vous avez rendez-vous chez le coiffeur :
Rendez-vous dans la macro qui s'exécute automatiquement à l'ouverture de votre classeur (Besoin d'aide ?)

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:05"), "Coiffeur"
End Sub

Créez ensuite un nouveau module dans lequel vous créez la macro Dentiste. Elle s'exécutera une heure après que le fichier se soit ouvert :

Sub Coiffeur()
MsgBox "N'oubliez pas votre rendez-vous chez le coiffeur"
End Sub

Accédez à d'autres programmes depuis VBA

Exportation de données Access dans Excel, et envoi par e-mail - Ou comment créer un fichier Excel avec des données en provenance de tables ACcess, en utilisant Outlook
Envoyez des E-Mails en série - Une base de données Access, Outlook, et c'est parti !
Listes de diffusion - Accédez à Outlook depuis Access via VBA
Pilotez Word depuis Excel - Attention : Pour utilisateurs de VBA confirmés seulement ! C'est ce qu'on appelle l'OLE automation
Pilotez PowerPoint depuis Excel - Ou n'importe quel autre programme d'Office

Utilisation de For ... Each - Cette instruction de permet de parcourir une collection d'objets simplement
Les modules de classe
- Property Get, Let, Set, comment ça marche ?
Création de ses propres types - Suivis des tableaux de types, et collections de types personnalisés
Fonctions personnalisées prêtes à l'emploi - Apprenez comment créer des fonctions personnalisées vraiment pratique, et améliorez celles qui sont ici pour votre propre emploi
Récupérer le numéro de série du disque dur - Pour par exemple empêcher le piratage d'un programme

Afficher la résolution de l'écran

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Sub AfficherResolution()
  Largeur = GetSystemMetrics(0)
  Hauteur = GetSystemMetrics(1)
  MsgBox "La résolution de votre écran est de " & Largeur & " par " & Hauteur
End Sub

Gestion des fichiers/dossiers

Compliqué (Utilisation d'API):
Choisissez un dossier -Comment sélectionner un dossier particulier de votre ordinateur ou de votre réseau local
Les fichiers - Tout savoir sur les fichiers : Utilisation de la boîte de dialogue Ouvrir (GetOpenFileName)

Nettement plus simple :
Sélectionner des fichiers ou des dossiers - Comment sélectionner un ou plusieurs fichiers, ou un dossier avec la boîte de dialogue standard Ouvrir ou Enregistrer Sous...avec Application.FileDialog -

Fichiers texte - Comment y accéder en lecture/écriture
Recherche de fichiers - comment retrouver un fichier ou une liste de fichiers selon leur nom, contenu, date de création, etc.
Boîtes de dialogues intégrées : comment faire apparaître par exemple la boîte Fichier/Ouvrir par exemple. Choix d'un fichier de manière conviviale, GetSaveAsFileName

Boîtes de dialogues personnalisées et contrôles

Boîtes de dialogues personnalisées - Boutons, listes déroulantes, zones de textes, dans une feuille de calcul
Utilisation de boîtes de dialogues personnalisées - Il est parfois bien pratique de créer des boîtes de dialogues personnalisées. Exemple : Outils/Solveur est un bon exemple de boîte de dialogue personnalisée
Les objets de la boîte à outils pour les boîtes de dialogues personnalisées - Zones d'édition, listes déroulantes, boutons, etc.
Boîtes de dialogues personnalisées : Création, utilisation, UserForm, Show, Zones d'édition
Boîtes de dialogues intégrées : comment faire apparaître par exemple la boîte Fichier/Ouvrir par exemple. Choix d'un fichier de manière conviviale, GetSaveAsFileName

Petite astuce pour demander à une Macro d'attendre 4 secondes avant de continuer :
Application.Wait Now + TimeValue("0:00:04")
MsgBox "Terminé"

Petites astuces diverses

Quelques critères de requête utilisant le mot-clé Comme

Comment agrandir la fenêtre Access en plein écran avec VBA ?
DoCmd.Maximize ' La fenêtre active au sein d'Access
DoCmd.RunCommand acCmdAppMaximize ' Le programme Access lui-même