Developpez.com - Rubrique Excel

Le Club des Développeurs et IT Pro

VBA-Excel - Comment créer dynamiquement les onglets d'un contrôle TabStrip à l'aide d'une fonction générique,

Un billet blog de Philippe Tulliez

Le 20/04/2023, par Philippe Tulliez, Rédacteur
Préambule
Contrairement à un contrôle MultiPage, un TabStrip n'a pas ses propres contrôles. Sa gestion est donc relativement simple.
Dans ce billet qui en précède d'autres sur le même sujet, je présente une fonction générique qui crée dynamiquement des onglets et j'évoquerai quelques propriétés telles que la taille des onglets (Tab)

Editeur VBE vs VBA
Nombre d'onglets : Lorsque l'on insère un objet TabStrip dans un UserForm, il y a deux onglets par défaut
Ajouter ou supprimer des onglets : Pour ajouter, supprimer ou renommer un onglet, il suffit de le sélectionner et faire un clic droit



Quelques propriétés et méthodes
Parmi les quelques propriétés intéressantes de l'objet TabStrip à connaître lorsque l'on crée dynamiquement des onglets (la collection Tabs) on retiendra MultiRow, TabFixedHeight, TabFixedWidth, Value.
  • MultiRow : Propriété booléenne qui permet d'afficher les étiquettes sur plusieurs lignes si elles ne peuvent être complètement visibles sur une seule (voir illustration)
  • TabFixedHeight, TabFixedWidth : Par défaut, la largeur des onglets (Tabs(x) s'adapte au nombre de caractères du texte (propriété Caption) et la hauteur est fixe.
    Cependant, il est possible de définir une hauteur et une largeur fixe avec ces deux propriétés (voir illustration ci-dessous)
  • Value : Cette propriété dont la première valeur est 0, permet de savoir quel onglet est actif et sert également à définir celui qui sera actif.
  • TabOrientation : Permet d'afficher les onglets (Tabs) à gauche, à droite, en bas et en haut (par défaut)

Les méthodes pour ajouter, supprimer des onglets (collection Tabs) sont
  • Add : Crée un nouvel onglet
  • Clear : Supprime tous les onglets
  • Remove : Supprime un onglet


Dans l'illustration ci-dessous, nous avons de gauche à droite, la fenêtre des propriétés de l'objet TabStrip dans l'éditeur VBA, suivi d'une illustration de l'affichage avec la propriété MultiRow et enfin en dernière position l'affichage avec les onglets dont on a modifié la valeur des propriétés TabFixedWidth (en haut) et TabFixedHeight (en bas) qui par défaut sont à 0



Fonction générique de création dynamique des onglets
La fonction générique nommée TabStripAddTabs a pour but de créer dynamiquement des onglets en les nommant (propriété Caption) en fonction de l'argument Captions qui est une variable tableau (Array) à une dimension et dont la borne inférieure peut commencer indifféremment à 0 ou à 1.
La propriété Multiline sera par défaut à True si l'on ne modifie pas l'argument éponyme de la fonction et l'orientation des onglets par défaut est en haut

Code de la procédure

Code VBA :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function TabStripAddTabs(oTabStrip As MSForms.TabStrip, _ 
                         Captions As Variant, _ 
                         Optional MultiLine As Boolean = True, _ 
                         Optional Orientation As fmTabOrientation) 
  ' Philippe Tulliez (https://magicoffice.be) 
  ' Arguments 
  '   oTabStrip      l'Objet TabStrip 
  '   Captions       Array (1 dimension) contenant les noms à passer à la propriété Caption des Tab 
  '   [MultiLine]    Si True (défaut), affiche les onglets sur plusieurs lignes si elle ne peuvent pas être affichée sur une seule 
  '   [Orientation]  Orientation des Tabs (fmTabOrientationBottom, ..Left, ..Right, ..Top) 
  ' 
  ' Déclaration et affectation 
  Dim e As Byte 
  With oTabStrip 
  .Tabs.Clear                   ' Efface tous les onglets 
  .TabOrientation = Orientation ' Orientation des onglets (Tabs) 
  .MultiRow = MultiLine         ' Défini la propriété MultiLine 
    For e = LBound(Captions) To UBound(Captions) 
    .Tabs.Add bstrCaption:=Captions(e) 
    Next 
  End With 
End Function

Exemple pour l'invoquer
Pour cet exemple, le formulaire se nomme UserForm2 et le TabStrip, tabDynamic
La procédure se trouve dans un module standard
Code VBA :
1
2
3
4
5
6
7
8
Sub TestTabStrip() 
  Dim t As Variant 
  t = Array("Afrique", "Amérique", "Asie", "Europe", "Océanie") 
  With UserForm2 
   TabStripAddTabs oTabStrip:=.tabDynamic, Captions:=t 
  .Show 
  End With 
End Sub

Ressources
Voici une liste de tutoriels ou billets en rapport avec cet article.
  Billet blog