VBA suppression des données d'une colonne précise

Bonjour,

Alors là, je sèche... Dans le cadre d'une historisation d'un ensemble de données (passage d'un tableau vers un autre), je souhaite supprimer (ou réinitialiser) les données d'une colonne de 1er tableau afin de pouvoir reremplir plus tard.

A priori, il n'est pas aisé pour excel de faire cela...

Voici une partie du code : (Tout ce code sert à l'historisation. Il y a 3 boucles pour plusieurs tableaux mais c'est la 4ème boucle qui doit me servir pour la réinitialisation des données).

Private Sub CommandButton8_Click()

Windows("A3_Pilotage_MULTI_SITE.xlsm").Activate 'Pour éviter l'erreur multi excel ouvert
Application.ScreenUpdating = False

'''''Déclaration des variables'''''
Dim Ligne1 As ListRow, Ligne2 As ListRow, Ligne3 As ListRow, Ligne4 As ListRow
Dim Col1 As ListColumn, Col2 As ListColumn, Col3 As ListColumn, Col4 As ListColumn
Dim wk_elec As Variant, wk_gaz As Variant, wk_eau As Variant

If MsgBox("Attention : l'historisation efface les données de l'année qui vient de s'écouler et les historises pour recommencer une nouvelle année. Cela devrait prendre 2 minutes.", vbYesNo, "Confirmation d'historisation ?") = vbYes Then

'''''Déclaration des objets tableaux contenant les tableaux du TDB'''''
wk_elec = Array("ELEC BP", "ELEC CY", "ELEC VV")
wk_gaz = Array("GAZ BP", "GAZ CY", "GAZ VV")
wk_eau = Array("EAU BP", "EAU CY", "EAU VV")

t_don_elec = Array("DonnéesBP1", "DonnéesBP2", "DonnéesCY1", "DonnéesCY2", "DonnéesVV1", "DonnéesVV2")
t_don_elec2 = Array("MWhELECBP", "RatioELECBP", "CoutELECBP", "MWhELECCY", "RatioELECCY", "CoutELECCY", "MWhELECVV", "RatioELECVV", "CoutELECVV")

t_don_gaz = Array("DonnéesBP3", "DonnéesBP4", "DonnéesCY3", "DonnéesCY4", "DonnéesVV3", "DonnéesVV4")
t_don_gaz2 = Array("MWhGAZBP", "RatioGAZBP", "CoutGAZBP", "DJUGAZBP", "MWhGAZCY", "RatioGAZCY", "CoutGAZCY", "DJUGAZCY", "MWhGAZVV", "RatioGAZVV", "CoutGAZVV", "DJUGAZVV")

t_don_eau = Array("DonnéesBP5", "DonnéesBP6", "DonnéesCY5", "DonnéesCY6", "DonnéesVV5", "DonnéesVV6")
t_don_eau2 = Array("EAUBP", "CoutEAUBP", "EAUCY", "CoutEAUCY", "EAUVV", "CoutEAUVV")

BarreProgression.Afficher

'''''Première boucle pour renseigner l'élec sur les 3 sites'''''
a = 0 'Les lignes (a = a + 1) et BarreProgression (a) servent au bargraphe
V = 0
    For T = 0 To 6 Step 3

        'Va chercher les informations dans les colonnes de chaque tableau et la place dans une variable
            'GetListObject est une fonction créée manuellement et inclu dans le module Bibliothèque
        Set Col1 = GetListObject(CStr(t_don_elec(V))).ListColumns("Conso (kWh)")
        a = a + 1
        BarreProgression.Progression (a)
        Set Col2 = GetListObject(CStr(t_don_elec(V))).ListColumns("Conso (kWh/Jtr)")
        a = a + 1
        BarreProgression.Progression (a)
        Set Col3 = GetListObject(CStr(t_don_elec(V + 1))).ListColumns("Coût (€)")
        a = a + 1
        BarreProgression.Progression (a)

        'Va Ajouter une ligne dans chaque tableau
        Set Ligne1 = GetListObject(CStr(t_don_elec2(T))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)
        Set Ligne2 = GetListObject(CStr(t_don_elec2(T + 1))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)
        Set Ligne3 = GetListObject(CStr(t_don_elec2(T + 2))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)

        'Ajoute l'année en cours
        Ligne1.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)
        Ligne2.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)
        Ligne3.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)

        'Ajoute les données dans les tableaux
        For I = 1 To 12
            Ligne1.Range(I + 1) = Col1.DataBodyRange(I) / 1000
            a = a + 1
            BarreProgression.Progression (a)
            Ligne2.Range(I + 1) = Col2.DataBodyRange(I) / 1000
            a = a + 1
            BarreProgression.Progression (a)
            Ligne3.Range(I + 1) = Col3.DataBodyRange(I)
            a = a + 1
            BarreProgression.Progression (a)
        Next I
    V = V + 2
Next T

'''''Deuxième boucles pour renseigner le gaz sur les 3 sites'''''
V = 0
    For T = 0 To 8 Step 4

        'Va chercher les informations dans les colonnes de chaque tableau et la place dans une variable
        Set Col1 = GetListObject(CStr(t_don_gaz(V))).ListColumns("Conso (kWh)")
        a = a + 1
        BarreProgression.Progression (a)
        Set Col2 = GetListObject(CStr(t_don_gaz(V))).ListColumns("Ratio (Wh/m²/DJU)")
        a = a + 1
        BarreProgression.Progression (a)
        Set Col3 = GetListObject(CStr(t_don_gaz(V))).ListColumns("DJU")
        a = a + 1
        BarreProgression.Progression (a)
        Set Col4 = GetListObject(CStr(t_don_gaz(V + 1))).ListColumns("Coût (€)")
        a = a + 1
        BarreProgression.Progression (a)

        'Va Ajouter une ligne dans chaque tableau
        Set Ligne1 = GetListObject(CStr(t_don_gaz2(T))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)
        Set Ligne2 = GetListObject(CStr(t_don_gaz2(T + 1))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)
        Set Ligne3 = GetListObject(CStr(t_don_gaz2(T + 2))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)
        Set Ligne4 = GetListObject(CStr(t_don_gaz2(T + 3))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)

        'Ajoute l'année en cours
        Ligne1.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)
        Ligne2.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)
        Ligne3.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)
        Ligne4.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)

        'Ajoute les données dans les tableaux
        For I = 1 To 12
            Ligne1.Range(I + 1) = Col1.DataBodyRange(I) / 1000
            a = a + 1
            BarreProgression.Progression (a)
            Ligne2.Range(I + 1) = Col2.DataBodyRange(I)
            a = a + 1
            BarreProgression.Progression (a)
            Ligne3.Range(I + 1) = Col4.DataBodyRange(I)
            a = a + 1
            BarreProgression.Progression (a)
            Ligne4.Range(I + 1) = Col3.DataBodyRange(I)
            a = a + 1
            BarreProgression.Progression (a)
        Next I
    V = V + 2
Next T

'''''Troisième boucles pour renseigner l'eau sur les 3 sites'''''
V = 0
    For T = 0 To 4 Step 2

        'Va chercher les informations dans les colonnes de chaque tableau et la place dans une variable
        Set Col1 = GetListObject(CStr(t_don_eau(V))).ListColumns("Conso (m3)")
        a = a + 1
        BarreProgression.Progression (a)
        Set Col2 = GetListObject(CStr(t_don_eau(V + 1))).ListColumns("Coût (€)")
        a = a + 1
        BarreProgression.Progression (a)

        'Va Ajouter une ligne dans chaque tableau
        Set Ligne1 = GetListObject(CStr(t_don_eau2(T))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)
        Set Ligne2 = GetListObject(CStr(t_don_eau2(T + 1))).ListRows.Add
        a = a + 1
        BarreProgression.Progression (a)

        'Ajoute l'année en cours
        Ligne1.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)
        Ligne2.Range(1) = Range("ann")
        a = a + 1
        BarreProgression.Progression (a)

        'Ajoute les données dans les tableaux
        For I = 1 To 12
            Ligne1.Range(I + 1) = Col1.DataBodyRange(I)
            a = a + 1
            BarreProgression.Progression (a)
            Ligne2.Range(I + 1) = Col2.DataBodyRange(I)
            a = a + 1
            BarreProgression.Progression (a)
        Next I
    V = V + 2
Next T

''''Quatrième boucles pour supprimer les données dans les tableaux de données''''
For V = 0 To 1

    Selection.ListObject(t_don_elec(V)).ListColumns(5).Delete

Next V

MsgBox ("Toutes les données ont bien été historisées, vous pouvez changer d'année sur le TDB")
Unload BarreProgression
Unload Menu

End If
Application.ScreenUpdating = True
End Sub

La ligne de code :

Selection.ListObject(t_don_elec(V)).ListColumns(5).Delete

est bien évidemment un test. C'est bien les données que je souhaite supprimer et pas la colonne entière.

Merci pour votre aide :)

Bonjour fafe93,

Vu la tartine du code et sans fichier cela va être compliqué de t’aider

Voilà :)

GetListObject est une fonction créer par un collègue pour récupérer les tableaux.

7a3.zip (675.72 Ko)

Bonjour fafe93, il y a un autre fichier qui va avec celui là "A3_Pilotage_MULTI_SITE.xlsm" ?

Ah non j'ai modifié le nom mais pour les test tu peux supprimer cette ligne correspondante

Bon en réfléchissant un peu j'ai trouvé une solution qui fonctionne (à voir pour l'améliorer):

''''Quatrième boucles pour supprimer les données dans les tableaux de données''''
For V = 0 To 5 Step 2

    Set Col1 = GetListObject(CStr(t_don_elec(V))).ListColumns("Budget Conso (kWh)")
    Set Col2 = GetListObject(CStr(t_don_elec(V))).ListColumns("Conso (kWh)")
    Set Col3 = GetListObject(CStr(t_don_elec(V + 1))).ListColumns("Budget Euro")
    Set Col4 = GetListObject(CStr(t_don_elec(V + 1))).ListColumns("Coût (€)")
    a = a + 1
    BarreProgression.Progression (a)

    Set Col5 = GetListObject(CStr(t_don_gaz(V))).ListColumns("Budget Conso (kWh)")
    Set Col6 = GetListObject(CStr(t_don_gaz(V))).ListColumns("Conso (kWh)")
    Set Col7 = GetListObject(CStr(t_don_gaz(V))).ListColumns("DJU")
    Set Col8 = GetListObject(CStr(t_don_gaz(V + 1))).ListColumns("Budget Euro")
    Set Col9 = GetListObject(CStr(t_don_gaz(V + 1))).ListColumns("Coût (€)")
    a = a + 1
    BarreProgression.Progression (a)

    Set Col10 = GetListObject(CStr(t_don_eau(V))).ListColumns("Budget Conso (m3)")
    Set Col11 = GetListObject(CStr(t_don_eau(V))).ListColumns("Conso (m3)")
    Set Col12 = GetListObject(CStr(t_don_eau(V + 1))).ListColumns("Budget Euro")
    Set Col13 = GetListObject(CStr(t_don_eau(V + 1))).ListColumns("Coût (€)")
    a = a + 1
    BarreProgression.Progression (a)

    Col1.DataBodyRange.ClearContents
    Col2.DataBodyRange.ClearContents
    Col3.DataBodyRange.ClearContents
    Col4.DataBodyRange.ClearContents
    Col5.DataBodyRange.ClearContents
    Col6.DataBodyRange.ClearContents
    Col7.DataBodyRange.ClearContents
    Col8.DataBodyRange.ClearContents
    Col9.DataBodyRange.ClearContents
    Col10.DataBodyRange.ClearContents
    Col11.DataBodyRange.ClearContents
    Col12.DataBodyRange.ClearContents
    Col13.DataBodyRange.ClearContents
    a = a + 1
    BarreProgression.Progression (a)

Next V

Une boucle pour aller chercher dans la liste des tableaux (j'ai retirer des lignes pour laisser que ce qui nous intéresse) :

'''''Déclaration des objets tableaux contenant les tableaux du TDB'''''

t_don_elec = Array("DonnéesBP1", "DonnéesBP2", "DonnéesCY1", "DonnéesCY2", "DonnéesVV1", "DonnéesVV2")

t_don_gaz = Array("DonnéesBP3", "DonnéesBP4", "DonnéesCY3", "DonnéesCY4", "DonnéesVV3", "DonnéesVV4")

t_don_eau = Array("DonnéesBP5", "DonnéesBP6", "DonnéesCY5", "DonnéesCY6", "DonnéesVV5", "DonnéesVV6")

Re une proposition

''''Quatrième boucle pour supprimer les données dans les tableaux de données''''''
For V = 0 To 5 Step 2
    ' Tableau de données Électricité
    Set Col1 = GetListObject(CStr(t_don_elec(V))).ListColumns("Budget Conso (kWh)")
    Set Col2 = GetListObject(CStr(t_don_elec(V))).ListColumns("Conso (kWh)")
    Set Col3 = GetListObject(CStr(t_don_elec(V + 1))).ListColumns("Budget Euro")
    Set Col4 = GetListObject(CStr(t_don_elec(V + 1))).ListColumns("Coût (€)")

    ' Effacer le contenu des colonnes
    Col1.DataBodyRange.ClearContents
    Col2.DataBodyRange.ClearContents
    Col3.DataBodyRange.ClearContents
    Col4.DataBodyRange.ClearContents

    ' Tableau de données Gaz
    Set Col5 = GetListObject(CStr(t_don_gaz(V))).ListColumns("Budget Conso (kWh)")
    ' ... (Répétez pour les autres colonnes de gaz)

    ' Effacer le contenu des colonnes de gaz
    Col5.DataBodyRange.ClearContents
    ' ... (Répétez pour les autres colonnes de gaz)

    ' Tableau de données Eau
    Set Col10 = GetListObject(CStr(t_don_eau(V))).ListColumns("Budget Conso (m3)")
    ' ... (Répétez pour les autres colonnes d'eau)

    ' Effacer le contenu des colonnes d'eau
    Col10.DataBodyRange.ClearContents
    ' ... (Répétez pour les autres colonnes d'eau)
Next V
Dim t_don_elec As Variant
Dim t_don_gaz As Variant
Dim t_don_eau As Variant

'''''Déclaration des objets tableaux contenant les tableaux du TDB'''''
t_don_elec = Array("DonnéesBP1", "DonnéesBP2", "DonnéesCY1", "DonnéesCY2", "DonnéesVV1", "DonnéesVV2")
t_don_gaz = Array("DonnéesBP3", "DonnéesBP4", "DonnéesCY3", "DonnéesCY4", "DonnéesVV3", "DonnéesVV4")
t_don_eau = Array("DonnéesBP5", "DonnéesBP6", "DonnéesCY5", "DonnéesCY6", "DonnéesVV5", "DonnéesVV6")

Merci pour ta réponse, je vais adapter cela. :)

Rechercher des sujets similaires à "vba suppression donnees colonne precise"