Re : Extraire des cellules d'un nombre indéterminé de classeurs
Bonjour le forum, bonjour Adi Kha,
Fondamentalement ta macro est parfaitement fonctionnelle, elle ne s'exécute pas à cause de deux spécificités Mac:
1) Les chemins d'accès sont écrit avec : et non pas des \
2) Les caractères de recherche générique comme * et ? n'existent pas, ils sont interprétés comme des lettres normales.
Pour le premier point pas de souci, il suffit de remplacer la syntaxe. Mais si tu déplaces ton dossier, tu devras à chaque fois réadapter le chemin dans la macro, d'où l'avantage d'utiliser un chemin relatif (comme proposé par systmd dans sa macro). On y arrive par la fonction
CurDir qui va prendre en compte l'endroit d'où tu ouvres ton classeurs. Là où tu le place dans ton ordi n'a plus d'importance, il suffit qu'il soit un dossier parent avant "Z".
Pour le deuxième, c'est la fonction
MacID combinée à
Dir qui va nous sauver. Elle permet, comme le ferait l'astérisque, de dégager tous les fichiers d'un même type grâce au Mac File Type (équivalent Mac des extension .xls) avec son code à quatre caractère. Pour nous, il s'agit ici de
XLS8 pour les classeurs Excel dès la version 97.
Pour le reste c'est tout bon.
Je te met la macro adapté et commentée ci-dessous, je l'ai testée sur XL2004 avec SL.
Bien du plaisir
By
----------
Sub Synthese()
Range("A1").Select 'sélectionne la cellule active initiale •adapter si besoin•
Chemin = CurDir & ":Z:" 'défini le chemin d'accès au dossier "Z" en fonction du répertoire courant
Fichiers = Dir(Chemin, MacID("XLS8")) 'liste les fichiers excel situés dans le dossier "Z"
Do While Fichiers <> "" 'exécute les commandes suivantes jusqu'à ce que tous les fichiers aient été traités
Workbooks.Open Filename:=Chemin & Fichiers 'ouvre un classeur excel du dossier "Z"
Set Feuille = ActiveWorkbook.Sheets("Facture") 'défini la feuille "Facture" de ce classeur comme source de données
ThisWorkbook.Activate 'réactive le classeur actuel et y copie les valeurs depuis la feuille source
ActiveCell.Value = Feuille.Range("C8").Value 'Copie la cellule "C8" dans la cellule active •asb•
ActiveCell.Offset(0, 1).Value = Feuille.Range("E8").Value 'Copie la cellule "E8" à droite de la précédente •asb•
ActiveCell.Offset(0, 2).Value = Feuille.Range("K57").Value 'Copie la cellule "K57" à droite de la précédente •asb•
ActiveCell.Offset(0, 3).Value = Feuille.Range("H59").Value 'Copie la cellule "H59" à droite de la précédente •asb•
Range("A65536").End(xlUp).Offset(1, 0).Select 'Défini la fin de la ligne et passe à la suivante
Windows(Fichiers).Close savechanges:=False 'Ferme le classeur source sans enregistrer les modifications
Fichiers = Dir 'liste à nouveau le dossier "Z"
Loop 'Si présent, passe au classeur suivant, autrement fin
End Sub