J'ai créé une fonction vba dans Excel 2010 à l'aide de l'aide de personnes présentes. Cette fonction copie le contenu d'une table/formulaire, les trie et les envoie aux tables appropriées.
Maintenant, après avoir exécuté cette fonction, je souhaite que la table d'origine soit effacée. Je peux y parvenir avec le code suivant, en supposant qu'ACell a été défini comme la première cellule du tableau .ACell.ListObject.Range.ClearContents
fonctionne correctement, le seul problème est qu'il supprime le tableau ainsi que les valeurs de données.
Y a-t-il un moyen de contourner cela? Je préférerais ne pas avoir à mettre la table en place chaque fois que je saisis des données.
Que diriez-vous:
ACell.ListObject.DataBodyRange.Rows.Delete
Cela conservera la structure et les en-têtes de votre tableau, mais effacera toutes les données et les lignes.
EDIT: Je vais juste modifier une partie de ma réponse de votre précédent post , car il fait surtout ce que vous voulez. Cela ne laisse qu'une rangée:
With loSource
.Range.AutoFilter
.DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete
.DataBodyRange.Rows(1).Specialcells(xlCellTypeConstants).ClearContents
End With
Si vous voulez laisser toutes les lignes intactes avec leurs formules et tout le reste, faites simplement:
With loSource
.Range.AutoFilter
.DataBodyRange.Specialcells(xlCellTypeConstants).ClearContents
End With
Ce qui est proche de ce que @Readify a suggéré, sauf que les formules ne seront pas effacées.
Essayez simplement d'effacer les données (pas la table entière, y compris les en-têtes):
ACell.ListObject.DataBodyRange.ClearContents
J'utilise ce code pour supprimer mes données mais laisse les formules dans la ligne du haut. Il supprime également toutes les lignes à l'exception de la ligne supérieure et fait défiler la page vers le haut.
Sub CleanTheTable()
Application.ScreenUpdating = False
Sheets("Data").Select
ActiveSheet.ListObjects("TestTable").HeaderRowRange.Select
'Remove the filters if one exists.
If ActiveSheet.FilterMode Then
Selection.AutoFilter
End If
'Clear all lines but the first one in the table leaving formulas for the next go round.
With Worksheets("Data").ListObjects("TestTable")
.Range.AutoFilter
On Error Resume Next
.DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete
.DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents
ActiveWindow.SmallScroll Down:=-10000
End With
Application.ScreenUpdating = True
End Sub
J'ai retravaillé la solution de Doug Glancy pour éviter la suppression de lignes, ce qui peut entraîner un problème #Ref dans les formules.
Sub ClearList(lst As ListObject)
'clears a listObject while leaving 1 empty row + formulae
With lst
If .ShowAutoFilter Then .AutoFilter.ShowAllData
If .DataBodyRange.Rows.Count = 1 Then Exit Sub
.DataBodyRange.Offset(1).Rows.Clear
.DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents
.Resize .Range.Rows("1:2")
End With
End Sub