Format de cellules lors d'une copie

Résolu
Pauyr Messages postés 53 Date d'inscription dimanche 13 octobre 2013 Statut Membre Dernière intervention 12 avril 2024 - 22 oct. 2013 à 11:33
Pauyr Messages postés 53 Date d'inscription dimanche 13 octobre 2013 Statut Membre Dernière intervention 12 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")


Que j'ai remplacé par :
l = Worksheets("feuil1").Range("A" & Rows.Count).End(xlUp).Row
arr1 = Worksheets("feuil1").Range("A1:AX" & l).Value
Worksheets("feuil2").Range("A1:AX" & l).Value = arr1


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 ..) ?

Cordialement,
Pauyr

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 22/10/2013 à 11:39
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).
0
Okay, merci pour la réponse.

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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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.
0
Pauyr Messages postés 53 Date d'inscription dimanche 13 octobre 2013 Statut Membre Dernière intervention 12 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 ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 oct. 2013 à 12:47
Si tu formates à la main ===>> pas de problème, mais je ne vois alors aucun intérêt informatique.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 22/10/2013 à 13:11
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 ?
0
Pauyr Messages postés 53 Date d'inscription dimanche 13 octobre 2013 Statut Membre Dernière intervention 12 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 !
0
Pauyr Messages postés 53 Date d'inscription dimanche 13 octobre 2013 Statut Membre Dernière intervention 12 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é !).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 22/10/2013 à 14:57
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
0
Pauyr Messages postés 53 Date d'inscription dimanche 13 octobre 2013 Statut Membre Dernière intervention 12 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à :/ ...
0
Rejoignez-nous