web-dev-qa-db-fra.com

Comment puis-je copier des colonnes d'une feuille à une autre avec VBA dans Excel?

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
12
excel34

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.

26
David

La sélection est souvent inutile. Essaye ça

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
11
guitarthrower

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é).

1
Lucy

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
1
paxdiablo