Créer un système de reporting dynamique, Excel VBA

Créer un système de reporting dynamique, Excel VBA

Voici un guide détaillé et un code pour créer un système de reporting dynamique à l’aide de VBA dans Excel. 

Guide étape par étape : 

Étape 1 : Préparez votre fichier Excel 

Commencez par créer un fichier Excel avec des données qui serviront de source pour votre plage dynamique. Par exemple, supposons que nous avons un tableau dans la Feuille1 contenant des données de ventes avec les colonnes suivantes : 

  • A : Date 
  • B : Produit 
  • C : Quantité 
  • D : Prix 
  • E : Total (calculé comme Quantité * Prix) 

Vous allez sélectionner dynamiquement une plage de données en fonction de certaines conditions (par exemple, dates ou quantités). 

Étape 2 : Ouvrez l’Éditeur Visual Basic For Applications (VBA) 

Pour commencer à écrire le code VBA, appuyez sur Alt + F11 pour ouvrir l’éditeur VBA. 

Étape 3 : Insérez un nouveau module 

Dans l’éditeur VBA, allez dans le menu et cliquez sur Insertion > Module. Cela insérera un nouveau module dans lequel vous pourrez écrire votre code. 

Étape 4 : Écrire le code VBA pour le reporting dynamique 

Voici le code VBA qui sélectionne dynamiquement une plage en fonction des données, puis génère un rapport (par exemple, en additionnant les totaux ou en générant des informations spécifiques à partir de la plage sélectionnée) : 

Sub CreateDynamicReport() 
    Dim ws As Worksheet 
    Dim lastRow As Long 
    Dim startDate As Date 
    Dim endDate As Date 
    Dim reportRange As Range 
    Dim totalSales As Double 
    Dim totalQuantity As Double 
    Dim i As Long 
    ' Définir la feuille contenant les données 
    Set ws = ThisWorkbook.Sheets("Feuille1") 
    ' Trouver la dernière ligne de données (en supposant que la colonne A n'a pas de cellules vides dans la plage de données) 
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 
    ' Définir la plage de dates (vous pouvez personnaliser ces valeurs) 
    startDate = DateSerial(2025, 1, 1) ' Date de début (par exemple, 1er janvier 2025) 
    endDate = DateSerial(2025, 12, 31) ' Date de fin (par exemple, 31 décembre 2025) 
    ' Parcourir les données pour trouver les lignes dans la plage de dates 
    For i = 2 To lastRow 
        If ws.Cells(i, 1).Value >= startDate And ws.Cells(i, 1).Value <= endDate Then 
            ' Ajouter les lignes qui correspondent à la plage de dates dans la plage du rapport 
            If reportRange Is Nothing Then 
                Set reportRange = ws.Rows(i) 
            Else 
                Set reportRange = Union(reportRange, ws.Rows(i)) 
            End If 
        End If 
    Next i 
    ' Vérifier si des lignes ont été trouvées 
    If Not reportRange Is Nothing Then 
        ' Calculer les ventes totales et la quantité totale pour la plage sélectionnée 
        totalSales = 0 
        totalQuantity = 0 
        For Each cell In reportRange.Columns(5).Cells ' La colonne E contient les Totaux (Quantité * Prix) 
            totalSales = totalSales + cell.Value 
        Next cell 
        For Each cell In reportRange.Columns(3).Cells ' La colonne C contient les Quantités 
            totalQuantity = totalQuantity + cell.Value 
        Next cell 
        ' Afficher le résumé du rapport (vous pouvez personnaliser cette partie) 
        ws.Range("G1").Value = "Ventes Totales : " & totalSales 
        ws.Range("G2").Value = "Quantité Totale : " & totalQuantity 
        MsgBox "Rapport généré avec succès !", vbInformation 
    Else 
        MsgBox "Aucune donnée trouvée pour la plage de dates donnée.", vbExclamation 
    End If 
End Sub

Étape 5 : Personnaliser le Code 

Vous pouvez personnaliser ce code de plusieurs manières : 

  • Modifier la logique de sélection de la plage : Si vous voulez baser la plage dynamique sur d’autres critères (par exemple, produit, région ou montant des ventes), vous pouvez modifier les conditions de la boucle pour filtrer sur différentes colonnes. 
  • Changer la sortie du rapport : Le rapport peut être personnalisé pour afficher d’autres résumés comme la vente moyenne, la vente maximale, etc. 
  • Ajuster la plage de dates : Vous pouvez définir dynamiquement les valeurs de startDate et endDate en fonction de l’entrée de l’utilisateur (par exemple, en utilisant une boîte de saisie ou des références de cellules). 

Étape 6 : Exécuter le Code 

Une fois que vous avez écrit votre code VBA, vous pouvez l’exécuter de la manière suivante : 

  1. Appuyez sur F5 lorsque vous êtes dans l’éditeur VBA, ou 
  2. Retournez dans Excel, créez un bouton (à partir de Insertion > Formes), et associez ce bouton à cette macro. 

Lorsque le code s’exécute, il : 

  1. Sélectionne la plage de données qui correspond à vos critères (dans ce cas, la plage de dates). 
  2. Génère un rapport avec les ventes totales et la quantité totale. 
  3. Affiche une boîte de message confirmant que le rapport a été généré. 

Explication du Code 

  • Configuration de la feuille : Le code commence par définir la feuille de calcul et trouve la dernière ligne de données (lastRow), ce qui est utilisé pour parcourir toutes les lignes de la plage de données. 
  • Sélection dynamique de la plage : Il vérifie ensuite chaque ligne de la date (colonne A) pour voir si elle correspond à la plage de dates définie. Si une ligne correspond, elle est ajoutée à la plage reportRange. 
  • Somme des Totaux : Après avoir identifié les lignes pertinentes, le code additionne les valeurs des ventes totales (colonne E) et des quantités (colonne C) pour fournir un résumé global des données sélectionnées. 
  • Sortie du Rapport : Les résultats sont affichés dans les cellules G1 et G2, et une boîte de message s’affiche pour indiquer si le rapport a bien été généré. 

Sortie 

Le code affichera : 

  • Les Ventes Totales et Quantité Totale dans les cellules G1 et G2. 
  • Une Boîte de Message indiquant si le rapport a été généré ou s’aucune donnée n’a été trouvée pour la plage de dates donnée. 

Conclusion 

Ce code VBA vous aide à générer des rapports dynamiques en fonction de plages de dates ou d’autres critères. Vous pouvez facilement l’étendre en ajoutant une logique plus complexe pour filtrer, grouper ou agréger vos données. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x