XL 2021 Recherche un utilitaire (Code VBA) pour la structure des tableaux Excel

UnDePlusieurs

XLDnaute Nouveau
Bonjour à vous tous,

Je recherche un utilitaire (ou programme externe ) (ou du code VBA) permettant de lister les noms des tableaux dans le chiffrier. Chaque tableau devrait avoir sa liste de champs avec adresses, type de données etc...

ex: Feuil1
Nom de Feuil1: ex Clients
Nom du Tableau: Tableau1
$B3$:$F25$
1 B # Client Numérique
2 C NomClient Texte
3 D Rabais Pourcentage
4 E Actif Vrai ou Faux
5 F TotalAchat Monétaire

Je suis un néophyte avec VBA et ne suis pas assez bon à date pour programmer quelque chose comme cela. Toute aide serait bienvenue et appréciée. Il existe probablement du code qui le fait déjà mais je ne trouve pas...

Merci d'avance
 
Dernière édition:
Solution
Bonsoir le fil, @Phil69970

En attendant non point Godot ;)
Un petit code qui titille un tableau donné
Code:
Option Base 1
Sub test_LO()
Dim LO As ListObject, F As Worksheet
Set LO = ActiveSheet.ListObjects(1)
Set F = Worksheets("Feuil3")
F.Range("A1") = "Nom Feuille: " & LO.Parent.Name
F.Range("A2") = "Nom Tableau: " & LO.Name
F.[A3] = "Plage Cellules: " & LO.DataBodyRange.Address
F.[A4] = "NB Colonnes: " & LO.ListColumns.Count & " | NB Lignes: " & LO.ListRows.Count
F.[A5] = "Style du tableau: " & LO.TableStyle
Dim t()
ReDim t(LO.ListColumns.Count)
For i = 1 To LO.ListColumns.Count
t(i) = "Format Colonne " & i & ": " & LO.ListColumns(i).DataBodyRange.NumberFormatLocal
Next
F.Cells(6, "A").Resize(UBound(t)) = Application.Transpose(t)...

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, @Phil69970

En attendant non point Godot ;)
Un petit code qui titille un tableau donné
Code:
Option Base 1
Sub test_LO()
Dim LO As ListObject, F As Worksheet
Set LO = ActiveSheet.ListObjects(1)
Set F = Worksheets("Feuil3")
F.Range("A1") = "Nom Feuille: " & LO.Parent.Name
F.Range("A2") = "Nom Tableau: " & LO.Name
F.[A3] = "Plage Cellules: " & LO.DataBodyRange.Address
F.[A4] = "NB Colonnes: " & LO.ListColumns.Count & " | NB Lignes: " & LO.ListRows.Count
F.[A5] = "Style du tableau: " & LO.TableStyle
Dim t()
ReDim t(LO.ListColumns.Count)
For i = 1 To LO.ListColumns.Count
t(i) = "Format Colonne " & i & ": " & LO.ListColumns(i).DataBodyRange.NumberFormatLocal
Next
F.Cells(6, "A").Resize(UBound(t)) = Application.Transpose(t)
F.Cells(1).CurrentRegion.Borders.Value = 1
F.Cells(1).CurrentRegion.Columns.AutoFit
End Sub
Ce qui donne
PS: Le tableau était sur la feuille 2
LeTableau.PNG
propTB.PNG
 

UnDePlusieurs

XLDnaute Nouveau
Bonjour à vous,

Grâce à votre code initial, j'ai personnalisé un peu et cela me donne ce que j'avais sensiblement besoin. Je vais continuer à m'amuser... Merci énormément. J'espère un jour être aussi bon que vous.
Il me reste à identifier la lettre de la colonne de chacun des champs.

VB:
Sub test_LO()
    Dim LO     As ListObject, F As Worksheet
    Set LO = ActiveSheet.ListObjects(1)
    Set F = Worksheets("Structure")
    F.Range("A1") = "Nom Feuille: " & LO.Parent.Name
    F.Range("A2") = "Nom Tableau: " & LO.Name
    F.[A3] = "Plage Cellules: " & LO.DataBodyRange.Address
    F.[A4] = "NB Colonnes: " & LO.ListColumns.Count & " | NB Lignes: " & LO.ListRows.Count
    F.[A5] = "Style du tableau: " & LO.TableStyle
    Dim t()
    ReDim t(LO.ListColumns.Count)
    For i = 1 To LO.ListColumns.Count
        t(i) = "Colonne " & i & ": Champ " & LO.ListColumns(i).Name & " , Format " & LO.ListColumns(i).DataBodyRange.NumberFormatLocal
    Next
    F.Cells(6, "A").Resize(UBound(t)) = Application.Transpose(t)
    F.Cells(1).CurrentRegion.Borders.Value = 1
    F.Cells(1).CurrentRegion.Columns.AutoFit
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    20 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Re

@UnDePlusieurs
Pour la lettre
(mais vaut mieux que le tableau ne soit pas plus loin que la 26ième colonne ;)
Code:
Dim t()
ReDim t(LO.ListColumns.Count)
For i = 1 To LO.ListColumns.Count
t(i) = "Lettre Colonne: " & Left(LO.HeaderRowRange.Item(i).Address(0, 0), 1) & " | Format Colonne " & i & ": " & LO.ListColumns(i).DataBodyRange.NumberFormatLocal
Next
 

Staple1600

XLDnaute Barbatruc
Re

Une petite variante d'écriture pour le fun
Code:
Sub test_LO_BIS()
Dim LO As ListObject, tb, t(), F As Worksheet, x As Range, i%
Set LO = ActiveSheet.ListObjects(1): Set F = Worksheets("Feuil3")
tb = Array("Nom Feuille: " & LO.Parent.Name, "Nom Tableau: " & LO.Name, "Plage Cellules: " & LO.DataBodyRange.Address, _
"NB Colonnes: " & LO.ListColumns.Count & " | NB Lignes: " & LO.ListRows.Count, "Style du tableau: " & LO.TableStyle)
F.Range("A1:A5") = Application.Transpose(tb)
ReDim t(LO.ListColumns.Count)
For i = 1 To LO.ListColumns.Count
Set x = LO.HeaderRowRange.Item(i)
t(i) = "Lettre Colonne: " & Left(x.Address(0, 0), 1) & "| Nom Champ: " & x & " | Format Colonne " & i & ": " & LO.ListColumns(i).DataBodyRange.NumberFormatLocal
Next
F.Cells(7, "A").Resize(UBound(t)) = Application.Transpose(t)
With F.Cells(1).CurrentRegion
    .Borders.Value = 1
    .Columns.AutoFit
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 468
Messages
2 088 685
Membres
103 919
dernier inscrit
BOB66500