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.