Copie de cellules entre 2 classeurs (moyen plus rapide?) [VBA - Excel] - VB/VBA/VBS - Programmation
Marsh Posté le 24-11-2006 à 17:16:33
bonjour,
ce code est incomplet donc on ne va pas pouvoir te dire grand chose sinon qu'il faut l'optimiser.
Les Select et autres Activate non pas lieu d'être dans une une telle macro.
Il faut utiliser une syntaxe directe qui ne sélecte et n'active rien
A la hache et avec le pied ça donne :
Workbooks("blabla" ).Worksheets(x).Range(Cells(a,b),Cells(c,d)).Copy Workbooks("cible" ).Worksheets(y).Range("A1" )
Gain de temps garanti par le remboursement de la différence...
A+
Marsh Posté le 24-11-2006 à 17:27:14
Bonjour,
Tu n'as pas besoin de sélectionner les cellules avant de les copier, ni même de sélectinner la destination.
Il faut préalablement nommer tes classeur :
dim Wbk1 as workbook, Wbk2 as workbook
'Si tes classeurs sont fermés
Set Wbk1 = Workbooks.Open(Filename:="C:\blabla\Classeur1.xls" )
Set Wbk2 = Workbooks.Open(Filename:="C:\blabla\Classeur2.xls" )
'Ou bien Set Wbk1 = ThisWorkbook, si le classeur est celui ou se trouve ton code
et ensuite tu fais tes collages de type :
Wbk2.worksheets(K).cells(A,B)=Wbk1.worksheets(M).cells(C,D)
Marsh Posté le 24-11-2006 à 17:47:22
ca va effectivement beaucoup plus vite, c'est presque instantané!!!
par contre ca fait buger quelque chose dans le reste de mon prog... jvais essayer de régler ca.
merci beaucoup en tous cas !!!
Marsh Posté le 24-11-2006 à 18:07:07
Re,
j'ai bien galéré et j'ai pas trouvé ce qui faisait bugger la suite de mon prog (une boucle qui "oublie" de se faire, sans déclencher d'erreur...). Je reviens lundi pour donner des détails, ca peut peut-être intéresser quelqu'un.
Bon weekend à vous deux
Marsh Posté le 27-11-2006 à 10:43:15
Salut,
Je n'ai toujours pas trouvé ce qui faisait bugger ma macro. Voila les 2 versions, celle avec la syntaxe moche mais qui marche, et l'autre avec la syntaxe la plus directe, mais que j'arrive pas à faire tourner
|
et voila celui avec les liens copies directes :
|
Please help... je comprends pas du tout pourquoi ca ne marche plus
Marsh Posté le 27-11-2006 à 11:47:22
Utilise le balisage Fixed plutot que Cpp ( avec une syntaxe correcte ) cela nous permettra un copier/coller plus facile pour tester ton code.
Marsh Posté le 27-11-2006 à 14:13:18
désolé je suis vraiment nouveau sur le forum... c'est quoi la syntaxe correcte?
edit : j'ai fait une modif au dessus, ca va bien comme ca ou faut-il que je change autre chose?
Marsh Posté le 27-11-2006 à 14:50:01
Bonjour,
Dans la première version copy puis pastespecial avec xlvalues
Il y avait peut-être une raison.?
Cordialement
Marsh Posté le 27-11-2006 à 16:08:13
Salut à tous
j'ai rajouté .Value à la fin des WbkN.worksheets(K).cells(A,B), plus quelques bidouiles d'indices et ca marche nickel
grand merci à tous !!
ps : voila le code qui marche au cas ou ca intéresserait qqn
|
Marsh Posté le 24-11-2006 à 17:07:17
Bonjour tout le monde
J'ai écris une macro qui va chercher des cellules dans un classeur pour les recopier dans un autre classeur. Le problème c'est que ya plein de cellules à copier et que je suis débutant. Résultat : ca prend très longtemps, ma macro tourne une minute pour scanner les 30 onglets de mon classeur et récupérer les cellules voulues.
Je pense que ca vient du fait que j'utilise le code suivant pour aller chercher ma cellule : je suis dans mon classeur de donnéees, je copie, j'ouvre essai.xls, je colle, puis je réouvre le premier, je copie...etc...
En fait je sais pas s'il est possible de faire référence au texte d'une cellule d'un autre classeur sans passer par copier/coller.
Est-ce que quelqu'un aurait une idée pour que ca aille plus vite?
Merci d'avance pour votre aide
Bonne soirée à tous
DaBoos