Ouvrir fichiers .xls d'un dossier [Résolu]

gmuser 4 Messages postés mercredi 31 décembre 2008Date d'inscription 14 janvier 2009 Dernière intervention - 31 déc. 2008 à 13:57 - Dernière réponse : cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 31 déc. 2008 à 16:16
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Orohena
gmuser 4 Messages postés mercredi 31 décembre 2008Date d'inscription 14 janvier 2009 Dernière intervention - 31 déc. 2008 à 17:29
0
Utile
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!
Commenter la réponse de gmuser
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 31 déc. 2008 à 21:02
0
Utile
Merci ! A toi également
Commenter la réponse de cs_Orohena
gmuser 4 Messages postés mercredi 31 décembre 2008Date d'inscription 14 janvier 2009 Dernière intervention - 2 janv. 2009 à 11:20
0
Utile
ç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!
Commenter la réponse de gmuser
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 2 janv. 2009 à 19:07
0
Utile
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
Commenter la réponse de cs_Orohena
gmuser 4 Messages postés mercredi 31 décembre 2008Date d'inscription 14 janvier 2009 Dernière intervention - 14 janv. 2009 à 14:15
0
Utile
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!
Commenter la réponse de gmuser
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 19 janv. 2009 à 19:24
0
Utile
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
Commenter la réponse de cs_Orohena
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 19 janv. 2009 à 19:29
0
Utile
Petite modification ; à la ligne ouverture des classeurs "source", il faut lire Workbooks.Open cheminSources & "" & classeurs(i)

Cordialement
Commenter la réponse de cs_Orohena

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.