[EXCEL] :: Toutes versions :: Création de jeux de données

  • Initiateur de la discussion Initiateur de la discussion oguruma
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

oguruma

XLDnaute Impliqué
Bonjour le Forum,

De retour...
J'espère sans interruptions

ayant besoin de jeux données variables sur une période voici un exemple de code permettant de générer 3 fichiers .csv afin de les importer via powerquery.

Ils sont :
1774803040877.png


Ils sont déposés dans
1774803101385.png


Il faudra bien entendu adapter votre M afin qu'il soit en conformité avec l'organisation de votre disque.
Il faudra donc modifier le chemin du fichier dans la fonction File.Contents du code M.
Exemple ci-dessous.

PowerQuery:
let
    Source = Csv.Document(File.Contents("C:\Users\oguru\desktop\ventes.csv"),[Delimiter=";", Columns=8, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"En-têtes promus" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"PU_Vente", Int64.Type}, {"Quantite", Int64.Type}, {"Date_Vente", type date}}),
    #"Lignes triées" = Table.Sort(#"Type modifié",{{"Date_Vente", Order.Ascending}})
in
    #"Lignes triées"

Exemple de code VBA pour les 3 fichiers générés

Vous pouvez bien entendu partir de ceux-ci pour les adapter en fonction de vos besoins ou changer de thèmes, exemple produire des données RH.
Dans la rapidité, j'ai fait simple dans la nomination des variables. C'est ce que j'appelle des "moulinettes". Donc inutile de s'attarder sur la forme d'écriture 😉 🙂

VB:
Option Explicit

Sub Generer500Ventes()
    Dim i As Long, fPath As String
    Dim coms As Variant, clis As Variant, prods As Variant, prices As Variant, stats As Variant
   
    coms = Array("Jean Dupont", "Marie Curie", "Paul Legrand", "Sophie Roux", "Luc Lefebvre")
    clis = Array("TechnologieInformatique", "SecuritDomicile", "TransportLogistique", "RetailDiscount", "CorpsEtSoins")
    prods = Array("Licence Logiciel", "Maintenance Annuelle", "Formation", "Audit Expert")
    prices = Array(1200, 450, 800, 1500)
    stats = Array("STAT_01", "STAT_02", "STAT_03")
   
    ' C:\Users\oguru\Desktop

    fPath = Environ("USERPROFILE") & "\Desktop\ventes.csv"
   
    Open fPath For Output As #1
    Print #1, "Date_Vente;Commercial;Client;Secteur;Produit;PU_Vente;Quantite;Statut"
   
    For i = 1 To 500
        Dim idx As Integer: idx = Int(Rnd * 4)
        Print #1, DateAdd("d", Int(Rnd * 180), "01/01/2026") & ";" & _
                 coms(Int(Rnd * 5)) & ";" & _
                 clis(Int(Rnd * 5)) & ";" & _
                 "Secteur " & Int(Rnd * 3 + 1) & ";" & _
                 prods(idx) & ";" & _
                 prices(idx) + Int(Rnd * 100) & ";" & _
                 Int(Rnd * 9 + 1) & ";" & _
                 stats(Int(Rnd * 3))
    Next i
   
    Close #1
    MsgBox "500 ventes générées sur le Bureau ! => " & fPath, vbInformation
End Sub

Sub Generer1000LignesESN()
    Dim i As Long, fPath As String
    Dim cons As Variant, clie As Variant, exps As Variant, tjms As Variant, stats As Variant
   
    cons = Array("Alice Martin", "Bob Durand", "Charlie Leveque", "Dora Schneider", "Eric Traore", "Fanny Leroy", "Gilles Petit")
    clie = Array("Banque Pop", "TotalEnergies", "LVMH", "Airbus", "SNCF", "EDF", "Renault")
    exps = Array("Data Science", "Cloud", "Cyber Securite", "Management", "DevOps", "VBA-EXCEL")
    tjms = Array(850, 950, 1100, 1250, 750, 650)
    stats = Array("Facturé", "En cours", "En attente")

    fPath = Environ("USERPROFILE") & "\Desktop\missions.csv"
   
    Open fPath For Output As #1
    Print #1, "Date_Mission;Consultant;Client;Expertise;TJM;Jours_Vendus;Statut"
   
    For i = 1 To 1000
        Dim idxExp As Integer: idxExp = Int(Rnd * 6)
        Print #1, DateAdd("d", Int(Rnd * 180), "01/01/2026") & ";" & _
                 cons(Int(Rnd * 7)) & ";" & _
                 clie(Int(Rnd * 7)) & ";" & _
                 exps(idxExp) & ";" & _
                 tjms(idxExp) & ";" & _
                 Int(Rnd * 40 + 1) & ";" & _
                 stats(Int(Rnd * 3))
    Next i
   
    Close #1
    MsgBox "1000 lignes générées sur votre Bureau (missions_esn_500.csv) ! => " & fPath, vbInformation
End Sub

Sub GenererCSV_3000Lignes()
    Dim i As Integer
    Dim fPath As String
    Dim produits As Variant, regions As Variant
   
    produits = Array("Clavier", "Souris", "Ecran", "Casque", "Laptop", "Tablette", "Imprimante", "Disque USB")
    regions = Array("Nord", "Sud", "Est", "Ouest")
   
    ' Chemin sur le bureau
    fPath = Environ("USERPROFILE") & "\Desktop\donnees.csv"
   
    Open fPath For Output As #1
    ' En-têtes
    Print #1, "Date;Produit;Region;Ventes;Quantite"
   
    For i = 1 To 3000
        Print #1, DateAdd("d", Int(Rnd * 360), "02/01/2025") & ";" & _
                 produits(Int(Rnd * 8)) & ";" & _
                 regions(Int(Rnd * 4)) & ";" & _
                 Int(Rnd * 1950 + 50) & ";" & _
                 Int(Rnd * 14 + 1)
    Next i
   
    Close #1
    MsgBox "Le fichier CSV a été créé sur votre Bureau ! => " & fPath, vbInformation
End Sub

Ces trois types de fichiers vous permettront de créer des fichiers Excel Exemples afin de tester vos formules, de vous entraîner sur les TCD pour les débutants ou toutes autres activités par exemple répondre à un post sur le forum excel en prenant ces fichiers comme exemple pour illustrer votre réponse comme je l'ai fait ce soir sur l'un d'eux.
 

Pièces jointes

Bonjour Le Forum,
Un petit complément pour générer un nouveau jeu de données.
Ici on simule 50 magasins envoyant à la maison mère leur activité annuelle chiffre d'affaires plus les charges.
Cas très intéressant pour tester tous types de traitements avec des formules complexes comme RECHERCHEV RECHERCHEX RECHERCHEH INDEX EQUIV INDIRECT SEQUENCE FILTRE TRIER TRIER.PAR PLAGES NOMMEES DYNAMIQUE etc. etc. etc.
Code modifiable à votre guise concernant la génération des valeurs et le nombre de magasin.
Pour tester les aspects de reporting plus complexes on peut générer des fichiers annuels dans un dossier spécifique et les consolider avec PowerQuery si certains membres du forum souhaitent faire le pas vers cet outil désormais presque incontournable sous Excel surtout quand il est nécessaire d'importer des fichiers au format .csv par exemple.

J'ai largement documenté le code pour vos propres adaptations. Ici, bon comme c'est une fois de plus du jetable.... pas trop de dentelle sur la forme d'écriture au niveau des variables. C'est du vite fait ! 🙂

VB:
Sub GenererCSV_50_Magasins()
    Dim FichierCSV As String
    Dim NumeroFichier As Integer
    Dim i As Long, m As Long
    Dim ligneTexte As String
    Dim produits As Variant, categories As Variant
    Dim ventesMois(1 To 12) As Double
    Dim totalAnnuel As Double
    Dim nomProduit As String, catProduit As String
  
    ' 1. Paramétrage du fichier sur le Bureau
    FichierCSV = Environ("USERPROFILE") & "\Desktop\Rapport_50_Magasins.csv"
  
    ' 2. Tableaux de référence pour varier les produits
    produits = Array("Pamplemousse", "Moka", "Citrons", "Caramel Macchiato", "Pommes", "Caffé Latte", "Oranges", "Espresso", "Thé", "Cappuccino")
    categories = Array("Fruit", "Boisson", "Fruit", "Boisson", "Fruit", "Boisson", "Fruit", "Boisson", "Boisson", "Boisson")
  
    ' 3. Ouverture du fichier (Output écrase le fichier s'il existe déjà)
    NumeroFichier = FreeFile
    Open FichierCSV For Output As #NumeroFichier
  
    ' 4. Écriture de l'en-tête (Format CSV Français : point-virgule)
    ligneTexte = "Magasin;Produit;Categorie;Janv;Fevr;Mars;Avri;Mai;Juin;Juil;Aout;Sept;Octo;Nove;Dece;" & _
                 "Total_Annuel;Ecart_Inventaire;Total_Invendus;Commandes_Annulees;Conso_Gaz;Conso_Eau;Conso_Elec;" & _
                 "Frais_Gardiennage;Frais_Personnel;Entretien_Locaux;Frais_Generaux;Montant_Vols;Jours_Travailles;Arrets_Maladie"
    Print #NumeroFichier, ligneTexte
  
    ' 5. Boucle pour 50 Magasins
    Randomize
    For i = 1 To 50
        ' Sélection cyclique du produit et de la catégorie
        nomProduit = produits((i - 1) Mod 10)
        catProduit = categories((i - 1) Mod 10)
      
        ' Initialisation de la ligne avec Magasin, Produit et Catégorie
        ligneTexte = "MAG-" & Format(i, "000") & ";" & nomProduit & ";" & catProduit
      
        ' Génération des ventes mensuelles (aléatoires entre 5000 et 30000) et calcul du total
        totalAnnuel = 0
        For m = 1 To 12
            ventesMois(m) = Int((25000 * Rnd) + 5000)
            totalAnnuel = totalAnnuel + ventesMois(m)
            ligneTexte = ligneTexte & ";" & ventesMois(m)
        Next m
      
        ' Ajout des colonnes de gestion après Décembre
        ligneTexte = ligneTexte & ";" & totalAnnuel                               ' Total Annuel
        ligneTexte = ligneTexte & ";" & Round(totalAnnuel * (0.01 + Rnd * 0.02), 2) ' Ecart Inventaire (1% à 3%)
        ligneTexte = ligneTexte & ";" & Int((400 * Rnd) + 100)                    ' Total Invendus
        ligneTexte = ligneTexte & ";" & Int((30 * Rnd))                           ' Commandes Annulées
        ligneTexte = ligneTexte & ";" & Int((1500 * Rnd) + 800)                   ' Conso Gaz
        ligneTexte = ligneTexte & ";" & Int((400 * Rnd) + 1000)                    ' Conso Eau
        ligneTexte = ligneTexte & ";" & Int((2500 * Rnd) + 1200)                  ' Conso Elec
        ligneTexte = ligneTexte & ";" & Int((1000 * Rnd) + 1500)                   ' Gardiennage
        ligneTexte = ligneTexte & ";" & Int((18000 * Rnd) + 200000)                ' Frais Personnel
        ligneTexte = ligneTexte & ";" & Int((500 * Rnd) + 3000)                    ' Entretien
        ligneTexte = ligneTexte & ";" & Int((900 * Rnd) + 2000)                    ' Frais Généraux
        ligneTexte = ligneTexte & ";" & Round(totalAnnuel * (Rnd * 0.008), 2)      ' Montants Vols
        ligneTexte = ligneTexte & ";" & Int((252 - (Rnd * 10)))                   ' Jours travaillés (env 250)
        ligneTexte = ligneTexte & ";" & Int(Rnd * 30)                             ' Arrêts maladie
      
        ' Écriture de la ligne complète dans le fichier
        Print #NumeroFichier, ligneTexte
    Next i
  
    ' 6. Fermeture et confirmation
    Close #NumeroFichier
    MsgBox "Le fichier CSV avec 50 magasins a été généré sur votre bureau.==> " & FichierCSV, vbInformation, "Succès"
End Sub
 

Pièces jointes

bonjour @oguruma
j'ai seulement essayé ton code du post 1. Comme tu l'écris, il permet rapidement de créer des jeux de données 👍.
il y a quelques temps, j'avais mis à disposition ici Générateur de jeux d'essai (tableaux de valeurs paramétrées de tous types) , certes un peu long à la première utilisation.
Bonjour CroCro
Oui en effet je me souviens bien de cela. Bon c'est du code que j'ai écrit à la va-vite....
Au moins sur le Forum il y aura plusieurs manières de générer des fichiers de tests.
Je vais publier un Trucs & Astuces sur divers fonctions qui embarque des tables exemples prêtes à l'emploi.
Merci.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

A
Réponses
11
Affichages
2 K
amateur_will
A
M
Réponses
2
Affichages
1 K
mgrizzly
M
M
Réponses
3
Affichages
4 K
_matt_44
M
Retour