VBA - Comment supprimer toutes les lignes d'un tableau sauf la 1ère

Bonjour !

J'ai un tableau avec des colonnes de saisies et des colonnes à formules. Je souhaite supprimer (en VBA) toutes les lignes du tableau sans toucher à la 1ère ligne sous l'entête. Ainsi, je pourrai conserver les formules lors d'un ajout d'une nouvelle ligne.

Ci-après, mon fichier joint.

381tableau-de-calcul.xlsm (113.29 Ko)

Merci d'avance

Bonjour,

Essaie ainsi :

Option Explicit
'Réinitialise le tableau en conservant la mise en forme
'et les formules
Public Sub Reset_data()
    With ActiveSheet.ListObjects(1)
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
    End With
End Sub

Merci Jean-Eric pour ta promptitude

je viens d’essayer le code. Il efface exactement toutes les lignes à exception de l'entête et de la ligne suivante. Cependant, il a supprimé aussi les formules du tableau

Pourrait-il faire mieux ?

ci-après mon tableau revu avec ton code.

391tableau-de-calcul.xlsm (114.82 Ko)

Ctrl+d pour exécuter la macro

Re,

J'ai adapté un peu ton code comme ceci:

Option Explicit
'Réinitialise le tableau en conservant la mise en forme
'et les formules
Dim PremiereLigne As String, DerniereLigne As String
Public Sub Reset_data()
    With ActiveSheet.ListObjects(1)
        If Not .DataBodyRange Is Nothing Then
            .DataBodyRange.Rows(2 & ":" & .DataBodyRange.Rows.Count).EntireRow.Delete
        End If
    End With
End Sub

Et cela a fonctionné.

Cependant, cela n'arrive pas à fonctionner dans une autre feuille contenant d'autres objets en plus (graphiques, autre tableaux,...).

Lorsqu'il y'a plusieurs objets dans la feuille, l'instruction .DataBodyRange.Rows(2 & ":" & .DataBodyRange.Rows.Count).EntireRow.Delete s'emballe carrément...why ?

Comment atteindre à coup sûr le tableau et non un autre objet de la feuilles ?

Ou du moins, dans quel ordre l'instruction ActiveSheet.ListObjects(1) sélectionne-t-elle les objets dans une feuille ?

Bonjour zot,

pour ActiveSheet.ListObjects(1) : l'indice 1 fait que c'est le 1er objet de type ListObject de la feuille.

(l'ordre est donc celui des indices)


si ton tableau s'appelle "Tableau1", mets : With ActiveSheet.ListObjects("Tableau1")

tout ce qui en dépend doit marcher correctement, comme : .DataBodyRange


c'est donc comme pour une feuille :

* Worksheets(3) pour référencer la 3ème feuille du classeur

* Worksheets("Ventes") pour référencer la feuille "Ventes"

(quelle que soit sa position dans le classeur)

dhany

Bonjour Zot,

Après l'exécution de ma procédure, resaisie une longuer et une hauteur.

Que se passe t'il ?

Cdlt.

Bonjour Zot,

Après l'exécution de ma procédure, resaisie une longuer et une hauteur.

Que se passe t'il ?

Cdlt.

! quel stupide je fais ...

Toutes mes excuses Jean-Eric. Je m'étais contenté de balader le curseur dans chaque cellule ...

Heureusement, je peux compter sur ta vigilance. Mille merci pour ton aide experte

Bonjour zot,

pour ActiveSheet.ListObjects(1) : l'indice 1 fait que c'est le 1er objet de type ListObject de la feuille.

(l'ordre est donc celui des indices)


si ton tableau s'appelle "Tableau1", mets : With ActiveSheet.ListObjects("Tableau1")

tout ce qui en dépend doit marcher correctement, comme : .DataBodyRange

dhany

Great ! merci Dhany pour cette explication très précise et fort utile (ainsi le voile se déchira... ).

Très heureux de te retrouver camarade !

Sujet résolu ! Un grand merci à vous et à très bientôt

@zot

merci pour ton retour, ravi d'avoir pu t'aider, camarade !

à très bientôt peut-être.

dhany

Bonjour,

Je me permet de rebondir sur ce sujet car je cherche également à purger mon tableau tout en gardant les mises en forme. Cependant en dehors de mon tableau j'ai également des données que je ne souhaite pas supprimer. Hors avec la déclaration ".EntireRow.Delete" les lignes entières sont supprimées et donc mes données en dehors de mon tableau aussi.

Existe donc t'il un moyen de ne supprimer que les lignes à l'intérieur du tableau sans touché à toutes les données qui sont à l'extérieur?

Merci pour votre aide si ma demande est réalisable.

Bonjour,

Travaille avec ListObjects(1).ListRows(n).Delete

Cdlt.

Rechercher des sujets similaires à "vba comment supprimer toutes lignes tableau sauf 1ere"