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