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 ...

image

et coller les info en TRANSPOSER dans le tableau juste en dessous :

image

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 Sub

Je 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 Sub

J'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.

image

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).

Rechercher des sujets similaires à "vba copier donnees tableau iteratif"