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.