web-dev-qa-db-fra.com

Macro VBA sur plusieurs feuilles de calcul

J'essaie d'exécuter une seule macro qui exécute des fonctions sur plusieurs feuilles de calcul. Supposons que j'ai assigné le bouton macro sur la feuille de calcul 4. J'ai énuméré les fonctions que je veux qu'il exécute pas à pas:

1) Sélectionnez certaines cellules de la feuille de calcul 4 et copiez-les dans des cellules adjacentes de la feuille de calcul 4.
2) supprimer une plage de cellules dans la feuille de calcul 3.
3) COUPEZ la plage de cellules de la feuille de calcul 2 puis collez cette plage de cellules dans la feuille de calcul 3.
4) Prenez une plage de cellules dans un classeur séparé et copiez-le dans la feuille de calcul 2. (Je sais que le problème est tout à fait différent car le classeur est automatiquement publié et je devrai trouver un moyen de les lier.)
5) Mettez à jour les tableaux croisés dynamiques de la feuille de travail 4 et de la feuille de travail 3. 

J'aimerais l'aide sur les 3 premières fonctions de cela. J'ai collé mon code actuel ci-dessous.

Sub START()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet

Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")

sh4.Range("B29:B30").Select
Selection.Copy

sh4.Range("C29").Select
ActiveSheet.Paste

sh3.Range("A4:AC1000").Select
Selection.Delete

sh2.Range("A4:AC1000").Select
Selection.Copy

sh3.Range("A4").Select
ActiveSheet.Paste

End Sub

Cela fonctionne ... mais cela ne fonctionne que lorsque je suis dans la bonne feuille de travail pour exécuter une fonction spécifique.

10
kmiao91

En supprimant les select, les selection et les activesheet, vous pourrez rendre cette feuille indépendante

Sub START()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet

Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")

sh4.Range("B29:B30").Copy sh4.Range("C29")

sh3.Range("A4:AC1000").Delete

sh2.Range("A4:AC1000").Copy sh3.Range("A4")

End Sub
13
nutsch

Vous êtes sur un bon début. Juste un peu plus de raffinement et vous l'aurez.

En gros, il n'est pas nécessaire de .Select vos plages (feuilles, classeurs, etc.), du moins dans ce cas. Vous pouvez travailler directement avec eux et en utilisant la variable Copy, indiquez la destination où ils seront copiés.

Voir le code ci-dessous:

Sub START()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim wkb As Workbook

Set wkb = Workbooks("wkbName") '-> best to call workbooks by name, as opposed to "ActiveWorkbook", also best to set it to object

With wkb '-> now we can work with this object directly and succinctly

    Set sh1 = .Sheets("Brand")
    Set sh2 = .Sheets("CurrentWeek")
    Set sh3 = .Sheets("PriorWeek")
    Set sh4 = .Sheets("Pivot")

    sh4.Range("B29:B30").Copy sh4.Range("C29")

    'sh3.Range("A4:AC1000").Delete -> you don't need this if you are overwritting it

    sh2.Range("A4:AC1000").Copy sh3.Range("A4")

End With

End Sub
5
Scott Holtzman

feuilles ("nom1"). plage ("B29: B30"). destination de la copie: = feuilles ("nom2"). plage ("C29")

Copie d'une feuille à une autre en supposant que les noms de feuille sont nom1 et nom2

0
jstiene