XL 2010 Traitement macro très très long, est-il possible de raccourcir le temps de traitement ?

Philippe LAMACHE

XLDnaute Junior
Bonjour à tous,

Comme je le demande dans l'objet de ce post, y aurai-t'il une solution pour accélérer le traitement de cette macro ?
(environ 30 mn pour 50 000 lignes actuellement)
VB:
Sub Ajout_Col()
MaFeuil = Feuil3.[A1048576].End(xlUp).Value
Worksheets(MaFeuil).Select
dercol = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Range([A14], [A14].SpecialCells(xlLastCell)).Select
Selection.Resize(, 1).Select
Selection.Offset(0, dercol).Select
Selection.Offset(-1, 0).Value = "RGF"
Selection.Offset(-1, 1).Value = "RGF2"
For Each c In Selection
    txt = Len(c.Offset(0, -28)) + Len(c.Offset(0, -27))
    If txt > 1 Then
        MaValue = c.Offset(0, -35).Value & " " & c.Offset(0, -34).Value & "-" & c.Offset(0, -27).Value
        MaValue1 = c.Offset(0, -35).Value & " " & _
                    c.Offset(0, -34).Value & " " & _
                    c.Offset(0, -31).Value & " " & _
                    c.Offset(0, -30).Value & " " & _
                    c.Offset(0, -28).Value & " " & _
                    c.Offset(0, -27).Value
    Else
        MaValue = c.Offset(0, -35).Value & " " & c.Offset(0, -34).Value & "-" & c.Offset(0, -30).Value
        MaValue1 = c.Offset(0, -35).Value & " " & _
                    c.Offset(0, -34).Value & " " & _
                    c.Offset(0, -31).Value & " " & _
                    c.Offset(0, -30).Value
    End If
    If c.Offset(0, -35) <> "" Then
        c.Value = MaValue
        c.Offset(0, 1).Value = MaValue1
    ElseIf c.Offset(0, -35).Value = " " Then
        Exit Sub
    End If
Next c
End Sub

Par avance, merci.
 

Philippe LAMACHE

XLDnaute Junior
Ça peut aboutir à du code bien plus court comme ça par exemple :
VB:
Sub Ajout_Col2()
   Dim Wsh As Worksheet, Rng As Range
   Set Wsh = Worksheets(Feuil3.[A1048576].End(xlUp).Value)
   Set Rng = Wsh.[XFD13].End(xlToLeft).Offset(1, 1).Resize(Wsh.[A1048576].End(xlUp).Row - 13, 2)
   Rng.Columns(1).FormulaR1C1 = "=RC2&"" ""&RC3&IF(LEN(RC9)+LEN(RC10)>1,""-""&RC10,""-""&RC7)"
   Rng.Columns(2).FormulaR1C1 = "=RC2&"" ""&RC3&"" ""&RC6&"" ""&RC7&IF(LEN(RC9)+LEN(RC10)>1,"" ""&RC9&"" ""&RC10,"""")"
   Rng.Value = Rng.Value
   End Sub
Bonjour Dranreb,

Merci pour d'avoir pris le temps de modifier le code pour moi et aussi pour les explications. Bonne journée.
 

Discussions similaires