Redimensionner un tableau structuré en VBA sans Resize Range ?????

20exemple.xlsm (21.00 Ko)

Bonjour

j'ai un tableau structuré d'avec un certains nombre de lignes et de colonnes.

il s'apelle tableau1

j'aimerai faire une macrio qui me redimensionne le tableau en ajoutant une ligne en plus à la fin par exemple (ca peut-etres 10 lignes en plus, à la fin peu importe).

par contre, je ne change pas le nombre de colonnes.

j'ai un macro qui commence par mi'dentifier la derniere ligne du tableau.

je la mémorie dans la variable num_derniere_ligne_remplie par exemple

puis je pourrai utiliser la code suivant :

ActiveSheet.ListObjects("Tableau1").Resize Range("$C$4:$F$" & num_derniere_ligne_remplie + 1)

ca veut dire que mon tableau structuré est ente les colonne Cet F.

le problème, c'est que si je viens élargir manuellement la taille du tableau pour aller des colonnes C à G par exemple,

je dois alors penser à changer le code de la macro car le code redimensionne le tableau de C à F et ajoute le nombre de ligné demandé.

Est-il possible de redimensionner le tableau avec une autre méthode?

ci-joint mon fichier exemple

merci

Bonjour,

Un test en prenant la première colonne de votre table, la première ligne et en comptant le nombre de colonnes présentes dans votre table :

With ActiveSheet
    .ListObjects("Tableau1").Resize .Range(.Cells(.ListObjects("Tableau1").Range.Row, .ListObjects("Tableau1").Range.Column), .Cells(10, .ListObjects("Tableau1").Range.Column + .ListObjects("Tableau1").Range.Columns.Count - 1))
End With

Cdlt,

Bonjour,

Une proposition !?

Cdlt.

Public Sub AddRowsInTable()
Dim lo As ListObject
Dim n As Long: n = 3
    Set lo = Range("Tableau1").ListObject
    lo.Resize lo.Range.Resize(lo.ListRows.Count + 1 + n)
End Sub

Bonjour …

Pour quelle raison as-tu choisi de passer par un tableau structuré * ?

Si tu as un peu étudié ce genre d’objet qui est pourvu de multiples fonctions, tu devrais savoir qu’il suffit d’ajouter des éléments sous la dernière ligne pour qu’elles soient automatiquement incluses dans le tableau qui, en plus sera redimensionné automatiquement (idem avec les colonnes) quitte à les vider.

voir pour le tableau Tb (plus macro)

ligne tableau Remarque (une information importante) : pour mieux les gérer, les renommer par des noms courts

* bonne idée pour gérer des tables c’est-à -dire des plages de cellules contiguës en hauteur mais aussi en largeur)

Pour quelle raison as-tu choisi de passer par un tableau structuré * ?

Si tu as un peu étudié ce genre d’objet qui est pourvu de multiples fonctions, tu devrais savoir qu’il suffit d’ajouter des éléments sous la dernière ligne pour qu’elles soient automatiquement incluses dans le tableau qui, en plus sera redimensionné automatiquement (idem avec les colonnes) quitte à les vider.

on souhaite ajouter des lignes de manière automatisée, mais j'aimerais me couvrir du fait que quelqu'u vienne ajouter des colonnes de manière manuelle.

merci pour la solution suivante, m'ia j'une question :

Public Sub AddRowsInTable()
Dim lo As ListObject
Dim n As Long: n = 3
    Set lo = Range("Tableau1").ListObject
    lo.Resize lo.Range.Resize(lo.ListRows.Count + 1 + n)
End Sub

ca concerne ca :

lo.Resize lo.Range.Resize(lo.ListRows.Count + 1 + n)

je comprends que "lo.Range.Resize(lo.ListRows.Count + 1 + n)" fait qu' on ajoute le nombre de lignes

mais à quoi correspond "lo.resize"?

merci

Bonjour,

Issu de l'aide Excel - Méthode ListObject.Resize

La méthode Resize permet de redimensionner un objet ListObject sur une nouvelle plage.

La syntaxe est : ListObject.Resize(nouvelle plage)

C'est plus clair ?

Cdlt.

Re…

Je suis allé au plus simple : le petit code proposé concernait l’ajout d’une ligne et sans tenir compte du contexte (présence de données sous le tableau à garder).

Pour un nombre plus important (avec la syntaxe de base - comprenant le .Resize - pour faire plus simple) et de façon à ne pas toucher au contenu environnant , voilà une autre procédure :

Dim L As Long
Private Sub Worksheet_SelectionChange(ByVal R As Range)
    If R.Address = [BD].Item([BD].Rows.Count, 1).Address Then
        L = [BD].Rows.Count
        [BD].Item(L, 1).AutoFill [BD].Item(L, 1).Resize(2)
    End If
End Sub

Tu en rajoutes une couche ! Pour éviter l’ajout de colonnes, on peut utiliser :

Private Sub Worksheet_Change(ByVal Target As Range)
    If [BD].Columns.Count = 3 Then Exit Sub ‘3 etant le nombre de colonnes à garder
    With Application: .EnableEvents = 0: .Undo: .EnableEvents = 1: End With
End Sub

Un de ses avantages est de pouvoir utiliser la colonne suivante, hors tableau, ne serait-ce que pour insérer des commentaires ou autres.

Maintenant, pour éviter la suppression de colonnes, c’est une autre histoire que je laisse à d’autres le soin de te la raconter.

ok merci

Rechercher des sujets similaires à "redimensionner tableau structure vba resize range"