
· 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
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.
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
ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
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.
MsgBox Range("CelluleNommée").Address
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)
Dim XLFichier As Workbook
Set XLFichier = Workbooks.Open("D:\Atelier\zebre.xls")
MsgBox XLFichier.Worksheets(1).Range("a1").Value
Set XLFichier = Nothing
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
SIM = 3.14
ENT = Fix(SIM)
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.
CHA = Str(459) ' Renvoie " 459".
CHA = Str(-459.65) ' Renvoie "-459,65".
CHA = Str(459.001) ' Renvoie " 459,001".
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
Cet exemple montre comment affecter 5 à chaque cellule de la colonne 1 dans la plage nommée "maPlage".
Range("maPlage").Columns(1).Value = 5
|
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) |
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
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
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
1
Définition de la couleur de l'intérieur d'une sélection
Range("A3:b8").Interior.Color = 255
Sélectionner un onglet :
Worksheets("OngletA").Activate
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
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
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
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
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
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
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
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
Sub BOUannuler_QuandClic()
Msgbox "Ca Marche"
End Sub
Application.WorkBooks("Annual Sales.xls").WorkSheets("Second Quarter").Range("B3").Value = 3
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