Dans cet article, nous allons créer une macro pour extraire les données d’une feuille de calcul de données brutes vers une nouvelle feuille de calcul, en fonction de la plage de dates spécifiée.

Les données brutes se composent de trois colonnes. La première colonne contient les dates, la deuxième colonne contient les noms des agents et la troisième colonne contient le nombre de ventes effectuées par un agent à cette date particulière.

ArrowRawData

Avant d’exécuter la macro, deux entrées sont requises d’un utilisateur. L’utilisateur doit définir la date de début et de fin. En fonction des dates spécifiées, la macro extrait les données entre la plage de dates définie dans une nouvelle feuille de calcul.

Après avoir spécifié les dates de début et de fin, l’utilisateur doit cliquer sur le bouton «Soumettre» pour exécuter la macro.

ArrowMainSheet

Lors de l’exécution de la macro, il triera les données dans la feuille «RawData», en fonction de la colonne de date et extraira les données en fonction de la plage de dates spécifiée dans la feuille de calcul nouvellement insérée.

ArrowAfterRunningMacro

ArrowOutputSheet

Explication logique

La macro prend les entrées pour les dates de début et de fin des cellules J8 et J9, respectivement. Cette macro trie d’abord les données de la feuille «RawData», en fonction de la colonne A dans l’ordre croissant. Nous avons trié les données en fonction des valeurs de date, afin de pouvoir copier les données dans une seule plage, après avoir appliqué un filtre pour la plage définie.

Après avoir trié les données, appliquez le filtre dessus. Le filtre appliqué est basé sur deux conditions, la première condition est que la valeur de la colonne A doit être supérieure ou égale à la date de début et la seconde condition est que la valeur de la colonne A doit être inférieure ou égale à la date de fin.

Après avoir appliqué le filtre, la nouvelle feuille de calcul est insérée et les données filtrées y sont copiées et collées.

Explication du code

Range (« A1 »). CurrentRegion.Sort key1: = Range (« A1 »), order1: = xlAscending, Header: = xlYes Le code ci-dessus est utilisé pour trier les données dans la plage définie. Key1 spécifie la colonne en fonction de laquelle les données seront triées. L’ordre de tri est fourni par order1. Nous avons déjà défini l’ordre croissant. Pour définir l’ordre décroissant, on peut utiliser la constante xlDescending. L’en-tête est utilisé pour spécifier si la plage de données contient l’en-tête.

Range (« A1 »). CurrentRegion.AutoFilter Field: = 1, Criteria1: = « > = » & StartDate, Operator: = xlAnd, Criteria2: = « ⇐ » & EndDate Le code ci-dessus est utilisé pour appliquer le filtre sur la plage de données . Field1 spécifie le numéro de colonne sur lequel le filtre sera appliqué. Les critères 1 et 2 définissent les conditions en fonction des données filtrées.

L’opérateur spécifie l’opérateur, qui sera utilisé entre deux conditions.

Worksheets.Add after: = Feuilles de travail (Worksheets.Count)

Le code ci-dessus est utilisé pour insérer la nouvelle feuille de calcul après la dernière feuille de calcul du classeur.

On peut facilement comprendre les codes, car j’ai mis des commentaires avec les codes dans la macro.

Veuillez suivre ci-dessous pour le code

Sub CopyDataBasedOnDate()

'Disabling screen updates

Application.ScreenUpdating = False

'Declaring two variables of Date data type

Dim StartDate, EndDate As Date

'Declaring variable for worksheet object

Dim MainWorksheet As Worksheet

'Initializing the Date variables with starting date from cell J8

'and end date from cell J9 of "Macro" sheet

StartDate = Sheets("Macro").Range("J8").Value

EndDate = Sheets("Macro").Range("J9").Value

'Initializing worksheet object with "RawData" worksheet

Set MainWorksheet = Worksheets("RawData")

'Activating the worksheet object

MainWorksheet.Activate

'Sorting the data by date in column A in ascending order

Range("A1").CurrentRegion.Sort _

key1:=Range("A1"), order1:=xlAscending, _

Header:=xlYes

'Filter the data based on date range between starting date and end date

Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _

">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate

'Copy the filter data

ActiveSheet.AutoFilter.Range.Copy

'Inserting new worksheet after the last worksheet in the workbook

Worksheets.Add after:=Worksheets(Worksheets.Count)

'Pasting the copied data

ActiveSheet.Paste

'Auto adjusting the size of selected columns

Selection.Columns.AutoFit

Range("A1").Select



'Activating the "RawData" sheet

MainWorksheet.Activate

'Removing filter from the worksheet which we applied earlier

Selection.AutoFilter

Sheets("Macro").Activate

End Sub

Si vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.

Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]