Créer un tableau de classeurs sous VBA

maxouche

XLDnaute Nouveau
Bonjour à tous,

je suis en train de créer une macro qui utilise des infos contenues dans plusieurs classeurs (à un format bien établi).
Le fonctionnement est simple : l'utilisateur ouvre les classeurs nécessaires à l'analyse, puis lance la macro. J'affiche dans une listbox le nom de tous les classeurs susceptibles d'être utilisés (leur nombre est indéterminé).
Là où mon problème se pose, c'est que une fois que l'utilisateur a sélectionné les noms des classeurs, je voudrais les stocker dans des variables de type "workbook" (parce que je vais devoir les utiliser par la suite).
Comme leur nombre est indéterminé, j'ai créé un tableau de workbook, du style :

dim FUsheets() as Workbook

le bout de code que j'utilise pour les récupérer est le suivant :

j = 0
For i = 0 To ListBox1.ListCount
If ListBox1.Selected(i) = True Then
For Each wb In Workbooks
If wb.Name = ListBox1.List(i) Then
Set FUSheets(j) = wb
j = j + 1
End If
Next wb
End If
Next i


Mais ce dernier me renvoie le message d'erreur "Sub ou Function non définie".
J'ai fait un essai, sans définir de tableau, mais juste une variable de type workbook. Dans ce cas, le code fonctionne (en faisant un essai avec un seul fichier), mais pour ce que je veux faire, ça ne peut pas fonctionner, puisque je ne sais pas à l'avance de combien de variables je vais avoir besoin, et surtout, je ne pourrais pas utiliser de boucle For....
Si quelqu'un a une idée pour m'aider, ça serait formidable !!

Un grand merci d'avance !

Maxime
 

Pierrot93

XLDnaute Barbatruc
Re : Créer un tableau de classeurs sous VBA

Bonjjours,

pas top la couleur de ton code... si j'ai bien vu, pas sûr du tout, lors de la première initialisation de la variable "FUSheets", la variable "j" vaut 0 donc bogue...

bon après midi
@+
 

maxouche

XLDnaute Nouveau
Re : Créer un tableau de classeurs sous VBA

Bonjour Pierrot,

merci pour ta réponse, et désolé pour les couleurs, j'essaierai d'être plus clair la prochaine fois.
J'ai mis j à 0 puisque 0 est d'habitude le 1er index d'un tableau. Cependant, j'ai essayé en commençant avec j=1, et le message d'erreur reste le même.

Je me demandais en fait si VBA autorisait tout simplement la création de tableau de workbook......

Merci encore de votre aide !!!

Maxime
 

Pierrot93

XLDnaute Barbatruc
Re : Créer un tableau de classeurs sous VBA

Re,

Je me demandais en fait si VBA autorisait tout simplement la création de tableau de workbook......
oui, un exemple ci-dessous :

Code:
Option Explicit
Sub test()
Dim wb As Workbook, t() As Variant, i As Byte
For Each wb In Workbooks
    ReDim Preserve t(i)
    Set t(i) = wb
    i = i + 1
Next wb
End Sub
 

maxouche

XLDnaute Nouveau
Re : Créer un tableau de classeurs sous VBA

Merci Pierrot,

Ton code fonctionne bien. Mais quand je l'adapte au mien, il n'y a rien à faire.
Il me crée même une erreur de compilation en me disant qu'une variable n'est pas définie... (en surlignant la ligne "redim preserve fusheets)
voici mon code une fois modifié :
Code:
    j = 0
    For i = 0 To ListBox1.ListCount
        If ListBox1.Selected(i) = True Then
            For Each wb In Workbooks
                ReDim Preserve FUSheets(j)
                If wb.Name = ListBox1.List(i) Then
                    Set FUSheets(j) = wb
                    j = j + 1
                End If
            Next wb
        End If
    Next i

Je dois très certainement louper quelque chose, mais la solution n'est pas très loin. Merci beaucoup pour ton aide, rapide et efficace :)

Maxime
 

maxouche

XLDnaute Nouveau
Re : Créer un tableau de classeurs sous VBA

Pierrot,

en fouillant un peu, j'ai réussi à faire tourner le code. Sauf que je suis obligé de déclarer ma variable FUSheets dans la sub qui l'utilise (click sur bouton ok). Si je la déclare dans le module apellant le formulaire, ça ne fonctionne pas.
Le soucis, c'est que je vais réutiliser cette variable dans d'autres sub, et si elle est définie dans une sub de type private, je ne pourrais, sauf si je me trompe, pas l'utiliser ailleurs.....

Merci encore, on se rapproche !!!

Maxime
 

Pierrot93

XLDnaute Barbatruc
Re : Créer un tableau de classeurs sous VBA

Re,

faut déclarer ton tableau en "public", tu pourras ensuite l'appeler par d'autre module de ce projet :
Code:
Option Explicit
Public t() As Variant
Sub test()
Dim wb As Workbook, i As Byte
For Each wb In Workbooks
    ReDim Preserve t(i)
    Set t(i) = wb
    i = i + 1
Next wb
End Sub
 

maxouche

XLDnaute Nouveau
Re : Créer un tableau de classeurs sous VBA

Pierrot,

tout est bon. Je ne sais pas pourquoi, j'avais déjà essayé la déclaration en Public, et ça ne fonctionnait pas (il devait y avoir d'autres choses). Mais maintenant, tout fonctionne à priori, donc c'est parfait !

Merci beaucoup pour ton coup de main !

Maxime
 

Discussions similaires

Réponses
4
Affichages
205
Réponses
0
Affichages
147

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16