Création d'un tableau structuré en VBA

Bonjour,

J'aimerais faire une macro qui transforme mes données en tableau structuré.

Mon problème c'est que le nombre de ligne ne sera pas toujours le même.

Pourriez-vous svp m'aider à gérer ce problème pour gérer en dynamique?

Ci-dessous un exemple sur un tableau avec des lignes jusqu'à 44.

Sub TABLEAU_STRUCTURE()
'
' TABLEAU_STRUCTURE Macro
'

'
    Sheets("3- Location").Select
    Range("D6").Select
    Application.CutCopyMode = False
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$M$44"), , xlYes).Name = _
        "Tableau1"
    Range("Tableau1[#All]").Select
End Sub

Un grand merci pour votre aide!

PS : je ne connaissais pas l'existence des tableaux structurés avant ce forum, je suis vraiment reconnaissant des progrès que je peux faire ici

Bonjour,

Sub Macro1()
Dim numligne As Long
numligne = Range("A65536").End(xlUp).Row
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$M$" & numligne), , xlYes).Name = _
        "Tableau1"
    Range("Tableau1[#All]").Select
    ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleMedium9"
End Sub

En supposant tout de même que le nombre de colonne sera lui identique ?

Un grand merci.

Oui, le nombre de colonne sera identique....par onglet!

Mais par curiosité, comment aurait-il fallu faire si il fallait aussi prendre les colonnes en dynamique?

Bonsoir,
2 exemples.
Cdlt.

Public Sub CreateTable_1()
Dim lastCol As Long, lastRow As Long, lo As ListObject
    With ActiveSheet
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set lo = .ListObjects.Add(xlSrcRange, .Cells(1).Resize(lastRow, lastCol), , xlYes)
    End With
    With lo
        .Name = "t_xxx"
        .TableStyle = "TableStyleMedium9"
    End With
End Sub

Public Sub CreateTable_2()
Dim lo As ListObject
    Set lo = ActiveSheet.ListObjects.Add(xlSrcRange, .Cells(1).CurrentRegion, , xlYes)
    With lo
        .Name = "t_xxx"
        .TableStyle = "TableStyleMedium9"
    End With
End Sub

Mais par curiosité, comment aurait-il fallu faire si il fallait aussi prendre les colonnes en dynamique?

Jean Eric à répondu mieux que moi avec Les deux variables "lastcol" et "lastrow"

Top!

Merci à vous.
J'ai légèrement modifié le VBA pour pouvoir enchaîner les onglets.

Public Sub TableauStructure()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim lastCol As Long, lastRow As Long, lo As ListObject
Set O = Worksheets("3- Location") 'définit l'onglet O
O.Select
    Range("A1").Select
    With ActiveSheet
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set lo = .ListObjects.Add(xlSrcRange, .Cells(1).Resize(lastRow, lastCol), , xlYes)
    End With
    With lo
        .Name = "t_Location"
        .TableStyle = "TableStyleMedium9"
    End With
Set O = Worksheets("4- Department") 'définit l'onglet O
O.Select
    Range("A1").Select
    With ActiveSheet
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set lo = .ListObjects.Add(xlSrcRange, .Cells(1).Resize(lastRow, lastCol), , xlYes)
    End With
    With lo
        .Name = "t_Department"
        .TableStyle = "TableStyleMedium9"
    End With
End Sub

Bonjour,
Une adapatation.
Cdlt.

Public Sub TableauStructure()
Dim ws As Worksheet
Dim lo As ListObject
Dim lastCol As Long, lastRow As Long
Dim n As String

    For Each ws In ActiveWorkbook.Worksheets
        Select Case ws.Name
            Case "3- Location", "4- Department":
                n = VBA.Split(ws.Name)(1)
                lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column
                lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
                Set lo = ws.ListObjects.Add(xlSrcRange, ws.Cells(1).Resize(lastRow, lastCol), , xlYes)
                With lo
                    .Name = "t_" & n
                    .TableStyle = "TableStyleMedium9"
                End With
            Case Else
        End Select
    Next ws

End Sub
Rechercher des sujets similaires à "creation tableau structure vba"