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 SubLa ligne de code :
Selection.ListObject(t_don_elec(V)).ListColumns(5).Deleteest 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.
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 VUne 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 VDim 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. :)