Format de cellules lors d'une copie

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

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
236
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
236
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
42
Date d'inscription
dimanche 13 octobre 2013
Statut
Membre
Dernière intervention
12 octobre 2021

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
42
Date d'inscription
dimanche 13 octobre 2013
Statut
Membre
Dernière intervention
12 octobre 2021

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
236
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
42
Date d'inscription
dimanche 13 octobre 2013
Statut
Membre
Dernière intervention
12 octobre 2021

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