VBA : Copier valeur de cellules dans une autre feuilles [Résolu/Fermé]

- - Dernière réponse : michel_m
Messages postés
15981
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 novembre 2019
- 24 mars 2014 à 14:46
Bonjour,

Je débute depuis peut en VBA et j'essaye
Je souhaiterais copier les valeurs d'une range dans une autre range mais dans une autre feuille. J'ai trouvé plusieurs solutions pour répondre à mon problème, j'ai tout d'abord utiliser cette trame pour faire mon copier coller :

Worksheets("Hebdo").Activate
Range(Cells(lig1, col), Cells(lig - 1, col + 2)).Select
Range(Cells(lig1, col), Cells(lig - 1, col + 2)).Copy

ActiveWorkbook.Sheets("GR1").Activate
ActiveWorkbook.Sheets("GR1").Range(Cells(5, 1), Cells(14, 3)).Select
ActiveWorkbook.Sheets("GR1").Paste

Cette trame me convenait parfaitement jusqu'à ce que je modifie la mise en forme de mon tableau excel de manière à imprimer mes tableaux remplis automatiquement. Je me retrouve dans à copier des valeurs de cellules taille 22 et à les coller dans des cellules qui sont censés être écrite taille 11.
Pour cela j'ai lu sur ce forum qu'il est plus simple pour effectuer cette action de copier coller en ne copiant que les valeurs et non la cellule entière en utilisant la manière suivante :

Range("A1:C5").value = Range("D6:G11").value

Appliquer à mon problème cela donne ceci :

Sheets("GR1").Range("A5:C14").Value = Sheets("Hebdo").Range(Cells(lig1, col), Cells(lig - 1, col + 2)).Value

lig et col étant 2 variables integer qui sont préalablement définis.

Cependant ce code ne fonctionne pas, cela me met un message d'erreur.

J'ai lu également qu'il existait une méthode avec .PasteSpecial mais je ne sais pas m'en servir.

Est-ce que quelqu'un aurait une solution

Cordialement

Max
Afficher la suite 

2 réponses

Messages postés
15981
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 novembre 2019
2825
0
Merci
Bonjour,
apparemment tes surfaces ne sont pas identiques
A5:C14 comporte 2 lignes
donc
Sheets("GR1").Range("A5:C14") = Sheets("Hebdo").Range(Cells(lig, col), Cells(lig +2, col + 2)).Value
ou
Range(Cells(lig-1, col), Cells(lig +1, col + 2)).Value

remarque
tu avais 3 variables Lig1, Lig et col...
il n'est pas néessaire d'indiquer .value das les cellules cibles



Michel
0
Merci
Merci michel,

A force de tâtonnement, j'ai fini par trouvé. J'ai finis par comprendre le fonctionnement de la fonction .PasteSpecial , j'ai donc utilisé cette fonction. Le problème venait effectivement de la définition de la surface de réception.
J'ai solution le problème de la manière suivante :

Worksheets("Hebdo").Activate
Range(Cells(lig1, col), Cells(lig - 1, col + 2)).Select
Range(Cells(lig1, col), Cells(lig - 1, col + 2)).Copy

ActiveWorkbook.Sheets("GR1").Activate
ActiveWorkbook.Sheets("GR1").Cells(5, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues

Il suffisait simplement de sélectionner une seule cellule et non une surface pour coller les données.
J'espère que mon erreur pourra être profitable à d'autres personnes.

Merci pour la remarques sur les .value, j'en prends note cela me permettra d'alléger mon code.
michel_m
Messages postés
15981
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 novembre 2019
2825 -
Peut-^tre mais la méthode copy- paste special est la plus mauvaise

tous les activate- select/selection, copy-paste sont à éviter au maximum en VBA:
très lents, conso inutile de mémoire....