[VBA] Copier/Coller valeurs sans presse papier
Dernière réponse : dans Programmation
Bonjour,
D'après ce que j'ai compris, c'est le mal d'utiliser le presse papier pour une macro.
Je cherche donc une astuce pour faire un copier coller-valeur d'une feuille ; comprendre par là que j'aimerais supprimer les formules d'une feuille, en gardant les valeurs et mise en forme.
Voici le code utilisé actuellement :
Ce que je fait avec cette macro est de copier une feuille précise dans un nouveau classeur, surprime les formules (étape ci-dessus), renseigner certain champs, et supprimer d'autres données.
Voila, donc, si quelqu'un peut m'envoyer sur une piste pour faire cela - avec élégance - sans forcément passer par copier/coller spécial, je lui en serais reconnaissant.
D'après ce que j'ai compris, c'est le mal d'utiliser le presse papier pour une macro.
Je cherche donc une astuce pour faire un copier coller-valeur d'une feuille ; comprendre par là que j'aimerais supprimer les formules d'une feuille, en gardant les valeurs et mise en forme.
Voici le code utilisé actuellement :
Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues
Ce que je fait avec cette macro est de copier une feuille précise dans un nouveau classeur, surprime les formules (étape ci-dessus), renseigner certain champs, et supprimer d'autres données.
Voila, donc, si quelqu'un peut m'envoyer sur une piste pour faire cela - avec élégance - sans forcément passer par copier/coller spécial, je lui en serais reconnaissant.
Autres pages sur : vba copier coller valeurs presse papier
Lassé par la pub ? Créez un compte
Meilleure solution
Salut Tantal,
Effectivement, par principe, il est inadmissible d'utiliser le presse-papier comme variable temporaire.
Imagine que tous les programmes le fassent, et bien sûr, tous en même temps !
Bonjour la pagaille.
Aussi, fais-je la chasse à pareille pratique.
Je chasse de la même manière cette pratique qui consiste à sélectionner un objet puis à agir sur ce qui est sélectionné. Comme si Windows et ses applications étaient incapable de changer à leur guise l'objet courant !!!!!!
Donc :
Or donc, pour ne pas passer par le presse-papier, une façon élégante serait d'utiliser ce type de code :
TADAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ! Eh, c'est tout con, mais ça dure des plombes...
Retirons la mise à jour de l'affichage au cours de la manip' :
C'est mieux que si c'était pire, mais ce sont encore quelques longues secondes à comparer avec la quasi-immédiateté d'un copier/coller.
Le modèle objet de VB est partiel. Les ingénieurs de chez Microsoft se sont arrêtés en chemin.
Pourquoi quand on utilise Copy(Destination), ne pas disposer des mêmes options que quand on utilise Copy/PasteSpecial ?
Il reste une solution que je n'aime pas trop : envoyer paître le pauv' zeb et ses principes à la con.
Effectivement, par principe, il est inadmissible d'utiliser le presse-papier comme variable temporaire.
Imagine que tous les programmes le fassent, et bien sûr, tous en même temps !
Bonjour la pagaille.
Aussi, fais-je la chasse à pareille pratique.
Je chasse de la même manière cette pratique qui consiste à sélectionner un objet puis à agir sur ce qui est sélectionné. Comme si Windows et ses applications étaient incapable de changer à leur guise l'objet courant !!!!!!
Donc :
Cells.Copy Cells.PasteSpecial Paste:=xlValues
Or donc, pour ne pas passer par le presse-papier, une façon élégante serait d'utiliser ce type de code :
Cells.Value = Cells.Value
TADAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ! Eh, c'est tout con, mais ça dure des plombes...
Retirons la mise à jour de l'affichage au cours de la manip' :
Application.ScreenUpdating = False Cells.Value = Cells.Value Application.ScreenUpdating = True
C'est mieux que si c'était pire, mais ce sont encore quelques longues secondes à comparer avec la quasi-immédiateté d'un copier/coller.
Le modèle objet de VB est partiel. Les ingénieurs de chez Microsoft se sont arrêtés en chemin.
Pourquoi quand on utilise Copy(Destination), ne pas disposer des mêmes options que quand on utilise Copy/PasteSpecial ?
Il reste une solution que je n'aime pas trop : envoyer paître le pauv' zeb et ses principes à la con.
Solution sélectionnée par tantal_fr
Ok, ça marche.
Merci Zeb ; après avoir nommé les cellules ayant des formules à supprimer (pas sur la feuille complète), j'obtient ça :
Je ne peut pas dire si c'est plus rapide ou plus lent car il n'y a pas d'itérations, sur une exécution, on ne sent pas la différence.
Merci Zeb ; après avoir nommé les cellules ayant des formules à supprimer (pas sur la feuille complète), j'obtient ça :
'Suppression des formules Range("Addr").Value = Range("Addr").Value
Je ne peut pas dire si c'est plus rapide ou plus lent car il n'y a pas d'itérations, sur une exécution, on ne sent pas la différence.
tantal_fr a édité ce message
Bon, ça ne marche pas si toute les cellules du range ne sont pas contiguës. Je ne sais pas comment expliquer ce qui se passe, mais dans mon cas, le range est constitué de deux plages contiguës ; la première plage est dupliquée sur la seconde.
Je suis obligé de faire en deux fois :
Je suis obligé de faire en deux fois :
'Suppression des formules Range("Addr_Four").Formula = Range("Addr_Four").Value Range("Addr_Livr").Formula = Range("Addr_Livr").Value
tantal_fr a édité ce message
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumVba copier coller valeur
- ForumVba copier coller ligne
- ForumCode vba copier coller
- ForumProgramme vba copier coller
- ForumExcel vba copier coller
- ForumVba copier coller sã lection
- ForumBoucle vba copier coller
- ForumVba copier coller ciblã
- ForumExcel vba copier coller plage
- articlesVba copier coller valeur cellule excel
- Voir plus