Avant de commencer, merci de l'aide que vous apportez sur différents sujets, qui permettent chaque jour de résoudre pas mal de problèmes...
Mais là, j'en ai un qui me pose soucis, et j'en me remet à vous...
J'ai une macro fonctionnelle, mais si mes données sont supérieures à environ 10000 lignes, alors là, c'est le drame, ça mouline dans le vent...
Voici le code qui va bien
Code:
Sub seqp1()
Dim i As Long
Dim k As Long
For i = 1 To Range("B65536").End(xlUp).Row
If Cells(i, 2).Value = "?" Then
Cells(i + 1, 2).Value = Cells(i, 3).Value
End If
For k = 1 To Range("B65536").End(xlUp).Row
If Cells(i + k, 2).Value <> "?" And Cells(i + k, 2).Value <> "" Then
Cells(i + k, 2).Value = Cells(i + 1, 2).Value
Else
Exit For
End If
Next k
Next i
End Sub
Précisions :
- j'avais déclaré en "Integer" à la base, ce que j'ai corrigé en "Long" après erreur du dépassement de capacité, pour les séries de plus de 30000 lignes
- Pour environ 6000 lignes, la macro met 30 secondes à tourner
- J'ai attendu 10 bonnes minutes pour 15000 lignes, sans qu'elle ne finisse...
- Je fais tourner ça sur un DELL récent, avec un bon core 2 duo, de la RAM itou itou
- Je fais tourner ça depuis Excel 2003
Ma question est donc de savoir si j'atteins les limites de la boucle For...Next, ou si la façon dont j'ai écris ma boucle fout tout par terre si j'ai un trop grand nombre de lignes...
L'autre problème est qu'il faut absolument que je garde mes grandes listes... Pas moyen de scinder en plus petits fichiers (ce qui règlerais mon problème en plus...)
le temps de cligner 1 œil (même réponse que Minick mais sans colonne supplémentaire)
Code:
Sub Vite()
Dim ti
ti = Timer
Dim t, i As Long
t = Range("B1:C" & Cells(Rows.Count, 1).End(xlUp).Row)
For i = 2 To UBound(t)
If t(i, 1) = "?" Then
t(i, 1) = "?"
Else
If t(i - 1, 1) = "?" Then
t(i, 1) = t(i - 1, 2)
Else
t(i, 1) = t(i - 1, 1)
End If
End If
t(i, 2) = t(i - 1, 2) + 10
Next
Range("G1:H" & UBound(t)) = t
MsgBox Timer - ti
End Sub
désolé de la réponse si tardive, je m'étais permis 3 petits jours de congés
Merci à tous de vos réponses, mention spéciale à Papou-net !!
J'ai repris la macro avec son idée, et ça fonctionne vraiment bien, avec un temps d'exécution vraiment plus court... de l'ordre d'une à deux secondes maximum (et ce, même sans modifier le screen updating)