Bonjour le Fil,

Envoyé par
laurent_42
Voici mon code :
Range(Cells(2, 3), Cells(2, nb_var)).Copy Sheets(3).Range("B2")
Lorsque je lance la macro depuis la feuille 2, ça marche.
Pour éviter de devoir être nécessairement sur la feuille 2 ....
Pour compléter l'explication de Philippe (que je salue) et confirmer «l'importance de préciser la parentalité complète des objets pour lever toute ambiguïté» (Sic.)
Avec, pour exemple le premier code de ton post 1 :
Quand la feuille 2 est active, l'écriture simplifiée peut être la suivante (déconseillée) :
Range(Cells(2, 3), Cells(2, nb_var)).Copy Worksheets(3).Range("B2")
Le Range et les deux Cells dont la parentalité n'est pas précisée sont rattaché à la feuille active, c'est à dire la feuille 2.
Quand la feuille 3 est active, l'écriture simplifiée peut être la suivante (déconseillée) :
Worksheets(2).Range(Worksheets(2).Cells(2, 3), Worksheets(2).Cells(2, nb_var)).Copy Range("B2")
Le Range dont la parentalité n'est pas précisée est rattaché à la feuille active, c'est à dire la feuille 3.
La bonne syntaxe pour s'affranchir des feuilles actives est la suivante :
Worksheets(2).Range(Worksheets(2).Cells(2, 3), Worksheets(2).Cells(2, nb_var)).Copy Worksheets(3).Range("B2")
Qu'on peut simplifier en utilisant With et le point devant Range et Cells, comme l'indique Philippe :
1 2 3
| With Worksheets(2)
.Range(.Cells(2, 3), .Cells(2, nb_var)).Copy Worksheets(3).Range("B2")
End With |
Mais attention, tous les codes précédents travaillent avec le classeur actif.
Lorsque le classeur sur lequel on veut opérer n'est pas actif il faut préciser la parentalité jusqu'au classeur :
1 2 3 4 5
| With Workbooks("MonClasseur")
With .Worksheets(2)
.Range(.Cells(2, 3), .Cells(2, nb_var)).Copy .Worksheets(3).Range("B2")
End With
End With |
Attention, penser au point devant Worksheets(3)
Note : les objets Range et Cells n'appartiennent pas à une feuille Sheets(x), mais à une feuille de calcul Worksheets(x).
J'espère que ces explications te permettrons d'éclairer ta lanterne.
Partager