Tableau de variables

H

Hady

Guest
Bonjour @ tous B)

J'ai un gros programme VBA avec plusieurs dizaines de feuilles.
Suivant la macro exécutée, je voudrai afficher un certain nombre de feuilles. Au début de chacune de mes macros je voudrais donc définir un tableau contenant toutes les feuillers qui devront être affichées à la fin. Celà donnerai en gros le code dessous.
Mon tableau de feuille est donc de table variable.
Je voudrais savoir comment récupérer la taille de mon tableau issu de Macro1 dans AfficherFeuilles pour pouvoir faire la boucle d'affichage des feuilles.
Autre chose suis-je obligé de faire ReDim à chaque fois que j'initialise mon tableau?



Voici mon petit programme :

Dim Table() As String

Sub Macro1()
Dim Fe As String
ReDim Table(3) As String
For i = 0 To 2
Fe = 'Feuil' & i + 1
Table(i) = Fe
Next
Call AfficherFeuilles(Table())
End Sub

Sub Macro2()
Dim Fe As String
ReDim Table(8) As String
For i = 0 To 8
Fe = 'Feuil' & i + 1
Table(i) = Fe
Next
Call AfficherFeuilles(Table())
End Sub

Sub AfficherFeuilles(Table() As String)

End Sub
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Ubound(table) te donne le plus grand indice disponible pour la dimension indiquée d'un tableau.

donc pour une boucle

for x= 0 to ubound(table)-1

devrait convenir

ou
avec LBound qui indique le plus petit indice disponible pour la dimension indiquée d'un tableau

for x= Lbound(table) to ubound(table)

Bon courage

Message édité par: Pascal76, à: 04/07/2005 15:02
 

Hervé

XLDnaute Barbatruc
Bonjour hady, pascal, le forum

en complément de ce que dit pascal.

ton tableau est déclaré public par ta première instruction (dim table as string)

tu n'a donc pas besoin de passer en variable ton tableau à la sub afficherfeuilles

ceci suffit :

sub afficherfeuilles ()

'ici l'utilisation des lbound et ubound

end sub

Attention au redim : cette instruction permet de redimenssionné un tableau, mais efface aussi les données dans ce tableau, pour pouvoir conservé les données tu dois utiliser redim preserve tables(???).

salut

EDITION : dans les macro1 et 2 , le call afficherfeuilles(tables()) devient inutile, à remplacer par : afficher feuilles

Message édité par: Hervé, à: 04/07/2005 15:19
 
H

Hady

Guest
En effet, ça marche! Merci pour ton aide.
Et pour ce qui est de ReDim suis-je obligé d'utiliser ReDim pour spécifier la dimension de mon tableau avant chaque initialisation.
Je m'explique:

Dans macro 1
ReDim Table(8) As String
Table(0)= 'Feuille1'
...
Table(7)='Feuille8'

Dans macro 2
ReDim Table(3) As String
Table(0)= 'Feuille1'
...
Table(2)='Feuille3'

Le ReDim peut-il être évité sans soulever d'erreur?
 
H

Hady

Guest
J'avais en effet vu ça sur l'aide VBA pour ReDim et Preserve.
Je maintiens ma question sur l'utilité du ReDim. Le propre du tableau dynamique selon moi c'est de ne pas avoir de dimension! Arlos pourquoi sans ReDim mon programme soulève un erreur.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Hady, Hervé, Pascal, le Forum

Quelques exemples basic de Tableaux :

Exemple 1 :
Dim Tablo(8) As String

Sub ConstructionTabloSurBaseInitialeDuTablo()
Dim i As Byte

   
For i = 0 To 8
    Tablo(i) = 'Toto ' & i
   
Next

MsgBox Tablo(UBound(Tablo))

End Sub


Exemple 2 :
Sub ConstructionAvecRedimFixeDuTablo()
Dim i As Byte, TabIndexMax As Byte
Randomize
TabIndexMax = Int((10 * Rnd) + 1)

   
ReDim Tablo(0 To TabIndexMax)
       
For i = 0 To TabIndexMax
            Tablo(i) = 'Toto ' & i
       
Next

MsgBox Tablo(UBound(Tablo))

End Sub


Exemple 3 :
Sub ConstructionTabloAvecRedimPreserve()
Dim i As Byte, TabIndexMax As Byte
       
        Randomize
        TabIndexMax = Int((10 * Rnd) + 1)

   
       
For i = 0 To TabIndexMax
           
ReDim Preserve Tablo(TabIndexMax)
            Tablo(i) = 'Toto ' & i
       
Next

MsgBox Tablo(UBound(Tablo))

End Sub

En fait ces trois méthode sont assez différentes, la Première on a fixé d'avance la taille du Tableau et c'est définitif. La Seconde on ne connait la taille du Tableau qu'en cours de Macro... La troisième on redimensionne le Tableau en cours de Boucle tout en préservant les données s'y troyuvant déja...

Bon Après Midi
@+Thierry
 

Discussions similaires

Réponses
2
Affichages
286
Réponses
3
Affichages
275

Statistiques des forums

Discussions
312 380
Messages
2 087 805
Membres
103 664
dernier inscrit
wolvi71