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

Statistiques des forums

Discussions
312 172
Messages
2 085 932
Membres
103 050
dernier inscrit
HAMZA BKA