Savoir la taille d'un tableau [Résolu/Fermé]

Signaler
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016
-
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016
-
Bonjour le Forum,
J'ai un petit problème
Comment savoir la taille d'un tableau d'entiers
Bonne journée !


A voir également:

5 réponses

Messages postés
14779
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 avril 2021
283
Quelle version de VB ?
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour
NHenry
,
la version est pour 2013
Merci !
Cordialement
Messages postés
15780
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 avril 2021
684
Bonsoir

2013 n'est pas une version, mais un millésime.

Ce que demandait NHenry est, s'agit t il
  • VBA
  • VBS
  • VB6
  • VB.Net


La réponse diffère selon la version.
  • 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.


Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour Whismeril ,
D'accord , la version est VBA
 

Merci pour la clarification .
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 590
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
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour
pijaku
,
Merci pour l'explication mais l'option explicit quel est son rôle ?
Cordialement.
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 590 >
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

A lire https://grenier.self-access.com/access/visual-basic/de-linteret-de-option-explicit/

Sinon, dans mon exemple, je l'ai juste mis pour que tu vois bien ce que j'entend par entête de module...
a+
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Merci !
Bonne journée
Messages postés
16428
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 avril 2021
3 159
Bonjour

avec obligatoirement du VBA ???

Sinon,pour savoir le nombre d'entiers dans ton tableau
=SOMMEPROD((MOD(B2:D1000;1)=0)*1)
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour michel_m ,
Merci !
Oui avec la version VBA excel
Cordialement.
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.  😊
 
Utilisateur anonyme >
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour mohamed,

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 deux trè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 !

Cordialement.  😊
 
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour albkan ,
Oui tu as raison ,bonnes remarques ,j'ai essayé autrefois
Function Exist(F As Integer, tableau() As Integer) As Boolean
Dim b As Long
Exist = False
For b = LBound(tableau) To UBound(tableau)
If tableau(b) = F Then
Exist = True: Exit Function
End If
Next
End Function
Utilisateur anonyme >
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

 
Rebonjour mohamed,

Voici comment insérer un code VBA dans ton message
(et ton indentation sera conservée) :

<code basic>
    ' ici, ton code VBA
</code>

-----------------------------------------------

Je fais un copier / coller de ton code VBA :


Function Exist(F As Integer, tableau() As Integer) As Boolean 
Dim b As Long 
Exist = False 
For b = LBound(tableau) To UBound(tableau) 
If tableau(b) = F Then 
Exist = True: Exit Function 
End If 
Next 
End Function


a) La ligne #4 est inutile, car la valeur de retour (Boolean) de Exist() est initialisée
    à False par défaut.

b) Pour le Next, c'est mieux de préciser que c'est pour b, puisque c'est relatif au
    For b ... ; il n'y a ici qu'un seul For, donc ça ne peut pas être ambigu ; malgré
    tout, c'est mieux de préciser car en principe, ça accélère l'exécution du code.

Voici donc ta fonction réécrite, et avec indentation :


Function Exist(F As Integer, tableau() As Integer) As Boolean 
  Dim b As Long 
  For b = LBound(tableau) To UBound(tableau) 
    If tableau(b) = F Then 
      Exist = True: Exit Function 
    End If 
  Next  b
End Function


Note que si tu avais des instructions à exécuter après le Next b même si F
a été trouvé dans tableau(), tu devrais mettre Exit For au lieu de Exit Sub.

Cordialement.  😊
 
 
Messages postés
31
Date d'inscription
mardi 2 août 2016
Statut
Membre
Dernière intervention
19 août 2016

Bonjour albkan ,
Je te remercie pour les remarques
A plus ,
Cordialement