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 SubDonc 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 Subbonjour,
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 SubMerci à 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!
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