Copier les valeurs d'une plage à une autre

Bonjour,

Je voudrais copier les valeurs d'une plage de cellules vers une autre. J'utilise jusqu'à maintenant la méthode avec

Range("plage d'origine").Copy
Range("plage d'origine").Paste

L'inconvénient est que comme les plages de cellules sont grandes et que j'inclus cette partie de mon code dans une boucle, le temps d'exécution augmente énormément. Je me demandais donc s'il existe une autre méthode qui copierait uniquement les valeurs des cellules et pourrait éventuellement faire diminuer le temps d'exécution

Merci d'avance

Bonjour Guillaume,

je te propose ce code VBA :

Range("plage d'origine").Copy: Range("plage destination").PasteSpecial -4163

si la plage destination est la même que la plage d'origine :

With Range("plage d'origine")
  .Copy: .PasteSpecial -4163
End With

si tu as beaucoup de calculs sur ta feuille, essaye avec :

Application.Calculation = -4135
Range("plage d'origine").Copy: Range("plage destination").PasteSpecial -4163
Application.Calculation = -4105

OU

Application.Calculation = -4135
With Range("plage d'origine")
  .Copy: .PasteSpecial -4163
End With
Application.Calculation = -4105

dhany

Bonjour dhany,

J'ai essayer tes différentes méthodes, ça me copie correctement mes données, mais le temps d'exécution reste quasiment le meme qu'avec un .Copy - .Paste ... Par contre je suis assez intrigué par ces solutions : tu pourrais m'expliquer ce que signifie ces -4163 ou -4135 etc ?

les 3 nombres négatifs sont des constantes numériques :

-4163 est l'équivalent de : xlPasteValues

-4135 est l'équivalent de : xlCalculationManual

-4105 est l'équivalent de : xlCalculationAutomatic

avantage : c'est plus court à écrire et à lire !

faut juste s'en rappeler !


pour le temps d'exécution, j'avais espéré qu'il aurait été plus court

par l'activation du mode de calcul manuel (tant pis ! ).

(mais des fois, ça marche super bien ! ça dépend du classeur !)


peut-être que ça pourra t'aider d'essayer ce genre d'instructions :

[E5:E14].Value = [B2:B11].Value

Range("plage destination").Value = Range("plage d'origine").Value

la plage destination doit obligatoirement être de même taille que la plage d'origine !

(pour les 2 instructions VBA : copie des valeurs seulement, pas des formats)

dhany

oups je n'avais pas été notifié de tes réponses je vais essayer avec cette méthode. Merci pour les explications

Edit : ça marche pas non plus, ça doit venir du fait que mes deux plages d'origine et de destination ne sont pas dans la même feuille ( j'ai codé comme ça : FeuilleDestination.Range(plage de destination").Value = FeuilleOrigine.Range("plage d'origine").Value )

oui, j'crois qu'les notifications sont parfois un peu capricieuses ! bonne chance pour tes essais !

dhany

Rechercher des sujets similaires à "copier valeurs plage"