Pour VB6 et peut être VBA, c'est la fonction UBound.
Pour VB.Net la méthode Length (ou Count pour les framework >= 3.5)
Pour VBS je n'en sais rien.
mohamed_2016
Auteur
Bonjour Whismeril ,
D'accord , la version est VBA
Merci pour la clarification .
pijaku
Modérateur
Bonjour,
mohamed, ton tableau doit être passé en paramètre de ta fonction ou alors déclaré en entête de module.
Vois ceci :
en paramètre :
Sub test()
Dim TB(100) As Integer, i As Integer
For i = 0 To 100
TB(i) = i
Next
MsgBox "156 existe : " & Exist(TB, 156) & " // 16 existe : " & Exist(TB, 16)
End Sub
Private Function Exist(TB() As Integer, L As Integer) As Boolean
Dim i As Long
Exist = False
For i = LBound(TB) To UBound(TB)
If TB(i) = L Then Exist = True: Exit Function
Next i
End Function
en entête de module :
Option Explicit
Dim TB(100) As Integer
Sub test()
Dim i As Integer
For i = 0 To 100
TB(i) = i
Next
MsgBox "156 existe : " & Exist(156) & " // 16 existe : " & Exist(16)
End Sub
Private Function Exist(L As Integer) As Boolean
Dim i As Long
Exist = False
For i = LBound(TB) To UBound(TB)
If TB(i) = L Then Exist = True: Exit Function
Next i
End Function
La première méthode permet de se servir de la fonction avec plusieurs variables tableaux différentes...
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
mohamed_2016
Auteur
Bonjour
pijaku
,
Merci pour l'explication mais l'option explicit quel est son rôle ?
Cordialement.
Sinon, dans mon exemple, je l'ai juste mis pour que tu vois bien ce que j'entend par entête de module...
a+
mohamed_2016
Auteur
Merci !
Bonne journée
michel_m
Contributeur
Bonjour
avec obligatoirement du VBA ???
Sinon,pour savoir le nombre d'entiers dans ton tableau
=SOMMEPROD((MOD(B2:D1000;1)=0)*1)
mohamed_2016
Auteur
Bonjour michel_m ,
Merci !
Oui avec la version VBA excel
Cordialement.
Utilisateur anonyme
Bonjour mohamed_2016,
Si ta question est pour VBA Excel, je veux bien te répondre
si tu me donnes ces précisions supplémentaires :
a) Quel type d'entier : Byte ? Integer ? Long ?
b) Si par exemple ton tableau s'appelle Tbl(), quel est l'indice
le plus petit que tu utilises ? Tbl(0) ou Tbl(1) ? Bien sûr,
si tu as mis Option Base 1, n'utilise pas Tbl(0).
c) Toujours pour Tbl(), combien y a-t-il d'éléments ? Si tu mets
par exemple Tbl(5), il y a 6 éléments, de Tbl(0) à Tbl(5)
avec Option Base 0 ou sans instruction Option Base ; et
il y a 5 éléments, de Tbl(1) à Tbl(5) avec Option Base 1
d) Même si tu n'as pas mis d'instruction Option Base, ou même si tu as
mis explicitement Option Base 0, tu peux déclarer Dim Tbl(1 To 5)
et ton tableau aura 5 éléments
Eh oui, la taille d'un tableau dépend de beaucoup de choses... 😉
La taille d'un tableau est de 20 octets + 4 octets par dimension déclarée
+ le nombre d'octets occupés par les données ; ainsi, le type Integer
étant sur 2 octets, Dim Tbl(1 To 5) As Integer prendra 20 + 4 + (5 × 2)
= 24 + 10 = 34 octets.
Cordialement. 😊
mohamed_2016
Auteur
Bonjour
albkan
,
Merci
Donc le type est integer
Y'a t'il une fonction qui nous rend comme résultat la taille du tableau .
Je ne connais pas de fonction qui retourne la taille d'un tableau, mais je vais
prendre cet exemple de tableau d'entiers : Dim Tbl(3 To 8) As Integer ; tu peux
alors calculer la taille de ce tableau selon ces éléments :
1) LBound() retourne le plus petit indice de la dimension d'un tableau,
donc LBound(Tbl) retourne 3 ; note que L est pour Lower.
2) UBound() retourne le plus grand indice de la dimension d'un tableau,
donc UBound(Tbl) retourne 8 ; note que U est pour Upper.
3) Tu peux donc calculer le nombre d'éléments de ton tableau :
UBound(Tbl) - LBound(Tbl) + 1 = 8 - 3 + 1 = 6 et il y a bien 6 éléments de 3 à 8 inclus.
4) Chaque élément du tableau étant un Integer (sur 2 octets), ça fait donc :
6 éléments × 2 octets = 12 octets.
5) Il faut compter 4 octets pour chaque dimension d'un tableau ; et comme
il n'y a qu'une seule dimension pour Tbl(3 To 8), ça fait donc 4 octets.
6) Un tableau nécessite 20 octets de mémoire, plus tout ce qui est décrit
précédemment ; donc taille totale = 20 + 4 + 12 = 36 octets.
Avec toutes ces informations, tu peux facilement créer ta propre fonction
personnalisée pour calculer la taille d'un tableau d'entiers, d'une seule
dimension ou de plusieurs dimensions.
Remarque : avec Option Base 1, pour Dim Tbl(20, 5) As Integer, tu as un
tableau de 20 lignes × 5 colonnes ; ça représente 2 dimensions car il y a
celle des lignes et celle des colonnes.
Cordialement. 😊
mohamed_2016
Auteur
Bonjour
albkan
,
Merci pour votre aide,
Mais une petite question ,si je veut savoir qu'un entier se trouve dans le tableau ,on peut faire une fonction qui retourne une resultat booleenne : True / False càd existe ou nn ?
Ceci mon tentative :
Function verifier() As Boolean
Dim a As Integer
Dim tableau() As Integer
For a = 0 To (UBound(tableau) - LBound(tableau) + 1)
If tableau(a) = F Then
verifier = True
End Function
1) J'ai bien lu ton message #7 où tu indiques que tu utilises VBA,
ainsi que ton message #14 où tu précises que c'est le VBA Excel.
2) Dans le code VBA que tu as mis dans ton message #8, note que :
a) verifier = True doit être sur la même ligne que celle du dessus :
If tableau(a) = F Then verifier = True
b) Quand tu mets une boucle For, n'oublie pas le Next correspondant ;
donc après la ligne précédente et avant End Function, mettre : Next a
3) Le message #9 de pijaku contient deuxtrès bonnes solutions pour ce que
tu demandes maintenant. J'ai mis le lien, même si je sais que tu l'as déjà lu.
4) Je rappelle que dans ton message initial, tu demandais comment savoir
la taille d'un tableau d'entiers. Je ne sais pas pourquoi mon message #2 a été noté -2 car je suis tout à fait sûr des informations que j'y ai noté et
qui proviennent de la référence documentaire Microsoft ; idem pour
tout ce que j'ai noté dans mon message #6. J'invite tous ceux qui en
doutent à lire l'Aide en ligne sur ce sujet.
Cordialement. 😊
Utilisateur anonyme
Note à l'attention de ceux qui notent en négatif mon message #2 :
Je suis tout à fait sûr des informations que j'ai noté dans ce message et qui
proviennent de la référence documentaire Microsoft ; j'invite tous ceux qui
en doutent à lire l'Aide en ligne sur ce sujet.
Aussi, veuillez prendre la peine de vous renseigner correctement avant de
porter un jugement négatif sur des informations exactes !