Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…