avec currentregion peu-être :
Code:yaWk.Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)
Version imprimable
la plage a copier tu la définie ou??
Pour Youki94: je les définis dans les différents fichiers à copier. Je les nomme toutes "plage_nommee".
Pour jacques : j'ai essayé avec CurrentRegion. Ca ne change rien.
Au fait, tu travailles sur le code directement ou t'as testé ? Si t'as testé, est-ce que ça marche chez toi ??? ;-(
Merci pour le temps passé !
Désolé mais je dois y aller la , il doit y avoir un truc qui m'échappe dans tes fichiers sources... , Range("A1").currentRegion équivaut à ce placer sur la cellule A1 puis utiliser le raccourci 'CTRL *' ...
Il y as peu-être un truc caché dans tes fichiers .csv.. essai de créer un fichier excel tout neuf avec quelques données à partir de la cellule A1 et place le sur ton répertoire voir si lui au moins et copié ..
sinon, oui ici cela fonctionne , j'ai testé avec un seul fichier ...
Ok. Je vais faire ce que tu dis.
Encore merci.
Si ça marche chez toi, ca me rassure !
Bonne soirée.
Ca fonctionne avec plusieurs classeurs (2),mais il y a un probleme a l'endroit des copies(elle se copie en partie l'une sur l'autre
Sinon ca copie bien les donnees dans mon fichierCode:
1
2
3
4
5
6
7
8
9
10
11
12 Range("A1").Select 'sélectionner la cellule de début Chemin = "C:\Documents and Settings\mc\Bureau\Essai\" 'saisir le chemin complet du dossier où se trouvent les fichiers Fichier = Dir(Chemin & "*.xls") ' Premier fichier Do While Fichier <> "" Set yaWk = Workbooks.Open(Filename:=Chemin & Fichier) 'juste a la ligne suivante ou tu dois lui dis d'aller chercher la premier ligne vide yaWk.Sheets(1).Range("plage_nommee").Copy ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0) yaWk.Close False Fichier = Dir ' Fichier suivant Loop ThisWorkbook.Save End Sub
je viens d'essayer avec un nouveau fichier .xls. Je continue à avoir le même problème. Je commence à croire que j'ai un souci lié à la manière dont je nomme en effet "plage_nommee".
Je laisse tomber pour un moment. Je reprendrai plus tard avec le code que tu proposes.
Merci !
il faut que tes plages_nommees soit toutes sur les feuilles1 de tes classeurs sinon ca marches pas
Bonsoir,
Apparemment, il manque le "Paste" dans le code proposé par JackOuYA.
J'avais fait un petit code qui marchait très bien mais je ne l'ai pas sauvegardé.
Autre chose, je me demandais si le fichier final ne serait pas au même endroit que les autres fichiers, auquel cas la marco va chercher à l'ouvrir à un moment donné ???
Cordialement,
Didier
Oups, autant pour moi, meaculpa, le code suivant fait le copy-paste direct !
J'en apprend tous les jours !Code:yaWk.Sheets(1).Range("plage_nommee").Copy ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)
J'ai à nouveau testé ton code, ça marche très bien !
Didier
Je reprends....
Oui, la plage_nommee est bien constituée de cellules dans Feuil1.
Ca ne marche toujours pas.
Je récapitule :
je crée un nouveau fichier test.xls que je place sur mon bureau.
J'ai un dossier essai contenant un fichier essai1.xls (commençons par 1 fichier), avec une plage de cellules non vides de Feuil1, dont j'ai défini le nom comme plage_nommee.
Le fichier essai1 est fermé. Le fichier test est ouvert.
Je double -clique sur ma macro.
LE fichier essai1 s'ouvre, se ferme. Le fichier test se sauvegarde mais vide...
Qu'est-ce que je fais incorrectement ??
Didier, quand tu dis "ton code marche très bien". C'est bien le code de JackOuYA ??
Oui. Je vais essayer de me mettre dans la même configuration que toi et o verra.
Au fait, quelle version d'Excel utilises-tu ?
Didier
excel 2003.
Je suis aussi sur Excel 2003.
Est-ce ta macro est dans le fichier test.xls ? Je pose cette question car "ThisWorkbook" fait référence au fichier Excel qui contient la marco en question. Tout est sauvegardé dans ce fichier.
A part ça, je ne vois rien d'autre.
Didier
Non ! Elle est enregistrée dans classeur de macro personnelle !!
Gasp. Si c'est ça, un très grand merci !
le code fonctionne avec la meme config
sur le bureau fichier excel avec la macro
puis un dossier essai toujours sur le bureau(dans lequel j'ai 2 fichiers excel =essai1 et liste)
la macro fonctionne quasiment si ce n'est que les copie ce font l'une sur l'autre avec un decalage
voila fichier joint
Ca y est... Le problème venait en effet de là où j'enregistrais ma macro...
Merci DidierLoche et vraiment désolée à tous pour ce temps passé.
Il me reste encore à gérer le problème de devoir nommer toutes les plages "plage_nommee". Si je peux éviter ça, ce serait bien. Dans les premiers messages, il y avait des propositions. Je vais aller voir.
Je pense que le problème vient donc de là !
Comme ceci, cela devrait marcher :
DidierCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Sub toto() ' Range("A1").Select 'sélectionner la cellule de début MyWorkbook = "Test.xls" Chemin = "D:\Documents and Settings\Didier\Mes documents\VBA\Essai\" 'saisir le chemin complet du dossier où se trouvent les fichiers Fichier = Dir(Chemin & "*.xls") ' Premier fichier Do While Fichier <> "" If Fichier <> MyWorkbook Then Set yaWk = Workbooks.Open(Filename:=Chemin & Fichier) 'juste a la ligne suivante ou tu dois lui dis d'aller chercher la premier ligne vide yaWk.Worksheets(1).Range("plage_nommee").Copy Workbooks(MyWorkbook).Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0) yaWk.Close False End If Fichier = Dir ' Fichier suivant Loop Workbooks(MyWorkbook).Save End Sub
Je donne le code final pour les prochains qui seraient intéressés...
Ca fonctionne à merveille (pas besoin de nommer les plages, j'imagine qu'excel comprend tout seul qu'il faut prendre toutes les cellules non vides ?!)
J'ai finalement pris le code de Jacques (+ court).
Vraiment merci à tous d'avoir consacré autant de temps !
NB : Attention de mettre la macro DANS le fichier final... ;-)
Code:
1
2
3
4
5
6
7
8
9
10
11
12 Range("A1").Select 'sélectionner la cellule de début Chemin = "C:\Documents and Settings\mc\Bureau\Essai\" 'saisir le chemin complet du dossier où se trouvent les fichiers Fichier = Dir(Chemin & "*.xls") ' Premier fichier Do While Fichier <> "" Set yaWk = Workbooks.Open(Filename:=Chemin & Fichier) yaWk.Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0) yaWk.Close False Fichier = Dir ' Fichier suivant Loop ThisWorkbook.Save ' End Sub