par , 26/01/2020 à 10h42 (1283 Affichages)
Préambule
Certains utilisateurs d’excel connaissent l’usage de fichier suffixé xltx que l’on utilise comme modèle.
En vba, on peut être amené à ouvrir un nouveau classeur Excel basé sur un modèle.
Le premier réflexe serait bien entendu de créer un fichier avec toutes le formules, les mises en forme conditionnelles, les validations de données, protéger les cellules qui ne peuvent pas être écrasées et d’ensuite le Sauver Sous Modèle Excel (xltx) afin de l’ouvrir ensuite par un code VBA.
Personnellement lorsque je livre une application basée sur Excel, je place toujours le classeur principal dans un répertorie dédié et ensuite je crée des sous-répertoires dont Template qui contient les modèles Excel, Word, etc. que j’utiliserai dans l’application. Cette organisation à comme avantage le transfert aisé de l’application vers n’importe quel répertoire ou autre PC
En sauvant un classeur comme Modèle Excel (xltx), l’application va automatiquement prendre par défaut le répertorie dédié aux modèles et cela m’oblige donc de choisir le sous-répertoire Template du répertoire où se trouve l’application. Si ce travail prend un certain temps pour le développeur, il peut-être perturbant pour l’utilisateur si on lui confie la création de ces modèles
J’ai donc décidé il y a un certain temps de sauver les fichiers me servant de modèle comme des fichiers Excel classiques (xlsx) et en les sauvant dans ce sous-répertoire Template
L’instruction pour ouvrir un nouveau classeur en VBA est simple
Pour ouvrir un nouveau classeur basé sur un modèle, on utilisera la même instruction en utilisant l’argument Template
Workbooks.Add Template:= "Template\monFichier.xlsx"
Exemples
Voici deux exemples illustrant
Exemple 1 Ouverture simple d'un nouveau classeur basé sur un modèle
1 2 3 4 5 6 7 8 9 10 11 12
| Sub Exemple_1()
' Déclaration
Const SubFolder As String = "\Template\"
Const FileName As String = "Note de Frais.xlsx"
Dim CurrentFolder As String
Dim FullName As String
' Affectation
CurrentFolder = ThisWorkbook.Path
FullName = CurrentFolder & SubFolder & FileName
' Ouverture d'un nouveau classeur basé sur un modèle
Workbooks.Add Template:=FullName
End Sub |
Exemple 2 Ouverture nouveau classeur basé sur un modèle en l'affectant à une variable objet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Sub Exemple_2()
' Déclaration
Const SubFolder As String = "\Template\"
Const FileName As String = "Note de Frais.xlsx"
Dim CurrentFolder As String
Dim FullName As String
Dim wkb As Workbook
Dim msg As String
' Affectation
CurrentFolder = ThisWorkbook.Path
FullName = CurrentFolder & SubFolder & FileName
' Ouverture d'un nouveau classeur basé sur un modèle
Set wkb = Workbooks.Add(Template:=FullName)
With wkb
msg = "Ouverture d'un nouveau classeur"
msg = msg & vbCrLf & "Nommé " & .Name & " basé sur le modèle " & FileName
msg = msg & vbCrLf & "Le nombre de feuille est de " & .Worksheets.Count
End With
MsgBox msg
Set wkb = Nothing
End Sub |