Easy-Micro

ESPACEMEMBRE VBA
Objet Classeur

L'objet Workbook

VBA COLLECTION
Un ensemble d'objets, souvent du même type, est une collection. Exemple : l'ensemble des classeurs d'un dossier: Workbooks. Au sein d'une collection, on identifie chaque élément par un index (numéro) ou un nom.

Exemple, Workbooks(1) identifie le premier classeur, tandis que Workbooks("nomclasseur.xlsx") identifie le classeur dont l'intitulé de l'onglet est nomclasseur.xlsx

Exemple, saisissez dans la fenêtre exécution (Ctrl + g) :
' Ouvrir un classeur
Workbooks.Open Filename:= "C:\FORMATONS\mes_macros\calculs_de_base.xlsx"

' ou bien
Workbooks.Open "chemin_nom_classeur.xlsx"

' Ouvrir un nouveau classeur vierge
Workbooks.Add

' Ouvrir un nouveau classeur en lecture seule
Workbooks.Open "monclasseur.xlsx", True, True
'Premier argument : mise à jour des liaisons

' Fermer tous les classeurs
Workbooks.Close

' Fermer un seul classeur
Workbooks("nomclasseur.xlsx").Close

' Récupérer le nom d'une feuille d'un classeur
Dim nom as string
nom = Workbooks("test.xlsx").Worksheets(1).name

' Fermer un seul classeur
ActiveWorkbook.Close SaveChanges:=False

' Enregistre un classeur
Chemin = "C:\Travail\"
ActiveWorkbook.SaveAs Chemin & "monclasseur"

' Actualiser tous les calculs (formules et fonctions) du classeur
ActiveSheet.Calculate


VBA CHEMIN
ThisWorkbook représente le classeur qui contient le code (faisant appel à thisWorkbook). Active Workbook représente le classeur actif de l'application.

Sub enregistremoilaoutuest()
ThisWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & ThisWorkbook.Name
End Sub

Mettre au format csv :
Pour récupérer le chemin du classeur actif: ActiveWorkbook.Path
Filename:=ActiveWorkbook.Path & "\" & "nom du fichier.xlsx"

Sub enregistremoilaoutuestencsv()
ThisWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\" & ThisWorkbook.Name, FileFormat:=xlCSV
End Sub

Afficher l'adresse du classeur actif (le path) dans une cellule :
=CELLULE("filename")

Afficher le nom du classeur actif :
=STXT(CELLULE("filename");TROUVE("[";CELLULE("filename"))+1;TROUVE("]";CELLULE("filename"))-TROUVE("[";CELLULE("filename"))-1)

Référence vers une bibliothèque
Sub Ajouteref()
'ajoute une référence à la bibliothèque
On Error Resume Next
'nom et chemin de la bibliothèque
nomRef = "C:\Program Files\Fichiers communs\Microsoft Shared\DAO\Dao360.dll"
ThisWorkbook.VBProject.References.AddFromFile nomRef
End Sub

Attention: dans l'éditeur VBA > menu Outils > Références, vérifier que toutes les librairies soient présentes. Sinon, voir allocation dynamique de dll: LoadLibrary()


VBA PROTECTION
Dans Excel, la protection d'un objet ne joue que sur les descendants directs. Je m'explique : la protection d'un classeur ne protège que ses fenêtres (soit windows) et sa structure de feuille (soit Stucture). Si je fais :
ActiveWorkbook.Protect Password:="monpasse", Structure:=True, Windows:=False

Je ne protège que la structure. Cela veut dire qu'il n'est pas possible d'ajouter, de supprimer ou de déplacer des feuilles. En aucun cas cela ne protège les cellules. Pour cela il faut protéger la ou les feuilles.

Attention, cela enlè aussi les 3 petits boutons en haut à droite de l'écran(moins, le double carré et la croix).

Note: si vous avez un problème de classeur qui se ferme tout le temps ou d'application invisible: Ouvrir Excel par le menu Démarrer, ouvrir l'éditeur VBA. Ouvrir ensuite le projet puis, dans l'éditeur VBA, réénitialiser le projet (bouton carré bleu). Commentariser les procédures qui posent problème et enregistrer.

' Exemple de fin programmé de l'utilisation d'un fichier 
' en fonction d'un temps d'utilisation (1 année) 

Sub proc_verouille_le_classseur_si_date_creation_sup_a_1_an()
' Exemple de protection de classeur après 1 an d'utilisation (onglet Révision d'Excel)

' Date de création du fichier : BuiltinDocumentProperties.Item(11)
' MsgBox ThisWorkbook.BuiltinDocumentProperties("Author").Value
' Titre: 1, Sujet: 2, Auteur: 3, 
' Date de la dernière impression: 10, Heure du dernier enregistrement: 12

Dim date_dexpiration As Date
Dim mot_de_passe As String

' date_dexpiration = année de création du fichier + 1 (soit 1 an d'utilisation possible)
date_dexpiration = Year(ThisWorkbook.BuiltinDocumentProperties.Item(11)) + 1

'mot_de_passe = nom de l'auteur du classeur + numéro du jour de création du classeur
mot_de_passe = ThisWorkbook.BuiltinDocumentProperties.Item(3) _
& Day(ThisWorkbook.BuiltinDocumentProperties.Item(11))


If date_dexpiration < Year(ThisWorkbook.BuiltinDocumentProperties.Item(11)) Then
ActiveWorkbook.Protect Password:=mot_de_passe, Structure:=True, Windows:=True
    
MsgBox "Fin de période d'essai. Classeur Vérouillé.", vbCritical + vbOKOnly, "ERREUR"
End If

End Sub


VBA EVENEMENT
Liste des évènements de l'objet Workbook
Activate : quand le classeur ou une feuille est activé
AddinInstall : quand le classeur est installé en macro complémentaire
AddinUninstall : quand le classeur est désinstallé en macro complémentaire
BeforeClose : avant que le classeur soit fermé
BeforePrint : avant l'impression du classeur
BeforeSave : avant l'enregistrement du classeur
Deactivate : quand le classeur ou une feuille est désactivé
NewSheet : Lorsqu'une nouvelle feuille est créée
Open : à l'ouverture du classeur
PivotTableCloseConnection : lorsqu'un qu'un rapport de tableau croisé dynamique se déconnecte de sa source de données
PivotTableOpenConnection : lorsqu'un qu'un rapport de tableau croisé dynamique se connecte à une source de données
SheetActivate : lorsqu'une feuille est activée
SheetBeforeDoubleClick : lors d'un double-clic
SheetBeforeRightClick : lors d'un clic avec le bouton droit de la souris
SheetCalculate : après le recalcul d'une feuille de calcul
SheetChange : lors de la modification d'une cellule
SheetDeactivate : lorsqu'une feuille est désactivée
SheetFollowHyperlink : lors d'un clic sur un lien hypertexte SheetPivotTableUpdate : lors de la mise à jour de la feuille du rapport de tableau croisé dynamique
SheetSelectionChange : lors d'un changement de sélection sur une feuille de calcul
WindowActivate : lorsqu'un classeur est activé
WindowDesactivate : lorsqu'un classeur est désactivé
WindowResize : lors du redimentionnement de la fenêtre d'un classeur

-> voir les Astuces de Michel pour d'autres exemple VBA sur les classeurs.


< Page précédente VBA Page suivante >