2017-10-13 2 views
0

Je suis un débutant à la programmation VBA, j'ai donc besoin de votre aide ici. Je dois créer une macro qui copie des données d'une feuille à l'autre. Donc, ce que j'ai fait est d'enregistrer une macro (en utilisant un enregistreur de macro) pour les étapes que je dois copier/coller. Maintenant, je dois créer une boucle pour le faire pour toutes les informations dont j'ai besoin.Copie de données d'une feuille à une autre avec des boucles VBA

Voici des captures d'écran de la feuille contenant les données:

Monthly Report Image

Voici capture d'écran de la feuille que les données doivent être collées:

Desired Result Image

permet donc parler les données, que mon rapport contient. J'ai un rapport mensuel pour les pays, que mon entreprise sert. Chaque jour du mois, j'ai des prévisions qui devraient être téléchargées dans notre base de données.

Voici le code que je l'ai déjà:

Sub manual_upload() 

    Sheets("Forecast").Select 

    Range("G1").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Copy 
    Sheets("Upload").Select 
    Range("A2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 


    Sheets("Forecast").Select 
    'ActiveWindow.ScrollColumn = 2 
    'ActiveWindow.ScrollColumn = 1 

    Range("C2").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Upload").Select 

    Range("B2").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 


    Application.CutCopyMode = False 
    Range("A2").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(0, 1).Select 
    Range(Selection, Selection.End(xlUp)).Select 
    Selection.FillDown 

    'Selection.AutoFill Destination:=Range("B2:B31") 
    'Range("B2:B31").Select 

    Sheets("Forecast").Select 
    Range("E2").Select 
    Selection.Copy 
    Sheets("Upload").Select 

    Range("C2").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 

    Range("b2").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(0, 1).Select 
    Range(Selection, Selection.End(xlUp)).Select 
    Selection.FillDown 

    'Selection.AutoFill Destination:=Range("C2:C31") 
    'Range("C2:C31").Select 

    Sheets("Forecast").Select 
    Range("B2").Select 
    Selection.Copy 
    Sheets("Upload").Select 

    Range("D2").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 

    Range("c2").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(0, 1).Select 
    Range(Selection, Selection.End(xlUp)).Select 
    Selection.FillDown 

    'Selection.AutoFill Destination:=Range("D2:D31") 
    'Range("D2:D31").Select 

    Range("E2").Select 
    Sheets("Forecast").Select 
    Range("G2").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Copy 
    Sheets("Upload").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
    Sheets("Forecast").Select 
    Range("D2").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Upload").Select 
    Range("F2").Select 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
    Selection.AutoFill Destination:=Range("F2:F31") 
    Range("F2:F31").Select 

    'next i 
End Sub 

Je ne sais pas comment démarrer la boucle. Quelles données devraient être ajoutées comme un divers et etc. J'apprécierai votre aide.

+0

En fonction du nombre de colonnes à travers les prévisions sont, je vous suggère de penser à l'utilisation Powerquery. Les étapes de base sont les suivantes: Définissez vos données source, comme dans votre image affichée 1, comme une table, demandez à powerquery de sélectionner cette table (requête de table), puis renommez les colonnes que vous voulez conserver, supprimez celles que vous ne voulez pas, et mettez en surbrillance toutes les colonnes de date et faites des colonnes unpivot de l'onglet Transformer (ou faites un clic droit). Puis fermez et chargez à la feuille. – QHarr

+0

Votre explication a-t-elle été coupée? Vous n'expliquez pas comment les champs sont remplis dans le résultat souhaité. Qu'est-ce que * Dashboard *, * Forecast *? À part cela, cela ressemble à un processus de fusion. N'importe quel jeu de données/programme tel que Python pandas/R/SAS peut être remodelé en conséquence. – Parfait

Répondre

1

Voici un guide pour effectuer ces étapes sans VBA si les données sont en une seule feuille (vous pouvez utiliser la fusion de plusieurs requêtes avec même structure si les données sont dans différentes feuilles):

1) Sélectionnez vos données et mis en place comme une table en appuyant sur Ctrl + T.: Table

2) Importer vos données à l'aide powerquery (excel 2016 à partir de l'option de la table est dans l'onglet données, dans les versions précédentes, vous devez installer le powerquery ajouter et utiliser la onglet de puissance). Une fenêtre apparaîtra avec les données de votre table. Vous travaillerez ensuite avec cette vue de vos données.

Adding to powerquery from table

3) Supprimer des colonnes indésirables en mettant en surbrillance, puis cliquez droit Ôtez

Remove columns

4) Sélectionnez les colonnes Date et UNPIVOT. Vous pouvez sélectionner la première colonne de date puis maintenez la touche Maj et sélectionnez dernière colonne de date pour mettre en évidence tous)

Unpivot date columns

5) Double-cliquez dans têtes de colonne pour renommer par exempleAttribut -> Date, valeur -> Prévision, Nom DB -> Pays

Renaming columns

6) Vérifiez les types de données sont corrects

Setting column data types

7) ReOrder vos colonnes pour correspondre à la sortie désirée en les faisant glisser à réarranger

Re-arrange column order

8) finale ment proche et la charge de votre feuille de calcul

Close and load

9) Voir le résultat

Result

10) Vous pouvez ajouter des données à votre table de source, puis cliquez sur Actualiser la requête pour tout mettre à jour. Excuses table différente dans l'image que cette image est une modification ultérieure en réponse à une question. Lorsque vous sélectionnez une cellule dans votre tableau de résultats, la fenêtre de requête apparaît et vous verrez le nom de votre requête et une flèche d'actualisation verte. Cliquez sur ceci pour mettre à jour quand les données de source ont changé.

enter image description here

+0

Merci beaucoup pour l'aide, mais j'ai besoin de créer une macro, car je vais changer ces données sur une base mensuelle. Cela veut dire que j'aurai des mois avec des jours plus bas. –

+0

La table sera automatiquement mise à jour et la requête créée aura une petite flèche verte. Lorsque vous avez de nouvelles données dans votre table source, vous cliquez sur la flèche et tout est mis à jour. Y – QHarr

+0

Merci, mais disons que mon BOSS veut une macro: D: D: D –