VBA copier des données dans un tableau itératif
Bonjour,
Un nouveau blocage dans mon fichier EXCEL.
Je souhaite, en VBA, copier 10 lignes d'une colonne et les coller dans son tableau correspondant sur la même feuille en ajoutant une ligne à ce tableau (historisation annuelle). Puis effacer les valeurs pour recommencer.
Sauf que, J'ai 9 feuilles, et dans chaque feuilles il y a 2, 3 voire 4 types de données et donc 2, 3 voire 4 tableaux.
Quelqu'un du forum m'a aider pour le traitement des données (d'un userform à renseigner qui renseigne dans les feuilles).
Je suis partie de ça pour faire mon code mais je ne trouve pas.
Donc voici :
Les données de la colonne "Conso (kWh)" à copier puis effacer ...
et coller les info en TRANSPOSER dans le tableau juste en dessous :
En ajoutant une lignes puisque c'est une historisation annuelle.
Et sa, à faire de manière automatique pour les 9 feuilles et les 2, 3 ou 4 tableaux de chaque feuilles.
Le code que j'ai actuellement :
Private Sub CommandButton8_Click()
Windows("A3_Pilotage_MULTI_SITE.xlsm").Activate 'Pour éviter l'erreur multi excel ouvert
Dim nIWS As Integer
Dim wsConso As Worksheet
Dim avInfos As Variant
Dim nICtrl As Integer
Dim nRefCol As Integer
Dim nLig As Long
Application.ScreenUpdating = False
If MsgBox("Attention : l'historisation efface les données de l'année qui vient de s'écouler et les historises pour recommancer une nouvelle année?", vbYesNo, "Confirmation d'historisation ?") = vbYes Then
' Tableau permettant un traitement itératif (une dimension par onglet : nom de l'onglet, refs des colonnes)
avInfos = Array(Array("ELEC BP", "E", "P"), Array("GAZ BP", "F", "I", "T"), Array("EAU BP", "D", "N"), Array("ELEC CY", "E", "P"), Array("GAZ CY", "F", "I", "T"), Array("EAU CY", "D", "N"), Array("ELEC VV", "E", "P"), Array("GAZ VV", "F", "I", "T"), Array("EAU VV", "D", "N"))
' Init de la référence du contrôle
nICtrl = 0
' Boucle sur les onglets
For nIWS = 0 To 8
' Init de l'onglet
Set wsConso = Worksheets(avInfos(nIWS)(0))
' Boucle sur les références de colonnes Ubound = plus grande valeur
For nRefCol = 1 To UBound(avInfos(nIWS))
' Boucle sur les lignes
For nLig = 9 To 20
' Incrémentation du n° de contrôle
nICtrl = nICtrl + 1
' Initialisation de la valeur du contrôle
wsConso.Cells(nLig, avInfos(nIWS)(nRefCol)).Copy
'If IsNumeric(Me.Controls("TextBox" & nICtrl).Value) = True Then
' wsConso.Cells(nLig, avInfos(nIWS)(nRefCol)).Value = CLng(Me.Controls("TextBox" & nICtrl).Value)
Next
Next
Next
End If
Application.ScreenUpdating = True
End SubJe voulais repartir de l'idée de Tableau permettant un traitement itératif avec les noms des tableaux mais je suis coincé.
Merci pour votre aide :)
Je rajoute des précisions :
If MsgBox("Attention : l'historisation efface les données de l'année qui vient de s'écouler et les historises pour recommancer une nouvelle année?", vbYesNo, "Confirmation d'historisation ?") = vbYes Then
' Tableau permettant un traitement itératif (une dimension par onglet : nom de l'onglet, refs des colonnes)
avInfos = Array(Array("ELEC BP", "E", "P")) ', Array("GAZ BP", "F", "I", "T"), Array("EAU BP", "D", "N"), Array("ELEC CY", "E", "P"), Array("GAZ CY", "F", "I", "T"), Array("EAU CY", "D", "N"), Array("ELEC VV", "E", "P"), Array("GAZ VV", "F", "I", "T"), Array("EAU VV", "D", "N"))
' Boucle sur les onglets
For nIWS = 0 To 8
' Init de l'onglet
Set wsConso = Worksheets(avInfos(nIWS)(0))
' Boucle sur les références de colonnes Ubound = plus grande valeur
For nRefCol = 1 To UBound(avInfos(nIWS))
' Initialisation de la valeur du contrôle
test = wsConso.Cells(9, avInfos(nIWS)(nRefCol))
MsgBox test
Col = avInfos(nIWS)(nRefCol)
wsConso.Range(Cells(9, Col), Cells(20, Col)).Copy
'wsConso.ListObjects("MWhELECBP").ListRows.Add AlwaysInsert:=True
wsConso.ListObjects("MWhELECBP").ListRows.Add.Range.PasteSpecial (xlPasteValues)
'.InsertRowRange
'If IsNumeric(Me.Controls("TextBox" & nICtrl).Value) = True Then
' wsConso.Cells(nLig, avInfos(nIWS)(nRefCol)).Value = Me.Controls("TextBox" & nICtrl).Value
Next
Next
End If
Application.ScreenUpdating = True
End SubJ'ai légèrement modifier le code pour arriver à ceci. J'arrive à copier la plage de donnée de la colonne E de la feuille "ELEC BP". Mais j'arrive à ajouter une ligne dans mon tableau "MWhELECBP" mais pas à coller mes données en mode transposer.
Mes données doivent être collé entre Janvier et Décembre. L'année doit être augmenté et le Total est automatique.
Merci :)
(Ne pas prendre en compte le code en commentaire, ils seront effacés à la fin).