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.