Génération de Tables en VBA par ChatGPT


>_Prompt utilisé : Donne moi un code VBA pour Excel qui permet de créer dans le classeur actuel une nouvelle feuille nommée « Ventes » contenant une table de données de 1000 lignes mise sous forme de tableau avec le nom « Ventes » comme Nom de tableau, contenant des ventes fictives avec une colonne nommée « Date » au format date courte contenant des dates aléatoires avec doublons de 2020 à 2023, une colonne nommée « IdClient » contenant des chiffres aléatoires avec doublons de 1 à 50, une colonne nommée « IdArticle » contenant des chiffres aléatoires avec doublons de 1 à 100, et enfin une colonne nommée « Quantité » contenant des chiffres aléatoires avec doublons de 1 à 10. Puis dans une nouvelle feuille nommée « Clients » du même classeur une table de données mise sous forme de tableau avec le nom « Clients » comme Nom de tableau, contenant la liste des clients avec une Colonne nommée « IdClient » contenant les chiffres de 1 à 50 classés par ordre croissant sans doublon, une colonne nommée « Nom Client » sans doublon contenant des noms aléatoires d’un seul mot de 5 à 10 lettres commençant par une majuscule et une colonne nommée « Pays » avec doublons contenant des noms de pays du monde pris au hasard parmi 10 pays. Enfin, dans une nouvelle feuille nommée « Articles » du même classeur une table de données mise sous forme de tableau avec le nom « Articles » comme Nom de tableau, contenant la liste des articles avec une Colonne nommée « IdArticle » contenant les chiffres de 1 à 100 classés par ordre croissant sans doublon, une colonne nommée « Famille Article » sans doublon contenant des noms aléatoires d’un seul mot commençant par une majuscule et désignant si possible des produits technologiques pris parmi 10, et une colonne nommée « Prix Article » au format Excel Comptabilité à 2 virgules contenant des chiffres aléatoires avec 2 virgules allant de 50 à 500 euros.

>_IA interrogée : ChatGPT 3.5


Voici le code VBA qui répond à vos spécifications :

Sub CreerFeuillesDonnees()
    Dim wsVentes As Worksheet
    Dim wsClients As Worksheet
    Dim wsArticles As Worksheet
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim pays() As String
    Dim famillesArticles() As String
    Dim randDate As Double
    
    ' Créer la feuille "Ventes"
    Set wsVentes = Sheets.Add(After:=Sheets(Sheets.Count))
    wsVentes.Name = "Ventes"
    
    ' Ajouter l'en-tête du tableau "Ventes"
    wsVentes.Range("A1:D1").Value = Array("Date", "IdClient", "IdArticle", "Quantité")
    
    ' Remplir le tableau "Ventes" avec des données aléatoires
    For i = 2 To 1001
        ' Générer une date aléatoire entre 2020 et 2023
        randDate = WorksheetFunction.RandBetween(DateValue("2020-01-01"), DateValue("2023-12-31"))
        wsVentes.Cells(i, 1).Value = randDate
        
        ' Générer des chiffres aléatoires avec doublons
        wsVentes.Cells(i, 2).Value = WorksheetFunction.RandBetween(1, 50)
        wsVentes.Cells(i, 3).Value = WorksheetFunction.RandBetween(1, 100)
        wsVentes.Cells(i, 4).Value = WorksheetFunction.RandBetween(1, 10)
    Next i
    
    ' Mettre le tableau "Ventes" sous forme de tableau
    wsVentes.ListObjects.Add(xlSrcRange, wsVentes.Range("A1:D1001"), , xlYes).Name = "Ventes"
    
    ' Créer la feuille "Clients"
    Set wsClients = Sheets.Add(After:=Sheets(Sheets.Count))
    wsClients.Name = "Clients"
    
    ' Ajouter l'en-tête du tableau "Clients"
    wsClients.Range("A1:C1").Value = Array("IdClient", "Nom Client", "Pays")
    
    ' Remplir le tableau "Clients" avec des données aléatoires
    For j = 2 To 51
        wsClients.Cells(j, 1).Value = j ' IdClient sans doublon
        wsClients.Cells(j, 2).Value = NomAleatoire() ' Nom Client aléatoire
    Next j
    
    ' Liste de pays aléatoires pour la colonne "Pays"
    pays = Split("France,USA,Canada,Allemagne,Japon,Chine,Brésil,Australie,Inde,Russie", ",")
    
    ' Remplir la colonne "Pays" avec des données aléatoires
    For j = 2 To 51
        wsClients.Cells(j, 3).Value = pays(Application.WorksheetFunction.RandBetween(0, UBound(pays)))
    Next j
    
    ' Trier la feuille "Clients" par ordre croissant sur la colonne "IdClient"
    wsClients.Sort.SortFields.Clear
    wsClients.Sort.SortFields.Add Key:=wsClients.Range("A2:A51"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With wsClients.Sort
        .SetRange wsClients.Range("A1:C51")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    ' Mettre le tableau "Clients" sous forme de tableau
    wsClients.ListObjects.Add(xlSrcRange, wsClients.Range("A1:C51"), , xlYes).Name = "Clients"
    
    ' Créer la feuille "Articles"
    Set wsArticles = Sheets.Add(After:=Sheets(Sheets.Count))
    wsArticles.Name = "Articles"
    
    ' Ajouter l'en-tête du tableau "Articles"
    wsArticles.Range("A1:C1").Value = Array("IdArticle", "Famille Article", "Prix Article")
    
    ' Remplir le tableau "Articles" avec des données aléatoires
    famillesArticles = Split("Ordinateurs,Téléphones,Tablettes,Imprimantes,Casques,Appareils photos,Enceintes,Écouteurs,Moniteurs,Claviers", ",")
    
    For k = 2 To 101
        wsArticles.Cells(k, 1).Value = k ' IdArticle sans doublon
        wsArticles.Cells(k, 2).Value = famillesArticles(Application.WorksheetFunction.RandBetween(0, UBound(famillesArticles)))
        wsArticles.Cells(k, 3).Value = Format(WorksheetFunction.RandBetween(50, 500) + WorksheetFunction.RandBetween(0, 99) / 100, "0.00") ' Prix Article avec 2 virgules
    Next k
    
    ' Mettre le tableau "Articles" sous forme de tableau
    wsArticles.ListObjects.Add(xlSrcRange, wsArticles.Range("A1:C101"), , xlYes).Name = "Articles"
    
End Sub

Function NomAleatoire() As String
    ' Générer un nom aléatoire de 10 lettres commençant par une majuscule
    Dim voyelles As String
    Dim consonnes As String
    Dim nom As String
    Dim i As Integer
    
    voyelles = "AEIOU"
    consonnes = "MLRST"
    
    nom = UCase(Mid(consonnes, Int((Len(consonnes) * Rnd) + 1), 1))
    
    For i = 1 To 4
        nom = nom & Mid(voyelles, Int((Len(voyelles) * Rnd) + 1), 1)
        nom = nom & Mid(consonnes, Int((Len(consonnes) * Rnd) + 1), 1)
    Next i
    
    NomAleatoire = nom
End Function

Ce code crée les feuilles « Ventes », « Clients » et « Articles » avec les données spécifiées. N’hésitez pas à ajuster selon vos besoins.


>_Prompt utilisé : La colonne IdClient de la table Clients commence au chiffre 2 et finit au chiffre 51 et je voulais qu’elle commence au chiffre 1 et qu’elle finisse au chiffre 50. Idem pour la colonne IdArticles de la table Articles qui commence à 2 et se termine à 101 alors que je voulais qu’elle commence à 1 et se termine à 100.


Je m’excuse pour la confusion. Voici le code VBA modifié pour que la colonne « IdClient » de la table « Clients » commence à 1 et se termine à 50, et que la colonne « IdArticles » de la table « Articles » commence à 1 et se termine à 100 :

Sub CreerFeuillesDonnees()
    Dim wsVentes As Worksheet
    Dim wsClients As Worksheet
    Dim wsArticles As Worksheet
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim pays() As String
    Dim famillesArticles() As String
    Dim randDate As Double
    
    ' Créer la feuille "Ventes"
    Set wsVentes = Sheets.Add(After:=Sheets(Sheets.Count))
    wsVentes.Name = "Ventes"
    
    ' Ajouter l'en-tête du tableau "Ventes"
    wsVentes.Range("A1:D1").Value = Array("Date", "IdClient", "IdArticle", "Quantité")
    
    ' Remplir le tableau "Ventes" avec des données aléatoires
    For i = 2 To 1001
        ' Générer une date aléatoire entre 2020 et 2023
        randDate = WorksheetFunction.RandBetween(DateValue("2020-01-01"), DateValue("2023-12-31"))
        wsVentes.Cells(i, 1).Value = randDate
        
        ' Générer des chiffres aléatoires avec doublons
        wsVentes.Cells(i, 2).Value = WorksheetFunction.RandBetween(1, 50)
        wsVentes.Cells(i, 3).Value = WorksheetFunction.RandBetween(1, 100)
        wsVentes.Cells(i, 4).Value = WorksheetFunction.RandBetween(1, 10)
    Next i
    
    ' Mettre le tableau "Ventes" sous forme de tableau
    wsVentes.ListObjects.Add(xlSrcRange, wsVentes.Range("A1:D1001"), , xlYes).Name = "Ventes"
    
    ' Créer la feuille "Clients"
    Set wsClients = Sheets.Add(After:=Sheets(Sheets.Count))
    wsClients.Name = "Clients"
    
    ' Ajouter l'en-tête du tableau "Clients"
    wsClients.Range("A1:C1").Value = Array("IdClient", "Nom Client", "Pays")
    
    ' Remplir le tableau "Clients" avec des données aléatoires
    For j = 2 To 51
        wsClients.Cells(j, 1).Value = j - 1 ' IdClient sans doublon, commençant à 1
        wsClients.Cells(j, 2).Value = NomAleatoire() ' Nom Client aléatoire
    Next j
    
    ' Liste de pays aléatoires pour la colonne "Pays"
    pays = Split("France,USA,Canada,Allemagne,Japon,Chine,Brésil,Australie,Inde,Russie", ",")
    
    ' Remplir la colonne "Pays" avec des données aléatoires
    For j = 2 To 51
        wsClients.Cells(j, 3).Value = pays(Application.WorksheetFunction.RandBetween(0, UBound(pays)))
    Next j
    
    ' Trier la feuille "Clients" par ordre croissant sur la colonne "IdClient"
    wsClients.Sort.SortFields.Clear
    wsClients.Sort.SortFields.Add Key:=wsClients.Range("A2:A51"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With wsClients.Sort
        .SetRange wsClients.Range("A1:C51")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    ' Mettre le tableau "Clients" sous forme de tableau
    wsClients.ListObjects.Add(xlSrcRange, wsClients.Range("A1:C51"), , xlYes).Name = "Clients"
    
    ' Créer la feuille "Articles"
    Set wsArticles = Sheets.Add(After:=Sheets(Sheets.Count))
    wsArticles.Name = "Articles"
    
    ' Ajouter l'en-tête du tableau "Articles"
    wsArticles.Range("A1:C1").Value = Array("IdArticle", "Famille Article", "Prix Article")
    
    ' Remplir le tableau "Articles" avec des données aléatoires
    famillesArticles = Split("Ordinateurs,Téléphones,Tablettes,Imprimantes,Casques,Appareils photos,Enceintes,Écouteurs,Moniteurs,Claviers", ",")
    
    For k = 2 To 101
        wsArticles.Cells(k, 1).Value = k - 1 ' IdArticle sans doublon, commençant à 1
        wsArticles.Cells(k, 2).Value = famillesArticles(Application.WorksheetFunction.RandBetween(0, UBound(famillesArticles)))
        wsArticles.Cells(k, 3).Value = Format(WorksheetFunction.RandBetween(50, 500) + WorksheetFunction.RandBetween(0, 99) / 100, "0.00") ' Prix Article avec 2 virgules
    Next k
    
    ' Mettre le tableau "Articles" sous forme de tableau
    wsArticles.ListObjects.Add(xlSrcRange, wsArticles.Range("A1:C101"), , xlYes).Name = "Articles"
    
End Sub

Function NomAleatoire() As String
    ' Générer un nom aléatoire de 10 lettres commençant par une majuscule
    Dim voyelles As String
    Dim consonnes As String
    Dim nom As String
    Dim i As Integer
    
    voyelles = "AEIOU"
    consonnes = "MLRST"
    
    nom = UCase(Mid(consonnes, Int((Len(consonnes) * Rnd) + 1), 1))
    
    For i = 1 To 4
        nom = nom & Mid(voyelles, Int((Len(voyelles) * Rnd) + 1), 1)
        nom = nom & Mid(consonnes, Int((Len(consonnes) * Rnd) + 1), 1)
    Next i
    
    NomAleatoire = nom
End Function

Testez vous-même à partir d’un nouveau classeur dans Excel !


Voir la suite avec Analyse de Tables avec ChatGPT sur le site >_Bon_Prompt.com.