Classeurs, feuilles de calcul

Workbooks Classeur ouvert Workbooks("toto") désigne le classeur ouvert toto
On peut dire aussi Workbooks("toto.xls")
Workbooks(2) désigne le 2ème classeur ouvert
Workbooks.Open "toto" ouvre le classeur toto dans le répertoire actif
Workbooks.Open "c:\truc\toto.xls"
Workbooks("machin").close ferme le classeur machin
Workbooks("machin").close(False) ferme sans enregistrer
ActiveWorkbook désigne le classeur actif
ThisWorkbook désigne le classeur contenant la macro
ActiveWorkbook.SaveAs "c:\chose.xls" enregistre le classeur actif sous le nom de chose.xls
ActiveWorkbook.SaveCopyAs "c:\chose.xls" enregistre une copie du classeur actif
Workbooks.Add crée un nouveau classeur et renvoie l'objet correspondant (Set toto = Workbooks.Add)
Workbooks.Open(filename := "toc").RunAutomacros which:=xlAutoopen lance le fichier toc avec ses macros automatiques
Sheets, Charts Feuille d’un classeur (feuille de calcul ou graphique) Sheets("machin") désigne la feuille machin du classeur actif
Sheets(2) désigne la feuille n°2
Workbooks("toto.xls").Sheets(2) désigne la 2ème feuille du classeur toto
Sheets("machin").Select sélectionne la feuille machin
ActiveWorkbook.Sheets("machin") désigne la feuille machin du cl actif
ActiveSheet désigne la feuille active
Charts désigne les graphiques
Worksheets désigne les feuilles de calcul
Range Plage de cellules Range("A1:B7") ou Sheets("toto").Range("A1:B7")
ou bien simplement [A1:B7]
Range("A1:B7" ).Select sélectionne la plage A1:B7
Application.Goto Range("Z100"), True sélectionne la plage Z100 et la place dans le coin supérieur gauche de l'écran
Range("truc") si la plage a été nommée truc dans la feuille de calcul
Range("A1:B7").Offset(1,2) renvoie la plage décalée de une ligne et deux colonnes
Range("A1:C3").Resize(1,2) renvoie la plage de une ligne et deux colonnes commençant en A1 (A1:B1)
Range("truc").Address renvoie l’adresse de la plage truc ($A$1:$B$7)
Range("truc").Address(True,False,xlR1C1,,[A2]) renvoie au format R1C1 l'adresse de truc avec n° de ligne absolu et n° de colonne relatif à A2.
[B5].Address(, , , True) renvoie l'adresse complète de B5 sous la forme [zaza.xls]Feuil1!$B$5
On peut dire Range ("[Classeur1]Feuil1!$A$1") pour Workbooks ("Classeur1").Sheets("Feuil1").Cells("$A$1").
Cells Cellules Range("A1:B7").Cells(2) désigne la 2ème cellule de la plage A2:B7, soit la cellule B2
Sheets("toto").Cells(2) désigne la cellule B1 de la feuille toto
Cells(1,2).Select sélectionne la cellule B1 (ligne1, colonne2)
Selection.Cells(2).Activate active la 2ème cellule de la zone sélectionnée
ActiveCell désigne la cellule active
ActiveCell.Row désigne le n° de ligne de la cellule active
ActiveCell.Column désigne le n° de colonne de la cellule active
Columns Colonnes Sheets(" toto ").Columns(2) désigne la colonne B:B de la feuille toto
Ne pas confondre l'objet Columns(2) et la variable Column qui désigne le numéro de colonne : Range("B1").Column renvoie 2
Rows Lignes Rows(4) désigne la quatrième ligne
Name, Path Nom, chemin d’accès ThisWorkbook.Name nom du fichier contenant la macro
ActiveWorkbook.FullName nom avec chemin d’accès
ThisWorkbook.Path chemin d’accès
ActiveSheet.Name nom de la feuille active
Sheets(2).Name nom de la deuxième feuille du classeur actif
Select activate save print open Close Sélectionner, activer, sauvegarder, imprimer, ouvrir, fermer  
Copy, Paste Copier, coller  

 
Manipulation directe de fichiers


Dir Recherche de fichier Dir("a:\machin\*.xls") renvoie le nom du premier fichier xls du répertoire machin. Dir renvoie les suivants
Dir("a:\truc",vbdirectory) vérifie l’existence du répertoire truc
ChDir Change de répertoire ChDir("c:\machin") active le répertoire machin
ChDrive Change de disque ChDrive("a:\") sélectionne le lecteur a
CurDir Dossier en cours Chemin complet du répertoire actif
FileCopy Copie un fichier Filecopy "c:\truc.xls", "a:\machin.xls" enregistre le fichier truc sous le nom machin sous a
Kill Supprimer un fichier Kill("c:\truc.xls") supprime le fichier truc (utiliser avec prudence !)
RmDir Supprimer un répertoire Ne marche que si le répertoire est vide
MkDir Crée un fichier Mkdir "c:\nouvfich" crée un nouveau fichier nommé nouvfich
Name Renomme un fichier Name f1 as f2 renomme f1 en f2, éventuellement en le changeant d’emplacement (en spécifiant le chemin d’accès)
FileSearch Recherche un fichier Cf exemple ci-dessous
FileLen Taille du fichier FileLen("fichiermachin") renvoie sa taille
Application.Defaultfilepath Chemin par défaut Répertoire sélectionné par défaut à l’ouverture de l’application
Application.StartupPath Chemin de xlOuvrir Répertoire contenant les fichiers démarrés à l’ouverture d’Excel
Environ("tmp") fichiers temporaires Renvoie l’adresse du répertoire contenant les fichiers temporaires
Application.LibraryPath Chemin du dossier Macrolib Macrolib est le répertoire contenant les macros complémentaires (collection Addins)
IsAddin Macro complémentaire ActiveWorkbook.IsAddin=True transforme le fichier actif en macro complémentaire
Addins.Add Macro complémentaire Addins.Add("c:\truc.xla").Installed=True place la macro complémentaire dans addins et l’installe 
Addins("truc").Installed=False désactive la macro compl "truc"
On peut aussi manipuler les fichiers en utilisant l'objet Scripting.FileSystemObject (cliquez ici)
 
Manipulation de caractères

Inscrire les textes entre guillemets "truc"

Right Partie droite du texte Right(text,5) renvoie les 5 derniers caractères du texte nommé text
Left Partie droite du texte Left("bonjour",3) renvoie " bon "
Len Longueur du texte Len("bonjour") vaut 7
Mid Partie centrale Mid(" bonjour ",2,3) renvoie " onj " (3 caractères à partir du 2ème)
Instr Recherche une chaîne Instr("bonjour", "jo") renvoie 4 (jo à partir de la 4ème lettre)
Instr("bonjour", "ja") renvoie 0 (pas trouvé)
& Accole 2 textes "bon" & "jour" renvoie "bonjour".
Attention, & doit être précédé et suivi d'un espace
Like Comparaison textes S1 like S2 est vrai si les deux textes sont identiques (on peut utiliser ? pour 1 caractère, * pour plusieurs caractères et # pour un chiffre dans S2)
"bonjour" like "?onj*" est vrai
Substitute Remplace des caractères Fonction de feuille Excel (cf. ci-dessous fonctions)
Application.WorksheetFunction.Substitute("bonjour", "bon", "abat") renvoie "abatjour"
Format Modifie le format Format ("Machin",  ">") renvoie MACHIN
CHR(13) Passage à la ligne  
CHR(10) Saut de ligne  
CHR(34) guillemet
CHR(64+col)   Renvoie "A" pour col=1, "B" pour col=2…

 
Manipulation de chiffres, fonctions, tableaux

+, -, *, /, ^,\, Mod opérateurs ^ pour les puissances
\ quotient exact, Mod reste de la division
=, <, >, <>, >=, is (in)égalités Is pour les objets
IsNumeric Test nombre IsNumeric("bonjour") est faux
Not, Or, And Opérateurs logiques Not IsNumeric("bonjour") est vrai
Format Formats de nombres Format(Date, "dd mm yy") renvoie la date sous la forme 02 07 99
CStr Transforme un nombre en texte CStr(123) renvoie  "123"
CInt Transforme un texte en nombre entier CInt("2") renvoie la valeur 2
Application.WorksheetFunction Utilisation des fonctions Excel Permet d’utiliser dans des macros toutes les fonctions des feuilles Excel (en anglais) : Application.WorksheetFunction.Log(5) renvoie la valeur de log(5)
Day, Month, Hour, Now, Date, Time, WeekDay, DateValue, DateSerial, DateAdd Jour, mois Day("12/5/99") renvoie 12
WeekDay("5/7/99") renvoie 2 (lundi, 2ème jour de la semaine)
DateValue("3 01 99") ou DateSerial(2000,10,02) renvoient le numéro d'ordre correspondant
Evaluate Lit une formule Evaluate("SUM(A1:A10)/4) ou [SUM(A1:A10)/4] calcule la formule écrite en texte (id. =INDIRECT() dans une feuille de calcul)
Array Définit un tableau cliquez ici

 
Boîtes de dialogue

InputBox Boite de saisie InputBox("entrez le nom") propose la saisie d’un nom et renvoi ce nom (renvoie un texte)
Avec Type:=8, Inputbox renvoie une plage de cellules (à sélectionner à la souris)
Set cell = Application.InputBox("truc", "machin", Type:=8)
(voir aussi RefEdit dans les contrôles)
MsgBox Message MsgBox("Bonjour") affiche une boite de dialogue disant bonjour
Msgbox question If MsgBox("question ?", vbYesNo)=vbNo then…
Permet de poser une question et d’orienter le déroulement de la macro en fonction de la réponse
Dialogs Boites de dialogue
prédéfinies
Application.Dialogs(xlDialogNew).Show affiche la boite " nouveau classeur "
Application.Dialogs(xlDialogOpen) pour Fichier / Ouvrir
Application.Dialogs(xlDialogOpen).Show("c:\zaza.xls") pour proposer l'ouverture de zaza.xls
cliquez ici pour plus de détails.
Application.Dialogs(xlDialogPrint) pour Fichier / Imprimer
Application.Dialogs(xlDialogFonts) pour les polices de caractères
Application.Dialogs(xlDialogZoom) pour régler le zoom...
Application.Dialogs(xlDialogSaveAs) pour enregistrer
Application.GetOpenFileName affiche la boîte de dialogue sans ouvrir
Application.GetSaveAs affiche la boîte de dialogue sans enregistrer
Userform Boite de dialogue
(personnalisée)
Userform1.Show pour afficher la boîte de dialogue
Userform1.Hide pour masquer la boîte de dialogue
Unload Userform1 pour "vider" la boîte de dialogue

 
Contrôles


CommandButton Bouton CommandButton1.Caption = " truc " inscrit truc sur le bouton
CommandButton1.Top =5 positionne le bouton à 5 points du haut
Scrollbar Barre de défilement ScrollBar1.Min=1 définit la valeur mini
Label Texte seul Label.Caption renvoie le texte de la zone de texte
Boite de saisie TextBox.Text renvoie le texte inscrit dans la boîte
SpinButton Bouton de défilement  
CheckBox Case à cocher  
OptionButton Bouton d’option  
ListBox Liste exemple
ComboBox Liste modifiable  
RefEdit Saisie de références Références de cellules (saisie possible à la souris)
UserForm1.RefEdit1.Text renvoie l'adresse de la plage sélectionnée avec le RefEdit1 de Userform1
(voir aussi InputBox)
Top, Left, Heigh, Width Dimensions, position  
Max, Min, SmallChange, LargeChange Bornes pour ScrollBar ou SpinButton  
Text, Value Texte, valeur  
ControlSource Plage de cellules associée à un contrôle  
Click, Change, Enter, KeyDown, Scroll… Evénements utilisables pour les contrôles  
CommandBar Barre d’outils, menu voir exemple simple et plus élaboré
CommandBarButton Bouton, élément de menu  
CommandBarPopUp Sous menu  

 
Boucles, branchements

 
If…Then…Else…
End If
Si, sinon, alors
 
For… next A chaque… suivant For truc = 3 to 10 …. Next
For Each… next Pour chaque objet For Each truc in Range("A1:A50")… Next
Do… Loop Until… Boucle jusqu'à…  
Do… Loop While Boucle tant que  
While… Wend Tant que  
GoTo… Aller à GoTo étiq
étiq:
On error GoTo… Gestion d'erreur On Error GoTo étiq
On Error Resume Next Gestion d'erreur Saute la ligne erronée
On error GoTo 0 Gestion d'erreur Annule tous les "On Error" précédents
Exit For Sortie de boucle  
Exit Sub Arrête la macro Interruption de macro
Call Lancer une macro Call ThisWorkbook.macrochose lance macrochose
On peut dire simplement : macrochose (tout seul)

 
Evénements


OnKey Evénement touche Application.Onkey  "{ESC}",  "macrochose" déclenche la macro macrochose dès qu’on tape sur ESC
Touches combinées avec MAJ +, CTRL ^, ALT %:
Application.Onkey "%C" pour ALT + C
OnTime Evénement heure Application.OnTime Now + TimeValue("00:00:15"), "macrochose" lance macrochose dans 15 secondes
On Error Gestion d'erreur On error GoTo truc

truc:
Worksheet_Activate Activation de feuille Private Sub Worksheet_Activate()
macro démarrant à l'activation de la feuille
Worksheet_BeforeDoubleClick Double click Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Target est l'endroit où on double-clique
Worksheet_BeforeRightClick Click droit  
Worksheet_Calculate Au moment du calcul  
Worksheet_Change changement Dès qu'une cellule est modifiée
Worksheet_Deactivate    
Worksheet_SelectionChange   Dès qu'on change de zone sélectionnée
Workbook_Activate   A l'activation du classeur
Workbook_BeforeClose fermeture Macro déclenchée avant fermeture du classeur
Workbook_BeforeSave enregistrement Avant enregistrement
Workbook_Open ouverture Macro activée dès l'ouverture du classeur
Workbook_SheetChange    
Workbook_WindowActivate    
CommandButton1_Click boutons  
CommandButton1_DblClick    
CommandButton1_GotFocus    
CommandButton1_KeyDown    
CommandButton1_MouseMove    
CommandButton1_MouseDown    
…autres contrôles   Rechercher dans la feuille de code correspondant à la feuille Excel contenant les objets sur lesquels on souhaite agir.
Application.EnableEvents=False empêche le déclenchement d'événements Application.EnableEvents=true pour rétablir le déclenchement d'événements

 
Manipulation d’applications


Shell Démarre un programme Shell("c:\truc.exe") lance le programme truc et renvoie son n° d’ordre de tâche
Shell("c:\truc.exe",vbNormalFocus) lance truc dans une fenêtre normale
truc=Shell("C:\zaza\msaccess.exe base.mbd",1) ouvre la base Access
AppActivate Active un programme AppActivate("truc")
AppActivate(2) active la tache n°2
Utilisez Appactivate quand vous lancez une application avec Shell :
idww = Shell(C:\Program Files\Microsoft Office\Office10\Winword.EXE C:\monDoc.doc, 1)
AppActivate idww
SendKeys Commande du clavier SendKeys "Bonjour" équivaut à frapper Bonjour sur le clavier
SendKeys "%FOtruc.xls{Enter}", True revient à frapper ALT+F, O, truc.xls, Enter, et donc à ouvrir truc.xls
(% pour ALT, + pour MAJ, ^ pour CTRL)
Ajouter "DoEvents" après SendKeys pour que les commandes envoyées par SendKeys soient executées avant la poursuite du programme VBA
CreateObject Création d’objet
(OLE Automation)
Set truc = CreateObject("Word.Application") ouvre une instance de Word, nommée truc
Set truc = New Application ouvre une nouvelle instance de l’application en cours, nommée truc
GetObject (chemin, classe) Affectation d’objets Set truc = GetObject(,"Word.Application") nomme truc l’application Word en cours
Set machin = GetObject("c:\truc.doc") nomme machin le fichier truc.doc
Set truc = Application nomme truc l’application en cours
cliquer ici pour plus de détails et des exemples
 
 
Divers


Application.UserName Nom d’utilisateur  
Application.Enablecancelkey Gestion des interruptions de macro Quand la macro est interrompue par ESC ou CTRL+ATTN
Application.Enablecancelkey=xlDisabled ignore l’ordre d’arrêt (attention aux boucles sans fin !)
Application.Enablecancelkey=xlErrorHandler renvoie une erreur 18 (qui peut être gérée par If Err=18…)
Application.Enablecancelkey=xlInterrupt rétablit la possibilité d’interrompre manuellement la macro
ScreenUpdating Rafraîchissement d’écran Application.ScreenUpdating = False fige l’écran sauf contrordre jusqu’à la fin de la macro
Count Nombre d’éléments Workbooks.Count renvoie le nombre de classeurs ouverts
Workbooks("truc").Sheets.Count renvoie le nombre de feuilles du classeur truc
Range("A2 :D7").Cells.Count compte le nombre de cellule de la plage A2 :D7
Selection.Cells.Count le nombre de cellules de la plage sélectionnée
With…
.
.
.
End With
  Utilisé pour éviter de répéter un objet
With Cells.Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 12
.ColorIndex = 5
End With
Beep Bip !  
VBComponents.Add ajouter un module ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
InsertLines ajouter du code dans un module Set Module = ThisWorkbook.VBProject.VBComponents("Module1")
Module.CodeModule.InsertLines 2, "'toto"
inscrit 'toto en ligne 2 de module1
FollowHyperlink ouvre un fichier html ActiveWorkbook.FollowHyperlink "http://jacxl.free.fr/cours_xl/accueil.html", , True
pour activer un lien existant :
Range("B1:C10").Hyperlinks(2).Follow(True)
Application.EnableEvents=False empêche le déclenchement d'événements Application.EnableEvents=true pour rétablir le déclenchement d'événements
Application.cursor modifie la forme du curseur Application.Cursor=xlWait (affiche le sablier)
Application.Cursor=xlNormal ou xlDefault (rétablit le pointeur)
remarque sur les fonctions   Find, CurrentRow, CurrentArray, Precedents et DirectPrecedents ne marchent pas dans les fonctions VBA appelées à partir de formules

Exemple : pour recopier dans le classeur toto le module "Module1" du classeur zaza
Sub Macrocrodile()
Workbooks("zaza.xls").VBProject.VBComponents("Module1").Export ("c:\rien.bas")
Workbooks("toto.xls").VBProject.VBComponents.Import ("c:\rien.bas")
Kill ("c:\rien.bas")
End Sub

pour ajouter au module Module_truc du classeur toto toutes les macros du module "Module1" du classeur zaza
ThisWorkbook.VBProject.VBComponents("Module1").Export ("c:\rien.bas")
Workbooks("toto.xls").VBProject.VBComponents("Module_truc").CodeModule.AddFromFile ("c:\rien.bas")
Kill ("c:\rien.bas")


 
Un peu de Word

Documents   Documents.Open("c:\truc.doc")
ActiveDocument.PrintOut
Pages Pages  
Paragraphs Paragraphes  
Sentences Phrases  
Characters lettres  
Quit Quitter Application.Quit(wdDoNotSaveChanges)
Private Sub Document_Close()   Macro déclenchée avant la fermeture
Private Sub Document_Open()   Macro déclenchée à l'ouverture du document

 
fichiers textes


Open ouvre le fichier Open "c:\ww\tr.txt" For Input Access Read As #1
    ouvre le fichier en lecture
Open "c:\ww\nouv.txt" For Output As #1
    crée un nouveau fichier ouvert en écriture
Open "c:\ww\truc.txt" For Append As #1
    ouvre le fichier "truc" pour lui faire des ajouts
Close ferme Close #1
Print écrit Print #1, "toto"
écrit "toto" dans le fichier texte 1
Do While Not EOF(1)
Line Input #1, truc
Loop
lit ligne entière boucle jusqu'à la fin du fichier

Un exemple simple, la création et l'affichage d'une page html :
Sub crée_page_html()
Open ThisWorkbook.Path & "\fichier.html" For Output As #1
Print #1, Chr(13) & Chr(10) & "bonjour<BR>"
Print #1, Chr(13) & Chr(10) & "Zaza"
Close #1
ThisWorkbook.FollowHyperlink ThisWorkbook.Path & "\fichier.html", , True
End Sub


Plus sur les fichiers texte (cliquez)