J'essaie d'écrire une macro qui copie le contenu de la colonne 1 de la feuille 1 vers la colonne 2 de la feuille 2. Voici à quoi ressemble le module mais, lorsque je l'exécute, j'obtiens
Erreur d'exécution 9, indice hors plage.
Sub OneCell()
Sheets("Sheet1").Select
'select column 1 A1'
Range("A1:A3").Select
Selection.Copy
Range("B1:B3").Select
ActiveSheet.Paste
Sheets("Sheet2").Select
Application.CutCopyMode = False
End Sub
Ce qui suit fonctionne bien pour moi dans Excel 2007. Il est simple et effectue une copie complète (conserve toute la mise en forme, etc.):
Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)
"Columns" renvoie un objet Range, et donc il utilise la méthode "Range.Copy". "Destination" est une option pour cette méthode - si elle n'est pas fournie, la valeur par défaut est de copier dans le tampon de collage. Mais une fois fourni, c'est un moyen facile de copier.
Comme lors de la copie manuelle d'éléments dans Excel, la taille et la géométrie de la destination doivent prendre en charge la plage copiée.
La sélection est souvent inutile. Essaye ça
Sub OneCell()
Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
Si vous avez fusionné des cellules,
Sub OneCell()
Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
qui ne copie pas les cellules telles qu'elles sont, où le code précédent copie exactement comme il ressemble (fusionné).
Je ne sais pas pourquoi vous obtiendrez un indice hors de portée, à moins que vos feuilles ne soient pas réellement appelées Sheet1
ou Sheet2
. Lorsque je renomme mon Sheet2
à Sheet_2
, J'ai ce même problème.
De plus, une partie de votre code semble dans le mauvais sens (vous collez avant de sélectionner la deuxième feuille). Ce code fonctionne bien pour moi.
Sub OneCell()
Sheets("Sheet1").Select
Range("A1:A3").Copy
Sheets("Sheet2").Select
Range("b1:b3").Select
ActiveSheet.Paste
End Sub
Si vous ne voulez pas savoir comment les feuilles sont appelées, vous pouvez utiliser les index entiers comme suit:
Sub OneCell()
Sheets(1).Select
Range("A1:A3").Copy
Sheets(2).Select
Range("b1:b3").Select
ActiveSheet.Paste
End Sub