Dans ce tutoriel, vous allez apprendre comment utiliser les fonctions LBound et UBound en VBA (Visual Basic for Applications). Ces fonctions sont essentielles pour manipuler efficacement les tableaux, car elles permettent de déterminer les limites inférieures et supérieures d'un tableau.
Sommaire
- Introduction aux fonctions LBound et UBound
- Syntaxe et explication des arguments
- Exemple d'utilisation des fonctions LBound et UBound
- Astuces pour une utilisation efficace
- Comment éviter les erreurs
- FAQ
- 1. Comment puis-je déterminer la taille d'un tableau multidimensionnel avec UBound et LBound?
- 2. Comment gérer l'erreur "Subscript out of range" lors de l'utilisation de UBound et LBound?
- 3. Puis-je utiliser UBound et LBound sur des tableaux dynamiques?
- 4. Comment parcourir un tableau en utilisant UBound et LBound?
- 5. Est-il possible d'utiliser UBound et LBound avec des tableaux de chaînes de caractères?
- 6. Est-ce que la fonction la fonction LBound peut renvoyer un résultat différent de 0 ou 1?
- Pour aller plus loin en VBA
Introduction aux fonctions LBound et UBound
Les fonctions LBound et UBound permettent de déterminer les limites inférieures et supérieures d'un tableau en VBA. La fonction LBound renvoie la limite inférieure d'un tableau, tandis que la fonction UBound en renvoie la limite supérieure. Ces fonctions sont particulièrement utiles pour parcourir et manipuler les éléments d'un tableau, en évitant les erreurs liées à l'accès aux indices hors des limites du tableau.
Syntaxe et explication des arguments
Fonction LBound
Voici la syntaxe, assez simple, de la fonction LBound :
LBound(ArrayName, [Dimension])
Les arguments sont les suivants :
- ArrayName: Il s'agit du nom du tableau dont vous souhaitez obtenir la limite inférieure.
- Dimension (optionnel): Il s'agit de la dimension du tableau pour laquelle vous voulez obtenir la limite inférieure. Si cet argument n'est pas spécifié, la fonction renvoie la limite inférieure de la première dimension du tableau.
Fonction UBound
Voici la syntaxe de la fonction UBound. Qui correspond, à celle de sa "jumelle"…
UBound(ArrayName, [Dimension])
Et voici ses arguments:
- ArrayName: Il s'agit du nom du tableau dont vous souhaitez obtenir la limite supérieure.
- Dimension (optionnel): Il s'agit de la dimension du tableau pour laquelle vous voulez obtenir la limite supérieure. Si cet argument n'est pas spécifié, la fonction renvoie la limite supérieure de la première dimension du tableau.
Exemple d'utilisation des fonctions LBound et UBound
Voici un exemple d'utilisation des fonctions LBound et UBound pour parcourir et afficher les éléments d'un tableau unidimensionnel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub UtiliserLBoundUBound() Dim MonTableau() As Integer Dim i As Integer 'Redimensionner le tableau ReDim MonTableau(3 To 7) 'Remplir le tableau avec des valeurs For i = LBound(MonTableau) To UBound(MonTableau) MonTableau(i) = i * 2 Next i 'Afficher les éléments du tableau For i = LBound(MonTableau) To UBound(MonTableau) MsgBox "L'élément " & i & " est égal à " & MonTableau(i) Next i End Sub |
Cet exemple démontre comment utiliser les fonctions LBound et UBound pour déterminer les limites du tableau et parcourir ses éléments en toute sécurité.
Astuces pour une utilisation efficace
- Utilisez toujours LBound et UBound pour déterminer les limites d'un tableau au lieu de supposer qu'il commence à 0 ou 1. Cela permet d'éviter les erreurs potentielles et de rendre votre code plus robuste face aux modifications futures.
- Utilisez LBound et UBound dans les boucles
For
pour parcourir les éléments d'un tableau multidimensionnel en toute sécurité. Cela garantit que vous accéderez toujours aux éléments valides du tableau. Ainsi, votre code ne causera pas d'erreurs en essayant d'accéder aux éléments du tableau (de la liste,…) qui n'existent pas (la fameuse "erreur 9"). - Si vous travaillez avec des tableaux dynamiques, vous pouvez utiliser les fonctions LBound et UBound après avoir redimensionné le tableau avec la fonction ReDim. Cela vous permet de connaître les nouvelles limites du tableau après la "redimension".
Comment éviter les erreurs
- Assurez-vous de toujours passer un tableau valide aux fonctions LBound et UBound. Si vous passez une variable non initialisée ou un type de données incompatible, VBA générera une erreur.
- Si vous utilisez l'argument Dimension, assurez-vous qu'il est valide pour le tableau donné. Par exemple, si vous avez un tableau unidimensionnel, ne spécifiez pas une valeur de Dimension supérieure à 1. Si vous le faites, cela va déclencher une erreur.
- Ne présumez pas que la limite inférieure d'un tableau est toujours 0 ou 1. Même si c'est tentant… Utilisez la fonction LBound pour déterminer la limite inférieure de manière fiable.
FAQ
Voici une liste des quelques questions qui revient fréquemment…
1. Comment puis-je déterminer la taille d'un tableau multidimensionnel avec UBound et LBound?
Pour déterminer la taille d'un tableau multidimensionnel, vous devez utiliser UBound et LBound pour chaque dimension. Par exemple, pour un tableau bidimensionnel :
1 2 3 4 5 |
Dim MonTableau(1 To 5, 1 To 3) As Integer Dim TailleDim1, TailleDim2 As Integer TailleDim1 = UBound(MonTableau, 1) - LBound(MonTableau, 1) + 1 TailleDim2 = UBound(MonTableau, 2) - LBound(MonTableau, 2) + 1 |
2. Comment gérer l'erreur "Subscript out of range" lors de l'utilisation de UBound et LBound?
Cette erreur peut survenir lorsque vous essayez d'accéder à un élément en dehors des limites du tableau. Vous pouvez éviter cette erreur en vérifiant si les indices sont compris entre les bornes inférieures et supérieures à l'aide des fonctions LBound et UBound.
1 2 3 4 5 |
If Indice >= LBound(MonTableau) And Indice <= UBound(MonTableau) Then ' Accès à l'élément du tableau Else MsgBox "Indice hors limites" End If |
3. Puis-je utiliser UBound et LBound sur des tableaux dynamiques?
Oui, UBound et LBound fonctionnent également sur des tableaux dynamiques. Ils renvoient les limites du tableau après redimensionnement avec la fonction ReDim.
1 2 3 4 5 6 |
Dim MonTableau() As Integer ReDim MonTableau(1 To 7) Dim IndiceSuperieur, IndiceInferieur As Integer IndiceSuperieur = UBound(MonTableau) IndiceInferieur = LBound(MonTableau) |
4. Comment parcourir un tableau en utilisant UBound et LBound?
Utilisez une boucle For
pour parcourir un tableau en vous basant sur ces deux fonctions pour déterminer les limites du tableau.
1 2 3 4 5 6 |
Dim MonTableau(1 To 5) As Integer Dim i As Integer For i = LBound(MonTableau) To UBound(MonTableau) MonTableau(i) = i * 2 Next i |
5. Est-il possible d'utiliser UBound et LBound avec des tableaux de chaînes de caractères?
Oui, les deux fonctions peuvent être utilisés avec des tableaux de n'importe quel type de données, y compris des chaînes de caractères.
1 2 3 4 5 6 7 8 |
Dim MonTableau(1 To 3) As String MonTableau(1) = "Chat" MonTableau(2) = "Chien" MonTableau(3) = "Poisson" Dim IndiceSuperieur, IndiceInferieur As Integer IndiceSuperieur = UBound(MonTableau) IndiceInferieur = LBound(MonTableau) |
6. Est-ce que la fonction la fonction LBound peut renvoyer un résultat différent de 0 ou 1?
Oui, il existe des cas où ceci est possible…
Dans certaines situations, les indices du tableau peuvent correspondre à des valeurs réelles, telles que les années, les numéros de série ou les codes d'identification. En définissant un indice de départ personnalisé, vous pouvez simplifier la représentation des données et réduire les erreurs de calcul liées à la conversion d'indices.
Par exemple, supposons que vous ayez des données de température pour les années 1990 à 2000, et que vous souhaitiez stocker ces données dans un tableau où l'indice correspond à l'année :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Dim Temperatures(1990 To 2000) As Single ' Stocker les données Temperatures(1990) = 15.3 Temperatures(1991) = 16.1 ' ... ' Calculer la moyenne des températures Dim SommeTemp As Single, MoyenneTemp As Single, i As Integer SommeTemp = 0 For i = LBound(Temperatures) To UBound(Temperatures) SommeTemp = SommeTemp + Temperatures(i) Next i MoyenneTemp = SommeTemp / (UBound(Temperatures) - LBound(Temperatures) + 1) |
Dans cet exemple, définir LBound à 1990 rend la manipulation des données plus intuitive, car les indices correspondent directement aux années.
Pour aller plus loin en VBA
Et pour terminer, voici quelques autres articles qui pourraient vous intéresser…
- Page dédiées à ces fonctions sur le site de Microsoft
- Liste de toutes les fonctions disponibles en VBA
- VBA: Liste de différent types de variables
- Comment manipuler les fichiers en VBA
- RECHERCHEV en VBA – comment cela marche?
Commentaire sur “VBA: fonction LBound et fonction UBound [tutoriel]”
MERCI! C'est exactement ce que je cherchais.