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
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
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
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
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".
@Staple1600, en me proposant d'ajouter "Application.ScreenUpdating = False" je me suis souvenu de "Application.Calculation = xlManual" et bien-sûr "Application.Calculation = xlAutomatic".
@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
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é !