Votre question

Ouvrir une série de fichiers xls, dont les noms sont dans une colonne

Tags :
  • Programmation
Dernière réponse : dans Programmation
8 Février 2010 23:41:10

Bonjour et merci d'avance à la bonne âme qui pourra m'aider.

J'ai 1 xls "base.xls" où 1 colonne contient les noms "file0...xls" d'une collection de xls ayant la meme structure mais avec des valeurs différentes, dont je dois recopier des valeurs vers le fichier "base.xls"

Code:
NomFich= ".xls" <<je ne vois pas quoi écrire ici!!!>>
Workbooks.Open Filename:=NomFich

Dim wb As Workbook
Dim ws As Worksheet
Set wb =Workbooks.Open("NomFich") <est ce exact??>>
Set ws =wb.Worksheets(1)

Merci de me corriger
Bien cordialement

Autres pages sur : ouvrir serie fichiers xls noms colonne

9 Février 2010 02:32:28

Tu dois faire une boucle qui passe sur chacune des cases de ta colonne; pour chaque case, tu ouvres ton workbook avec le texte que tu trouves; pour l'arrêt, c'est toujours délicat, tu peux par exemple t'arrêter à la première case vide trouvée.

Maintenant la syntaxe, je ne l'ai plus, ça fait des années que j'ai pas touché à ça, mais je peux essayer de regarder.

EDIT: y'a probablement une arnaque du genre le nouveau classeur qui devient le classeur actif, je vais jeter un coup d'oeil dans mes vieux machins.
m
0
l
9 Février 2010 03:16:02

Bon, je suis trop naze pour faire un truc correct ce soir, alors je poste juste un bout de code d'une vieille appli:
Citation :

Set librarySheet = ThisWorkbook.Worksheets("Library")
'Je récupère une référence vers ma worksheet, ici nommée "library" (dans les petits tabs en bas genre Feuille1 etc.)

For Each NomCell In librarySheet.Range("K11", librarySheet.Range("K16000").End(xlUp))
'Je boucle sur ma zone K11-dernière case remplie (au mieux jusqu'à K16000, le reste ne sera pas pris en compte), la référence vers la case traitée est dans NomCell

CommentSuite = CommentSuite & "> " & NomCell.Value 'Je fais des trucs avec le contenu de ma case, en l'occurrence une concaténation de texte. Toi tu devrasvérifier qu'il y a bien quelque chose de valide dans la case, ouvrir ton workbook, etc.
Next


C'est pas tout à fait la même problématique, mais le schéma est globalement le même.
Est-ce que ça t'aide?
m
0
l
Contenus similaires
9 Février 2010 11:13:10

Merci franchement . j'ai fait ci après mais bloque sur la designation contenu cellule
Set librarySheet = ThisWorkbook.Worksheets("BC PF")
For Each NomCell In librarySheet.Range("C16", librarySheet.Range("C17").End(xlUp))
CommentSuite = CommentSuite & "> " & NomCell.Value
NomFich = "NomCell"
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks.Open("NomCell") <
<il s'arrete là, idem si NomFich, que dois je faire?>>
Set ws = wb.Worksheets(1)

Range("W16").Select
ActiveCell.FormulaR1C1 = "=[NomFich]Produit!R5C2"
Range("X16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R5C4"
Range("Y16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R5C5"
Range("Z16").Select
ActiveCell.FormulaR1C1 = "=[NomFich]Produit!R7C8"
Range("AK16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R9C2"
Range("AL16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R9C4"
Range("AM16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R9C5"
Range("AN16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R11C8"
Range("AY16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R13C2"
Range("AZ16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R13C4"
Range("BA16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!R13C5"
Range("BB16").Select
ActiveCell.FormulaR1C1 = "=[PP12.xls]Produit!15C8"
Next
End Sub
m
0
l
9 Février 2010 15:07:38

Bonjour
Je précise l'objectif qui est de recopier des cellules d'une série de xls "sources" dans 1 xls "cible"

Xls cible: contient une colonne de cellules donnant les noms des fichiers "cibles"
PP12.XLS
PP13.XLS
PP14.XLS
PP15.XLS
PP16.XLS
PP17.XLS
etc..
Et une feuille qui doit recevoir les contenus des cellules recopiées dans le fichiers "source"

Les xls "sources" sont identiques en structure, avec des valeurs différentes pour chacun.

A priori: le code:
- identifier la zone liste des noms xls du fichier cible , feuille "BC PF"
- Dire de "lire" dans le fichier cible, le contenu de la 1ere cellule de la zone liste des noms des fichiers sources
- Ouvrir le fichier source du répertoire,dont le nom est celui de la 1ère celule
- recopier le contenu des cellules du fichier source vers la feuille du fichier cible
et recommencer avec le fichier source suivant dont le nom est dans la zone liste des noms ecrite dans le fichier cible.

Apparemment, il manque le"sésame" qui permet de nommer le fichier source en lisant son nom dans la liste de noms= la valeur de la cellule
Merci beaucoup par avance. Bien cordialement
PP19.XLS




m
0
l
9 Février 2010 23:32:23

Ne recopie pas mon code sans le comprendre! Déjà, il n'est pas adapté, et en plus, la façon dont j'ai nommé mes variables avait un sens dans mon programme, mais n'en a pas forcément dans le tien...

Ton problème est a priori plutôt complexe; je peux te donner des pistes, ou corriger des erreurs, mais je ne peux pas le faire moi même; si tu ne sais pas du tout coder en VBA, je ne pense pas que l'enregistreur de macros (fort pratique mais plutôt mauvais niveau qualité du code) soit suffisant pour résoudre ton problème en tâtonnant.

Je te renvoie à ce document qui m'avait beaucoup aidé à l'époque où j'avais dû apprendre le VBA:

ftp://ftp2.developpez.be/developps/vb/VB-excel2.pdf

Pour l'une des erreurs que tu rencontres:
Citation :
Set wb = Workbooks.Open("NomCell" ) <
<il s'arrete là, idem si NomFich, que dois je faire?>>

Si tu mets "NomCell" entre guillemets, c'est une chaine de caractères, en gros ici tu dis au programme d'utiliser la méthode Open pour ouvrir un classeur appelé "NomCell". Or ce que tu veux, c'est le contenu de la variable NomCell, pas juste la chaine de caractère qui n'a rien à voir:
Tu devrais donc faire quelque chose comme Workbooks.Open(NomCell) , avec NomCell qui contient à ce stade le chemin vers ton fichier.

Il y en a d'autres (par exemple la boucle, tu traites au maximum 2 cases dedans, je doutes que ça soit ce que tu veuilles), etc.
m
0
l
10 Février 2010 12:06:07

Bonjour

Grand merci de ton temps, et que les Dieux te le donne enretour mille fois!
Le truc c'est d'ouvrir fichiers source (liste du type PP12.xls) dont le nom est dans une cellule du fichier cible déjà ouvert (AA BC ttjan10.xls)
Le pointeur est sur la cellule qui contient ce nom de fichier source à ouvrir (le 1er est PP12.xls)

L'idée est de lire la cellule où il y a le nom PP12.xls et d'ouvrir par VBA ce fichier pour en extraire les données à recopier!

Set librarySheet = ThisWorkbook.Worksheets("BC PF") 'ouverture de le feuille fichier cible où il y a la liste des fichiers source à ouvrir '

For Each NomCell In librarySheet.Range("C17", librarySheet.Range("C18").End(xlUp)) 'définir la zone des cellules contenant les noms des fichiers sources'

CommentSuite = CommentSuite & "> " & NomCell.Value 'récupérer le contenu de la cellule de la zone: par exemple PP12.xls' la chaine alphanumérique cellule de la zone'

NomCell= ???quel code??? 'donner le nom du fichier source à ouvrir qui est dans la cellule de la zone fichier cible: par exemple PP12.xls'

Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks.Open(NomFich) 'ouvrir le fichier source, par exemple PP12.xls'
Set ws = wb.Worksheets(1)
Windows("AA BC ttjan10.xls").Activate 'activer la feuille fichier cible'
Range("W16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R5C2"
Range("X16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R5C4"
Range("Y16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R5C5"
Range("Z16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R7C8"
Range("AK16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R9C2"
Range("AL16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R9C4"
Range("AM16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R9C5"
Range("AN16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R11C8"
Range("AY16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R13C2"
Range("AZ16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R13C4"
Range("BA16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!R13C5"
Range("BB16").Select
ActiveCell.FormulaR1C1 = "=[NomCell]Produit!15C8"
Next
End Sub
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS