Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Optimisation macro numérotation ligne

Oliver77

XLDnaute Occasionnel
Bonjour,

J'ai fait une macro pour numéroter les lignes de données dans une feuille, j'ai cherché en vain et j'y suis parvenu mais par contre je la trouve lente quand je l'intègre dans mon priojet. Qu'en pensez-vous ? J'utilise encore excel 2007...
Merci par avance,
Oliver77

Sub NumLignes()
Dim i As Integer
derniere_ligne = Range("B1").CurrentRegion.Rows.Count
For i = 2 To derniere_ligne
Range("A" & i).Value = "=ROW(RC[1])-1"
Range("A" & i).Copy
Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Range("A" & i).NumberFormat = "General"
Next i
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

j'ai cherché en vain et j'y suis parvenu



VB:
Sub NumLignes()
Dim i As Integer

    derniere_ligne = Range("B1").CurrentRegion.Rows.Count
    For i = 2 To derniere_ligne
        Range("A" & i).Value = "=ROW(RC[1])-1"
        Range("A" & i).Copy
        Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
        Range("A" & i).NumberFormat = "General"
    Next i

End Sub
je la trouve lente quand je l'intègre dans mon projet
Commence par ajouter un Application.ScreenUpdating = False au début de ta macro, ça devrait éviter de la ralentir.


Ensuite il y a aussi, je pense, moyen de l'améliorer.
Je te propose ceci :
VB:
Sub NumLignes()
'
    Application.ScreenUpdating = false

    derniere_ligne = Range("B1").CurrentRegion.Rows.Count
    With Range("A2:A" & derniere_ligne)
        .Formula = "=ROW(RC[1])-1"
        .NumberFormat = "General"
        .Value = .Value
    End With

End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

@Oliver77
Une version qui n'a pas besoin d'utiliser de formule.
(et également plus courte a rédiger)
Code:
Sub Numeroter_Light()
Dim x&
x = Cells(Rows.Count, "B").End(xlUp).Row - 1
[A2] = 1: [A2].DataSeries 2, 1, 1, 1, x
End Sub
NB: A voir si sur un grand nombre de lignes, c'est plus rapide ou pas.
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Edit : Staple J'avais pas vu ton post lorsque j'ai mis mon post

@Olivier77

Nom de la feuille à adapter évidement !!!
VB:
Sub test()
Dim Derlig&
Dim t#
t = Timer
Derlig = Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
[A2] = 1: Range("A2:A" & Derlig).DataSeries
MsgBox "Macro éxécutée en " & Format(Timer - t, "0.00 \sec")
End Sub



Merci de ton retour
 

Oliver77

XLDnaute Occasionnel
Re-bonjour,
@Staple1600 et @Phil69970, merci.
Vraiment génial car je comptais ajouter une procédure pour enlever la formule dans la cellule.

@Staple1600, en me proposant d'ajouter "Application.ScreenUpdating = False" je me suis souvenu de "Application.Calculation = xlManual" et bien-sûr "Application.Calculation = xlAutomatic".

Là aussi j'ai vu la différence.

A+ plus et encore merci !
 

TooFatBoy

XLDnaute Barbatruc

Staple1600

XLDnaute Barbatruc
Bonjour le fil

@Oliver77
Je n'ai publié qu'un message dans cette discussion.
Le#5
Les propos que tu me prêtes dans le message#7 ne sont pas les miens
Par contre ce que j'écris ci-dessous c'est bien moi avec mes dix doigts (enfin un peu moins)
Pour optimiser une procédure VBA, le mieux c'est de pas faire de procédure VBA mais de faire confiance aux fonctionnalités natives d'Excel
1) Je saisis 1 en A2
2) Clic-droit et je glisse ma souris, et voilou
 

crocrocro

XLDnaute Occasionnel
Bonjour le fil,
en complétant la proposition de Staple
1) Je saisis 1 en A2
2) Clic-droit et je glisse ma souris, et voilou
si on suppose que l'on doit avoir un n° jusqu'à la ligne 10 0000, soyons fou : 100 000, le glisser avec la souris peut être long .
Une proposition (à adapter selon ce que vous souhaitez faire) :
En A1 saisir 0
En A2 saisir = A1+1
Sélectionner A2 - CTRL C (Copier)
F5 (Atteindre)
Saisir A3: A10000
CTRL V (Coller)
F9 (Calculer Maintenant)
CTRL C (Copier)
Clic Droit -> Collage Spécial -> Valeurs
En A2 saisir 1
En A1 saisir "ce que vous voulez"

Quasi instantané !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…