Ouvrir fichiers .xls d'un dossier

Résolu
gmuser Messages postés 4 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 14 janvier 2009 - 31 déc. 2008 à 13:57
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 19 janv. 2009 à 19:29
Bonjour!

je suis plus que débutante en VB et je voudrais trouver une macro qui me permette d'ouvrir tous les fichiers Excel contenus dans un dossier bien précis.
Voilà ce que j'ai bidouillé mais ça ne marche pas.
Quelqu'un peut-il voler à mon secours???
Merci!

Sub ouvrirDossier()
' ouvrirDossier Macro
'
Dim Repertoire As String, FichS As String, FichD As String
Repertoire = "H:\data\Adélie\RECHERCHE MACRO BUDGET 2009\FICHIERS 1st submission\ALL TEMPLATES\MAINTENANCE\Templates maintenance"
FichD = ActiveWorkbook.Name
FichS = Dir(Repertoire & "*.xls")
Do Until FichS = ""
Workbooks.Open FichS
FichS = Dir
Loop
End Sub

8 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
31 déc. 2008 à 16:16
Bonjour gmuser


Pas si débutante que ça, puisque ton code est presque bon !


Il y a un petit piège dans la fonction Dir. En effet, si celle-ci accepte un chemin complet en paramètre, elle ne retourne que le nom du fichier ! Donc il faut simplement remplacer :

Workbooks.Open FichS

par

Workbooks.Open Repertoire & FichS

Amicalement
3
gmuser Messages postés 4 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 14 janvier 2009
31 déc. 2008 à 17:29
Merci Orohena!
j'essaierai ça dès que je retourne à mon poste de travail, c'est à dire vendredi.
Et je n'ai aucun mérite, le code je l'ai copié quelque part...
bon réveillon!
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
31 déc. 2008 à 21:02
Merci ! A toi également
0
gmuser Messages postés 4 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 14 janvier 2009
2 janv. 2009 à 11:20
ça marche! merci beaucoup Orohena!
J'ai un autre souci, un peu + compliqué...peux-tu m'aider?

J'ai un fichier qui doit faire la consolidation de 8 autres fichiers.
Tous les fichiers ont exactement le même format, seules les données à l'intérieur du tableau changent.
En fait je voudrais que chaque cellule du fichier consolidé soit la somme de la même cellule des 8 autres fichiers.
Par exemple la cellule A1 du fichier conso doit être la somme de la cellule A1 du fichier 1 + cellule A1 du fichier 2 + cellule A1 du fichier 3.....

Je ne sais pas si j'ai été très claire mais est-ce qu'une macro pourrait me faire ça?
Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
2 janv. 2009 à 19:07
Bonjour

Voici un exemple ; colle le code ci-dessous dans le classeur conso.xls. A l'exécution du Sub consoliderClasseur(), il ouvre les 8 classeurs, consolide la cellule A1 de la feuille active puis ferme les 8 classeurs. Tous les classeurs doivent être dans le même répertoire.

Amicalement

Option Explicit
Private classeurs As Variant
Private classeurConso As String
Private i As Integer
'
Sub consoliderClasseur()
classeurConso = ActiveWorkbook.Name
' Liste des classeurs "source"
classeurs = Array("classeur1.xls", ... "classeur8.xls")   ' liste des classeurs "source" (à modifier)
For i = 0 To UBound(classeurs)
    Workbooks.Open classeurs(i)   ' ouverture des classeurs "source"
Next
consoliderCellule "A1"
For i = 0 To UBound(classeurs)
     Workbooks(classeurs(i)).Close savechanges:=False   ' fermeture des classeurs "source"

Next
End Sub
'
Sub consoliderCellule(cellule As String)   ' consolidation d'une cellule
Dim total As Double
For i = 0 To UBound(classeurs)
    total = total + Workbooks(classeurs(i)).ActiveSheet.Range(cellule).Value
Next
Workbooks(classeurConso).ActiveSheet.Range(cellule).Value = total
End Sub
0
gmuser Messages postés 4 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 14 janvier 2009
14 janv. 2009 à 14:15
Bonjour!

merci pour ta réponse mais la macro ne marche pas. j'ai ce message d'erreur :

"Erreur d'exécution 1004 : Template_v8_Landmann.xls (c'est le nom d'un des fichiers source)introuvable. Vérifiez l'orthographe du nom du classeur et la validité de l'emplacement."

Pourtant j'ai bien mis le nom de mes classeurs sources, je ne sais pas d'où vient l'erreur. Tu as une idée?

Autre question : cette macro me permet de consolider uniquement les classeurs que j'ai nommés. Est-ce que je ne pourrais pas nommer le répertoire où sont stockés tous les fichiers source? Et il consoliderait tous les fichiers du répertoire. Parce que des fichiers risquent de se rajouter et d'autres disparaître. Si je dois modifier les noms des fichiers à chaque fois, c'est pas pratique.

Merci pour ton aide!
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
19 janv. 2009 à 19:24
Bonjour


Le code que je t'ai donné ne fonctionne qui si les 8 classeurs source et le classeur destination sont dans le même répertoire.
Pour nommer le répertoire des fichiers source et consolider les fichiers du répertoire, voici le code (à coller dans le classeur de consolidation) :

Option Explicit
Private classeurs() As String
Private classeurConso As String
Private cheminSources As String
Private i As Integer
'
Sub consoliderClasseur()
Dim fic As String
cheminSources = "c:"               ' chemin des fichiers source
fic = Dir(cheminSources & "\*.xls")
Redim classeurs(0)
Do Until fic = ""
   ReDim Preserve classeurs(Ubound(classeurs) + 1)
   classeurs(Ubound(classeurs)) = fic
   fic = Dir
Loop
classeurConso = ActiveWorkbook.Name
For i = 1 To UBound(classeurs)
    Workbooks.Open classeurs(i)   ' ouverture des classeurs "source"

Next
consoliderCellule "A1"
For i = 1 To UBound(classeurs)
     Workbooks(classeurs(i)).Close savechanges:=False   ' fermeture des classeurs "source"

Next
End Sub
'
Sub consoliderCellule(cellule As String)   ' consolidation d'une cellule

Dim total As Double
For i = 1 To UBound(classeurs)
    total = total + Workbooks(classeurs(i)).ActiveSheet.Range(cellule).Value
Next
Workbooks(classeurConso).ActiveSheet.Range(cellule).Value = total
End Sub

Avec ce code, les repertoires du classeur de destination et des classeurs source doivent être différents.

Cordialement
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
19 janv. 2009 à 19:29
Petite modification ; à la ligne ouverture des classeurs "source", il faut lire Workbooks.Open cheminSources & "" & classeurs(i)

Cordialement
0
Rejoignez-nous