Conserver des classeurs dans un array?

Bonjour à tous,

Je cherche une solution pour stocker différent classeurs dans array.

Le but de mon fichier est simple, je dois vérifier la présence de fichier, les ouvrir et si possible les attriuber à une variable au passage.

Sub File_verificator()

Dim source, folderpath As String
Dim wbmacro, wbclient, wbarticle, wbfournisseur, wbfacture, wbdevis, wbpaiement, wbdepense As Workbook
Dim fichier, wb As Variant
Dim i As Integer

Set wbmacro = ThisWorkbook
folderpath = Application.ActiveWorkbook.Path
fichier = Array("Achat", "Article", "Client", "Devis", "Facture", "Fournisseur", "Recette")
wb = Array(wbdepense, wbarticle, wbclient, wbdevis, wbfacture, wbfournisseur, wbpaiement)

For i = 0 To 6
MsgBox (i & fichier(i))
source = Dir(folderpath & "\" & "*" & fichier(i) & ".*")

    If source <> "" Then
    MsgBox ("in the if " & i & source)
    Workbooks.Open (folderpath & "\" & source), Local:=True

    Set wb(i) = Workbooks(source)
    End If

Next

If wbclient Is Nothing Then
Else
MsgBox ("wbpaiement")
End If

End Sub

Donc j'ai juste fait un petit contrôle à la fin pour avoir une box à la fin pour contrôler que ma ligne "Set wb(i) = Workbooks(source)" a bien fait le job.

Et c'est là ou je m'aperçois que ça ne marche pas. La première valeur de mon array wbdepense est toujours égale = nothing. Que le fichier soit présent ou non. Puis pour toutes les autres variables de mon array sont égales à vide.

Une idée?

Merci d'avance

Bonjour Rigawe,

L'instruction wb = Array(wbdepense, wbarticle, wbclient, wbdevis, wbfacture, wbfournisseur, wbpaiement) affecte 7 fois nothing dans le tableau puisque les variables ne sont pas encore initialisées.

Remplace par Redim wb(0 To 6) et cela devrait fonctionner

Non, même résultat quand je fais ma vérif à la fin via le if j'ai que vb(0) qui est égale à nothing.

Si je fais un test avec vb(1) par exemple je me prends une erreur 424 Objet requis.

C'est sûr qu'avec un classeur en exemple, c'est mieux ... Je n'ai créé que 2 fichiers pour le test mais ça fnctionne. Les variables wbclient, etc. liées aux noms des classeurs ne servent pas car les objets "WorkBook" sont dans le tableau "wb" donc il faut utiliser le tableau pour faire référence à ces classeurs.

Voir ci-dessous

Sub File_verificator()

Dim source, folderpath As String
Dim wbmacro, wbclient, wbarticle, wbfournisseur, wbfacture, wbdevis, wbpaiement, wbdepense As Workbook
Dim fichier, wb As Variant
Dim i As Integer

Set wbmacro = ThisWorkbook
folderpath = Application.ActiveWorkbook.Path
fichier = Array("Achat", "Article")
ReDim wb(0 To 1)

For i = 0 To 1
MsgBox (i & fichier(i))
source = Dir(folderpath & "\" & "*" & fichier(i) & ".*")

    If source <> "" Then
    MsgBox ("in the if " & i & source)
    Workbooks.Open (folderpath & "\" & source), Local:=True

    Set wb(i) = Workbooks(source)
    End If

Next

If wb(0) Is Nothing Then
Else
MsgBox wb(0).FullName
End If

End Sub

bonjour,

Option Explicit
Sub File_verificator()
Dim source As String, folderpath As String
Dim fichier, wb As Object: Set wb = CreateObject("Scripting.Dictionary")
Dim i As Integer

folderpath = Application.ActiveWorkbook.Path
fichier = Array("Achat", "Article", "Client", "Devis", "Facture", "Fournisseur", "Recette")

For i = 0 To 6
MsgBox (i & fichier(i))
source = Dir(folderpath & "\" & "*" & fichier(i) & ".*")

    If source <> "" Then
    MsgBox ("in the if " & i & source)
    Set wb("WB" & fichier(i)) = Workbooks.Open(folderpath & "\" & source, Local:=True)
    End If

Next

If wb.exists("wbclient") Then
    MsgBox "Ok"
Else
 MsgBox "Ko"
End If

End Sub

Merci à vous deux.

Cylfo, j'ai testé ton code en limitant le nombre de fichier à 2 comme toi.
en mettant wb(1) dans le if je crash toujours la même erreur.

Dysorthographie, ca à l'air de marcher.

Merci énormément à vous deux.

@Rigawe,

J'ai recopié le code que je t'ai envoyé dans un module d'un nouveau classeur et exécuté avec wb(0) et wb(1), ça marche nickel j'ai les chemins et noms comlets des 2 classeurs stockés dans le tableau wb ...

@dysortographie,

Je pense que Rigawe souhaite stocker des objets "WorkBook" qu'il pourra réutiliser pour y faire référence comme wb(0).Worksheets("xyz") pour accéder à la feuille "xyz". A priori et sauf erreur de ma part, ce n'est pas possible dans la solution que tu proposes ...

@dysortographie,

Je pense que Rigawe souhaite stocker des objets "WorkBook" qu'il pourra réutiliser pour y faire référence comme wb(0).Worksheets("xyz") pour accéder à la feuille "xyz". A priori et sauf erreur de ma part, ce n'est pas possible dans la solution que tu proposes ...

c'est exactement ce que je fait et en plus nominativement!

image

Oups ! C'est nickel !

Merci d'avoir répondu sinon je passais à côté !

c'est pas grave ça arrive!

K = wb.Keys
For i = 0 To wb.Count - 1
    Debug.Print wb(K(i)).Name
Next
Rechercher des sujets similaires à "conserver classeurs array"