Pauyr
Messages postés53Date d'inscriptiondimanche 13 octobre 2013StatutMembreDernière intervention12 avril 2024
-
22 oct. 2013 à 11:33
Pauyr
Messages postés53Date d'inscriptiondimanche 13 octobre 2013StatutMembreDernière intervention12 avril 2024
-
22 oct. 2013 à 15:08
Bonjour,
Cherchant à rendre mon code plus efficace, je suis tombé sur la méthode consistant à passer par un tableau (enfin, je crois que c'en est un) pour copier des cellules.
À l'origine, j'avais :
l = Worksheets("feuil1").Range("A" & Rows.Count).End(xlUp).Row Worksheets("feuil1").Range("A1:AX" & l).Copy _ Destination:=Worksheets("feuil2").Range("A1")
Sauf que cela me crée un petit problème car cela ne semble pas copier le format originel des cellules et quand je traite par la suite mes données, c'est la mémerde. Je précise que tout mon code marche très bien avec le premier cas.
Y'a-t-il quelque chose que je fais mal ?
Auriez-vous une idée de manip à effectuer ?
Peut-être "supprimer" les formats de toutes les cellules de feuil2 avant la copie (si c'est possible ..) ?
Bonjour,
Garde la première méthode.
La seconde serait bien plus lente si tu devais affecter également le format de tes cellules (l'objet format n'existant pas, il faudrait reprendre en effet un par un tous les critères possibles de ce format).
Si je scinde ma copie en gardant la première méthode pour les données qui merdent (des dates) et la seconde pour le reste, tu penses que ça peut valoir le coup ?
Et sinon, tu as une idée/sais "pourquoi" est-ce que ça ne fait pas la "même" copie ? Sur le papier les méthodes m'ont l'air similaires mais j'imagine que ça ne doit pas être le cas in fine.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 22 oct. 2013 à 11:53
Je ne comprends pas vraiment ta première question.
Pour ce qui est de la seconde question : la seconde méthode (utilisation d'un tableau dynamique) n'est pas du tout une "copie", mais une affectation de valeurs ! Ce n'est pas la même chose du tout.
Pauyr
Messages postés53Date d'inscriptiondimanche 13 octobre 2013StatutMembreDernière intervention12 avril 2024 22 oct. 2013 à 11:59
Ma première question était à propos de faire un mix entre la rapidité du passage par une variable et la copie directe.
Ce n'est pas une copie. Très bien. Donc, ça prend les valeurs de la cible et les transposent où je lui dis. Si je formate à la main la feuille de destination, cela devrait donc ne pas poser de problème ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 22 oct. 2013 à 12:47
Si tu formates à la main ===>> pas de problème, mais je ne vois alors aucun intérêt informatique.
Il te coûterait alors (au lieu de formater à la main) moins cher de copier toute la feuille sur l'autre, puis d'en effacer uniquement les valeurs (clearcontents).
Mais on arriverait là à quoi faire, sinon ... tout copier, puis effacer ... puis alimenter ?
Copier pour copier, autant copier (pour moins cher, en plus), la seule plage concernée ! Non ?
Pauyr
Messages postés53Date d'inscriptiondimanche 13 octobre 2013StatutMembreDernière intervention12 avril 2024 22 oct. 2013 à 13:56
Je vois ; je trouvais juste ma macro un peu longue et je gagnais pas mal de temps avec la seconde méthode :)
Merci pour les éclaircissements !
Pauyr
Messages postés53Date d'inscriptiondimanche 13 octobre 2013StatutMembreDernière intervention12 avril 2024 22 oct. 2013 à 14:59
En fait je crois que ça me fout la merde parce que mon Excel fait des trucs "bizarres" (bon j'imagine que y'a forcément une cause mais je vois pas) lorsque je répète ma macro (où y'a la seconde méthode) plusieurs fois.
Du genre il me copie une colonne dans une feuille où je lui ai jamais demandé, quand je lui demande d'insérer une colonne il en remplace sa voisine de droite au lieu de s'y insérer, etc.
Alors que quand je répète la macro avec la première méthode, tout se passe bien à chaque fois. Je comprends vraiment pas.
Mais bon, c'est pas très grave ; la première méthode fonctionne correctement, je vais pas me plaindre (c'est juste mon intellect qui est frustré !).
Je ne vois pas trop ce qui pourrait réellement ralentir ta macro (avec la méthode Copy).
Juste une chose : inhibe l'affichage (Application.screenupdating = False) pendant son exécution et rétablis-le ensuite ( = True)
PS et si tu y as des formules : pense également à passer Application.Calculation en manuel pendant ta macro puis en automatique à la fin.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Pauyr
Messages postés53Date d'inscriptiondimanche 13 octobre 2013StatutMembreDernière intervention12 avril 2024 22 oct. 2013 à 15:08
Ce n'est pas spécialement qu'elle est ralentie, c'est juste qu'elle est un peu longue. Quand j'ai testé avec la seconde méthode sur la procédure où y'a le copy (j'ai compartimenté mon tout mon code en plusieurs subs) et que j'ai inséré des timers, j'ai vu que c'était nettement plus rapide.
L'affichage et l'autocalculation sont inhibés (quand j'ai découvert ça, c'était en effet assez impressionnant !).
Après c'est juste que j'aime bien comprendre ce qu'il se passe et ce que j'ai décrit dans mon précédent post me laisse dubitatif. Mais bon, j'ai pas spécialement le temps de m'y pencher là :/ ...