Numero d'ordre decroissant

Bonjour chers tous

je voudrais insérer un numéro d'ordre dans une plage de données de 8000 lignes avec entêtes de colonnes.

J'ai élaboré un code qui fonctionne bien mais qui s'avère lent.

Est il possible de l'optimiser et le rendre rapide ou pourrais-je avoir un code plus performant ? Merci

Sub num_ordreDecroissant()
Dim i, n As Long
n = Range("A" & Rows.Count).End(xlUp).Row - 1
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
Cells(i, 13) = n
n = n - 1
Next i
End Sub

Bonjour,

il faut préparer un tableau en mémoire et tout inscrire d'un coup :

Sub num_ordreDecroissant()
    Dim i As Long, n As Long, tabl() As Long
    n = Range("A" & Rows.Count).End(xlUp).Row - 1
    ReDim tabl(1 To n, 1 To 1)
    For i = 1 To n
        tabl(i, 1) = n - i + 1
    Next i
    Cells(2, 13).Resize(n) = tabl
End Sub

Au passage lorsque tu écris Dim i, n As Long seul n est Long. i est Variant, Il faut typer toutes les variables.
eric

Bonjour à tous,

Sub num_ordreDecroissant()

Dim I As Long, N As Long
Dim HeureDebut, HeureFin, TempsTotal

    HeureDebut = Timer

    With Application
         .ScreenUpdating = False
         .Calculation = xlCalculationManual
    End With

    N = Range("A" & Rows.Count).End(xlUp).Row - 1
    For I = 2 To Range("A" & Rows.Count).End(xlUp).Row
        Cells(I, 13) = N
        N = N - 1
    Next I

    With Application
         .ScreenUpdating = True
         .Calculation = xlCalculationAutomatic
    End With

    HeureFin = Timer
    TempsTotal = HeureFin - HeureDebut
    Debug.Print "Temps total : " & Round(TempsTotal, 0) & " seconde(s)"

End Sub

Ou :

Sub num_ordreDecroissant2()

Dim I As Long, N As Long
Dim HeureDebut, HeureFin, TempsTotal

    HeureDebut = Timer

    With Application
         .ScreenUpdating = False
         .Calculation = xlCalculationManual
    End With

    N = Range("A" & Rows.Count).End(xlUp).Row - 1
    Cells(2, 13) = N
    With Range(Cells(3, 13), Cells(N + 1, 13))
        .Formula2R1C1 = "=R[-1]C-1"
        .Copy
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With

    With Application
         .ScreenUpdating = True
   '      .Calculation = xlCalculationAutomatic
    End With

    HeureFin = Timer
    TempsTotal = HeureFin - HeureDebut
    Debug.Print "Temps total : " & Round(TempsTotal, 0) & " seconde(s)"

End Sub

Merci à tous pour votre contribution

J'ai été bien servi!!

Rechercher des sujets similaires à "numero ordre decroissant"