Simplification pour rapidité

Bonjour à toutes et à tous,

Joyeuses fêtes

pour quelqu'un qui aurait une idée pour simplifier la macro suivante ( ca crée une lenteur quand on des feuilles de 3000 lignes )

merci d'avance

Private Sub CommandButton3_Click()
InitVar
Tbl
        derligV = v.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée
        derligC = C.Cells(Rows.Count, 1).End(xlUp).Row  ' dernière ligne occupée
        derligP = P.Cells(Rows.Count, 1).End(xlUp).Row  ' dernière ligne occupée
        derligCH = CH.Cells(Rows.Count, 1).End(xlUp).Row  ' dernière ligne occupée

        For l = 1 To lg ' boucle sur les lignes du tableau
            v.Range("A" & derligV + l) = t(l, 1)
            v.Range("B" & derligV + l) = t(l, 2)
            v.Range("C" & derligV + l) = t(l, 3)
            v.Range("D" & derligV + l) = t(l, 4)
            v.Range("E" & derligV + l) = t(l, 5)
            v.Range("F" & derligV + l) = t(l, 6)
            v.Range("G" & derligV + l) = t(l, 7)
            v.Range("H" & derligV + l) = t(l, 8)
            v.Range("I" & derligV + l) = t(l, 9)
            v.Range("j" & derligV + l) = t(l, 10)
            v.Range("k" & derligV + l) = t(l, 11)
         Next l

          For l = 1 To lg
            If t(l, 5) <> Empty Then
            C.Range("A" & derligC + l) = t(l, 1)
            C.Range("B" & derligC + l) = t(l, 2)
            C.Range("C" & derligC + l) = t(l, 3)
            C.Range("D" & derligC + l) = t(l, 4)
            C.Range("E" & derligC + l) = t(l, 5)
            C.Range("F" & derligC + l) = t(l, 6)
            C.Range("G" & derligC + l) = t(l, 7)
            C.Range("H" & derligC + l) = t(l, 8)
            C.Range("I" & derligC + l) = t(l, 11)
            End If
          Next l

        For l = 1 To lg
            If t(l, 9) <> Empty Then
            P.Range("A" & derligP + l) = t(l, 1)
            P.Range("B" & derligP + l) = t(l, 2)
            P.Range("C" & derligP + l) = t(l, 3)
            P.Range("D" & derligP + l) = t(l, 4)
            P.Range("E" & derligP + l) = t(l, 9)
            P.Range("F" & derligP + l) = t(l, 11)
            End If
        Next l

        For l = 1 To lg
            If t(l, 10) <> Empty Then
            CH.Range("A" & derligCH + l) = t(l, 1)
            CH.Range("B" & derligCH + l) = t(l, 2)
            CH.Range("C" & derligCH + l) = t(l, 3)
            CH.Range("D" & derligCH + l) = t(l, 4)
            CH.Range("E" & derligCH + l) = t(l, 10)
            CH.Range("F" & derligCH + l) = t(l, 11)
            End If
        Next l

    Me.ListView1.ListItems.Clear
    On Error Resume Next
    C.[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    P.[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    CH.[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    UserForm_Initialize
End Sub

en sachant que le tableau est comme suit

Private Sub Tbl()
With UserForm1.ListView1
        lg = .ListItems.Count
        cl = .ColumnHeaders.Count
        ReDim t(1 To lg, 1 To cl + 1)
        For l = 1 To lg
            t(l, 1) = .ListItems(l).Text
            For m = 1 To cl - 1
                t(l, m + 1) = .ListItems(l).ListSubItems(m).Text
            Next m
        Next l
 End With
End Sub

Bonjour,

Ajoutez "Application.ScreenUpdating = False" en début de macro

ensuite vous pouvez essayer de simplifier sous cette forme:

    For l = 1 To lg ' boucle sur les lignes du tableau
        Range(v.Cells(derligV + l, "A"), v.Cells(derligV + l, "K")).Value = Array(t(l, 2), t(l, 3), t(l, 4), t(l, 1), t(l, 5), t(l, 6), t(l, 7), t(l, 8), t(l, 9), t(l, 10), t(l, 11))
    Next l

Cdlt

bonjour,

edit hello Arturo83

à tester

'(...)

derligV = V.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée
derligC = C.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée
derligP = P.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée
derligCH = CH.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée

V.Range("A" & derligV + 1).Resize(lg, 11) = t

C.Range("A" & derligC + 1).Resize(lg, 11) = t
Columns("I:J").Delete shift:=xlToLeft

P.Range("A" & derligP + 1).Resize(lg, 11) = t
Columns("I:J").Delete shift:=xlToLeft
Columns("E:G").Delete shift:=xlToLeft

CH.Range("A" & derligCH + 1).Resize(lg, 11) = t
Columns("E:H").Delete shift:=xlToLeft

'(...)

bonjour à Arturo 83 et à h2so4

pour Arturo83, ca me donne dub ou fonction non défini ( en sachant que même en ayant arrangé la formule en

Array(t(l, 1), t(l, 2), t(l, 3), t(l, 4), t(l, 5), t(l, 6), t(l, 7), t(l, 8), t(l, 9), t(l, 10), t(l, 11))

pour h2so4, ca me donne variable non défini t???

je joint le fichier comme meme

pardon à vous 2 , les 2 facons fonctionne!!!! et je vous remercie

il y avait la variable t as varianté en 'Dim t as variant !!! je ne sait comment j'ai fait ca

en tous les cas merci beaucoup pour tous

Rechercher des sujets similaires à "simplification rapidite"