XL 2016 Effacer plusieurs tableau en même temps

ReneDav14000

XLDnaute Occasionnel
Bonjour le forum,
Dans mon application, j'ai créé un bouton "Remise à zéro de l'application" qui devrait permettre d'effacer les données qui se trouvent dans des tableaux dans des feuilles différentes.
Il faudrait qu'à l'aide de ce bouton on puisse supprimer les données dans les feuilles et tableaux suivants :
Supprimer dans le Tableau1 de la feuille "Agents" et qu'il ne reste qu'une ligne et l'en-tête
Supprimer dans le Tableau2 de la feuille "Accès" idem pour la suite
Supprimer dans le Tableau3 de la feuille "Data" idem pour la suite
Supprimer dans le Tableau4 de la feuille "Temps" idem pour la suite
Supprimer dans le Tableau6 de la feuille "Bdd" idem pour la suite
Supprimer dans le Tableau T_Data de la feuille "TabReserv" idem pour la suite
Est-ce réalisable en une seule fois ?
Merci par avance pour vos idées
 
Solution
Bonjour ReneDav,
Essayez cela :
VB:
Sub EffaceTableaux()
    [Tableau1].ListObject.DataBodyRange.Delete
    [Tableau2].ListObject.DataBodyRange.Delete
    [Tableau3].ListObject.DataBodyRange.Delete
    [Tableau4].ListObject.DataBodyRange.Delete
    [Tableau6].ListObject.DataBodyRange.Delete
    [T_Data ].ListObject.DataBodyRange.Delete
End Sub
Il n'est pas utile de préciser la feuille car un tableau est unique dans un classeur.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour ReneDav,
Essayez cela :
VB:
Sub EffaceTableaux()
    [Tableau1].ListObject.DataBodyRange.Delete
    [Tableau2].ListObject.DataBodyRange.Delete
    [Tableau3].ListObject.DataBodyRange.Delete
    [Tableau4].ListObject.DataBodyRange.Delete
    [Tableau6].ListObject.DataBodyRange.Delete
    [T_Data ].ListObject.DataBodyRange.Delete
End Sub
Il n'est pas utile de préciser la feuille car un tableau est unique dans un classeur.
 

ReneDav14000

XLDnaute Occasionnel
Bonjour ReneDav,
Essayez cela :
VB:
Sub EffaceTableaux()
    [Tableau1].ListObject.DataBodyRange.Delete
    [Tableau2].ListObject.DataBodyRange.Delete
    [Tableau3].ListObject.DataBodyRange.Delete
    [Tableau4].ListObject.DataBodyRange.Delete
    [Tableau6].ListObject.DataBodyRange.Delete
    [T_Data ].ListObject.DataBodyRange.Delete
End Sub
Il n'est pas utile de préciser la feuille car un tableau est unique dans un classeur.
Bonjour sylvanu,
Merci pour votre réponse, je vais tester votre code.
Toutes les zones à supprimer sont nommées, (comme T_Data).
A plus tard
 

ReneDav14000

XLDnaute Occasionnel
C'est le principe d'un TDS, les formules se propagent automatiquement sur toute la colonne.
Donc si vous effacez une ligne cela ne touche pas les formules en dessous.
Voir ex en PJ.
Oui, je comprends bien, sauf que dans mon cas, il n'y aura plus de lignes en-dessous puisqu'elles seront toutes supprimées. Il va bien falloir que je conserve une ligne de formule.
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Exécutez :
VB:
Sub RAZ()
Dim a, T
a = Array([Tableau1], [Tableau2], [Tableau3], [Tableau4], [Tableau6], [T_Data])
For Each T In a
    With T.ListObject.Range
        If .Rows.Count > 2 Then .Rows(3).Resize(.Rows.Count - 2).Delete xlUp
        On Error Resume Next 'si aucune SpecialCell
        .Rows(2).SpecialCells(xlCellTypeConstants) = Empty
    End With
Next
End Sub
A+
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@ReneDav14000

sauf que dans mon cas, il n'y aura plus de lignes en-dessous puisqu'elles seront toutes supprimées. Il va bien falloir que je conserve une ligne de formule.

Et bien non c'est la "magie" des TS.
Quand tu vides un TS Bilou garde en interne les formules qui vont bien et lors de la recréation d'une nouvelle ligne ==> Miracle la formule revient colonne L en rouge.

Regarde de cet exemple que j'ai fait il y a 2 jours pour une demande identique (le code est dans le module 2)

@Phil69970
 

Pièces jointes

  • TS a effacer V1.xlsm
    42.2 KB · Affichages: 7

job75

XLDnaute Barbatruc
Plus simplement :
Code:
Sub RAZ()
Dim a, T
a = Array([Tableau1], [Tableau2], [Tableau3], [Tableau4], [Tableau6], [T_Data])
For Each T In a
    If T.Rows.Count > 1 Then T.Rows(2).Resize(T.Rows.Count - 1).Delete xlUp
    On Error Resume Next 'si aucune SpecialCell
    T.Rows(1).SpecialCells(xlCellTypeConstants) = Empty
Next
End Sub
 

ReneDav14000

XLDnaute Occasionnel
Voici mon code :
VB:
Sub EffaceTout(control As IRibbonControl)
If MsgBox("Vous êtes sur le point d'effacer les données de l'application - Confirmez-vous ?", vbQuestion + vbYesNo, "Remise à zéro") <> vbYes Then Exit Sub
    [T_Agents].ListObject.DataBodyRange.Delete
    [ListUser].ListObject.DataBodyRange.Delete
    [T_Heures].ListObject.DataBodyRange.Delete
    [T_Temps].ListObject.DataBodyRange.Delete
    [T_Bdd].ListObject.DataBodyRange.Delete
    [T_Data ].ListObject.DataBodyRange.Delete
    MsgBox "Les données ont été effacés", vbCritical, "A la prochaine saison !"
End Sub
 

chris

XLDnaute Barbatruc
Bonjour à tous

Ne serait-il pas plus sensé de créer un classeur type avec ses tableaux formulés, sans données, et le dupliquer quand besoin de le remplir (ou en faire un modèle xltx) plutôt que de vider un tableau rempli ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16