A trier

 

Visualisation de l'environnement VBA Excel

Diverses astuces

·         Pour ne pas voir les différentes étapes de l'exécution d'un module VBA, il faut ajouter au début du module : application.MiseAJourEcran = Faux

·         Pour écrire une longue ligne de code en plusieurs lignes, on peut utiliser le trait de soulignement à la fin des lignes

Utilisation de boîtes de dialogue personnalisées

Création

Dans l'environnement VBA : Insertion/UserForm

La boîte apparaît en mode création. Il est bien de changer son nom en BODNomBoite.

A l'intérieur, on peut créer différents contrôles, qu'il est aussi bien de renommer. Afin d'exécuter du code sur certains événemnets de certains contrôles, il suffit de doublecliquer dessus.

Utilisation

Une fois créée, cette boîte peut s'appeler avec la méthode Show. Par exemple, on pourrait, directement dans un onglet excel, placer un bouton (qu'on ne peut pas nommer d'ailleurs, je n'ai trouvé nulle part la propriété Name), et appeler une macro quand on clique sur ce bouton qui fait :

BDONomBoîte.Show

Directement dans la boîte de dialogue, il est bien de placer un bouton "Fermer", qui ferme simplement la boîte de dialogue. Placer simplement le code suivant sur le bouton :

BDONomBoîte.Hide

A partir de là, on peut bien évidememnt récupérer les valeurs entrées dans les différentes zones éventuelles d'édition de la boîte de dialogue pour en faire ce qu'on veut. Par exemple, ici, on récupère le contenu d'une zone de la boîte EDIEntree pour la placer dans la cellule A5 de l'onglet courant :

Range("A5").Value = EDIEntree

Affectations de contenus de cellules

Insertion d'une fonction

ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"

Sélectionner une cellule ou une plage

Dans le cas ou on se trouve à l'angle en bas à droite d'un tableau et qu'on remonte dans le tableau, la syntaxe est plus complète :

ActiveCell.Offset(-3, -2).Range("A1:C4").Select

Dans ces exemples, j'ai utilisé CTRL SHIFT et flèches de direction. On constate que le tableau ne peut pas avoir une grandeur variable puisqu'apparemment Excel n'utilise pas les mots clés comme HOME ou END ou RIGHT ou LEFT, contrairement au déplacement simple (voir plus bas), ou ces mots clés sont utilisés par Excel.

Récupérer l'information d'une cellule

L'adresse 'une cellule nommée

MsgBox Range("CelluleNommée").Address

Imposer une formule dans une cellule

ATTENTION : Pour imposer une formule, il faut :

·         Utiliser Range("B5").Formula et PAS .Value

·         Utiliser le nom de fonction anglaise

·         Utiliser des virgules à la place des points-virgules pour séparer les arguments

Exemple d'utilisation de RoundUp (Arrondi.Sup)

Range("B5").Formula = "=RoundUp(3.25,0)"

Dans le cas ou on veut récupérer la valeur ainsi obtenue :

Msgbox Range("B5").Value

(Le résultat est 4)

Ouverture et utilisation d'un classeur fermé

Dim XLFichier As Workbook

Set XLFichier = Workbooks.Open("D:\Atelier\zebre.xls")

MsgBox XLFichier.Worksheets(1).Range("a1").Value

Set XLFichier = Nothing

Importation manuelle d'une colonne de données Access

Global BDDExemple As Database

Global TBLClient As Recordset

   

Sub ImportationExempleMDB()

    OuvertureBase

    TBLClient.MoveFirst

    Range("A1").Select

    While Not TBLClient.EOF

          ActiveCell = TBLClient("NomClient")

          TBLClient.MoveNext

          ActiveCell.Offset(1, 0).Range("A1").Select

    Wend

    ' Range("A2").Value = "Caca"

    FermetureBase

End Sub

Sub OuvertureBase()

    Set BDDExemple = DBEngine.Workspaces(0).OpenDatabase("d:\atelier\Exemple.mdb")

    Set TBLClient = BDDExemple.OpenRecordset("T_Client", dbOpenDynaset)

End Sub

Sub FermetureBase()

    TBLClient.Close

    BDDExemple.Close

    Set BDDExemple = Nothing

    Set TBLClient = Nothing

End Sub

Autres fonctions de conversions

Conversions de flottants en entiers :

SIM = 3.14

ENT = Fix(SIM)

Conversions de nombres en chaînes :

SIM = Val("24.5")     ' Renvoie 24,5.

SIM = Val("24.51")    ' Renvoie 24,51.

ENT = Val("24.5")     ' Renvoie 24.

ENT = Val("24.51")    ' Renvoie 25.

ENT = Val(" 2 45 7")  ' Renvoie 2457.

ENT = Val("24 et 57") ' Renvoie 24.

Conversions de chaînes en nombres

CHA = Str(459)     ' Renvoie " 459".

CHA = Str(-459.65) ' Renvoie "-459,65".

CHA = Str(459.001) ' Renvoie " 459,001".

Exemple complexe de ChaineNum

A noter : Le point décimal au lieu de la virgule

CHA2 = "19"

CHA3 = "95"

SIM = Val(CHA2 + "." + CHA3)

Range("A1").Select

ActiveCell.FormulaR1C1 = SIM

Affecter une valeur dans une colonne de plage

Cet exemple montre comment affecter 5 à chaque cellule de la colonne 1 dans la plage nommée "maPlage".

Range("maPlage").Columns(1).Value = 5

Propriétés de AddIn

Application

Toujours Microsoft Excel

Creator

Toujours 1480803660 (?)

Installed

Vrai ou faux selon que c'est installé

Parent

Toujours Microsoft Excel

Path

Chemin du fichier

Name

Nom du fichier (exemple : aUTOSAUV.XLA)

FullName

Chemin et nom du fichier (concaténation de Path et Name)

VB : Barres d'outils

Cette procédure exemple remplit une feuille de calcul avec toutes les barres d'outils existantes avec toutes leurs propriétés

On Error GoTo FaireErreur

Dim BarreCommande As CommandBar

Dim Prop As PropertyTest

Range("A1").Value = "Application"

Range("B1").Value = "BuiltIn"

Range("C1").Value = "Context"

Range("D1").Value = "Controls"

Range("E1").Value = "Creator"

Range("F1").Value = "Enabled"

Range("G1").Value = "Height"

Range("H1").Value = "Index"

Range("I1").Value = "Left"

Range("J1").Value = "Name"

Range("K1").Value = "NameLocal"

Range("L1").Value = "Parent"

Range("M1").Value = "Position"

Range("N1").Value = "Protection"

Range("O1").Value = "RowIndex"

Range("P1").Value = "Top"

Range("Q1").Value = "Type"

Range("R1").Value = "Visible"

Range("S1").Value = "Width"

Range("A2").Select

For Each BarreCommande In CommandBars

    ActiveCell.FormulaR1C1 = BarreCommande.Application

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.BuiltIn

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Context

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Controls

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Creator

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Enabled

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Height

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Index

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Left

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Name

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.NameLocal

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Parent

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Position

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Protection

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.RowIndex

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Top

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Type

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Visible

    ActiveCell.Offset(0, 1).Range("A1").Select

    ActiveCell.FormulaR1C1 = BarreCommande.Width

    ActiveCell.Offset(1, -18).Range("A1").Select

Next

Exit Sub

FaireErreur:

ActiveCell.FormulaR1C1 = "ERREUR"

Resume Next

Colonnes

Compter le nombre de colonnes d'une sélection

ction.Columns.Count

Dans le 'une sélection multizones

election.Areas.Count <= 1 Then

MsgBox Selection.Columns.Count

For Ctr = 1 To areaCount

    MsgBox "Zone N° " & Ctr & ". " & Selection.Areas(i).Columns.Count & " colonnes."

Next i

End If

Traiter une colonne entière

Cet exemple montre comment mettre en gras la police de la colonne 1 (colonne A) sur L'onglet OngletA.

Worksheets("OngletA").Columns(1).Font.Bold = True

Objet RANGE

1

Définition de la couleur de l'intérieur d'une sélection

Range("A3:b8").Interior.Color = 255

Onglets

Sélectionner un onglet :

Worksheets("OngletA").Activate

Sélection Multizones

Il est possible de déterminer le nombre de zones non adjacentes que l'utilisateur a sélectionné :

MsgBox Selection.Areas.Count

Cette fonction renvoie au moins 1 (Au moins la cellule active est sélectionnée). Sinon, elle renvoie le nombre de zones

Voir également Le comptage de colonnes multizones

ActiveCell

Lorsqu'on sélectionne une plage de cellules, c'est la cellule en haut à gauche qui retourne une valeur

EXEMPLE

si on sélectionne A3..F5, alors

MsgBox ActiveCell.Value

renverra la valeur de A3

Contenu des cellules

Une cellule vide n'est pas Null. Afin de constater qu'une cellule ne contient pas de valeur ni de texte, il faut faire :

If Not IsEmpty(ActiveCell.Value) Then

   MsgBox "y'a kekchose"

End If

Appel des boites de dialogues existantes

Il est possible d'appeler par leur nom toutes les boîtes de dialogues existantes dans Excel. 1 représente le numéro de la boîte de dialogue demandée

Application.Dialogs(1).Show ("c:\poubelle\*.doc") 'le paramètre est optionnel

Accès à un .MDB, via DAO

Il est possible d'accéder à des données externes depuis Excel. L'exemple suivant ouvre ba base de données D:\atelier\Source.MDB, la table T_Client, et recherche d'un enregistrement au sein de cette table

ATTENTION : Pour pouvoir utiliser les instructions DAO au sein d'Excel, il faut faire Outils/Réréfences et cocher la case "Microsoft DAO 3.5 Object Library", sinon, on n'aura pas accès à des instructions comme RecordSet, ou OpenDataBase, et une erreur de compilation se produira.

Dim BaseSource As Database

Dim TableClient As Recordset

Set BaseSource = DBEngine.Workspaces(0).OpenDatabase("d:\atelier\Source.mdb")

Set TableClient = BaseSource.OpenRecordset("T_Client", dbOpenDynaset)

TableClient.FindFirst ("NomClient = 'Kuhn'")

MsgBox TableClient("Prenom")

TableClient.Close

BaseSource.Close

Set BaseSource = Nothing

Set TableClient = Nothing

Internet

Il est possible d'aller fouiller dans des dossiers sur le web FTP. Par exemple, si nous désirons aller ouvrir un fichier sur le site FTP de microsoft, il faut faire

Fichier/Ouvrir, et taper dans la zone Fichier :

ftp://ftp.microsoft.com/ et ENTER

on entre alors sur ce site

Astuces de programmation personnelles

Cette astuce permet de lister dans une feuille de calcul l’ensemble des polices avec les accents.

ATTENTION : Pour que ce code fonctionne, il faut intégrer à Excel la bibliothèque VBA de Word 8

Dim Police

Dim Ctr

Ctr = 0

For Each Police In FontNames

    Ctr = Ctr + 1

    Range("A" & Ctr) = Police

    Range("A" & Ctr).Font.Name = "Arial"

    Range("B" & Ctr) = "éèàêôâûäöü"

    Range("B" & Ctr).Font.Name = Police

    Range("C" & Ctr) = "Servez un whisky au juge blond qui fume"

    Range("C" & Ctr).Font.Name = Police

Next Police

Boîtes de dialogues personnalisées

Utilisation de la boîte de dialogue personnalisée

Cette boîte de dialogue a été construite avec le Dialog Editor de Excel 5, et voici sa correspondance codée :

Sub AppelleBoite()

     ' Affichage de cette boîte de dialogue :

     DialogSheets("BoiteDia").Show

     ' >> ZONES DE TEXTE <<<<

' ATTENTION : FeuillesBoîteDialogue, ZonesModification et texte ne sont pas des variables définies par l'utilisateur, VariableQuelconque oui.

' Affichage d'un texte par défaut dans la zone de texte :

     DialogSheets("BoiteDia").EditBoxes(1).Strings = "Coucou"

     VariableQuelconque = DialogSheets("BoiteDia").EditBoxes(1).Strings

     DialogSheets("BoiteDia").EditBoxes(2).Strings = "essai"

End Sub

Code correspondant a la boite de dialogue personnalisée (bouton annuler)

Sub BOUannuler_QuandClic()

Msgbox "Ca Marche"

End Sub

Accès complet à une cellule

Application.WorkBooks("Annual Sales.xls").WorkSheets("Second Quarter").Range("B3").Value = 3

Astuces

Revenir au point de départ

Cette astuce permet de sélectionner tout le tableau courant, mettre toutes ses cellules en gras, et revenir à l'endroit initial. Pour mettre en œuvre cette routine :

1. Remplir de X les cellules de A1 jusqu'à B5

2. Se placer sur B4

3. Exécuter la routine

Voilà : Toutes les cellules sont en gras.

Dim Origine As Range

Set Origine = ActiveCell

Selection.CurrentRegion.Select

Selection.Font.Bold = True

Origine.Select

Voici d'autres idées pour apprendre à programmer :

- Saisie correcte d'un numéro AVS
- Jeu : Simon
- Permutation de 2 variables
- Comptage de mots d'une phrase
- Transformation d'un nombre de jours en secondes
- Séparation du nom et du prénom
- Rendre la monnaie sur une somme donnée
- Comptage du nombre de lettres d'une phrase, statistique sur les lettres
- Statistiques sur un jet de dés + Pourcentages
- Validation d'une date
- Recherche d'une chaîne de texte dans une phrase
- Affichage d'une pyramide à l'écran
- Utilisation de type pour établir une facture
- Entrer un calcul en lettres "un plus quatre"
- Fonctions : Cryptage et décryptage d'un texte
- Détermination d'un nombre premier
- Tri de chiffres et de noms
- Carré magique
- Jeu des chiffres et des lettres