Limites de la boucle "For...Next" VBA

Paski

XLDnaute Nouveau
Bonjour à tous,

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...)

Merci d'avance de votre aide à tous ! :)
 

Fo_rum

XLDnaute Accro
Re : Limites de la boucle "For...Next" VBA

Salut

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
 

Fo_rum

XLDnaute Accro
Re : Limites de la boucle "For...Next" VBA

Re

à laetitia90 : tu peux te le permettre bien sûr (j'ai déjà dit que j'acceptais toute critique constructive) !

J'aurais dû écrire
Range("B1:C" & UBound(t)) = t
J'ai changé pour avoir sous les yeux (ouverts) le résultat obtenu et parce qu'il y a encore pas mal de lecteurs qui manipulent mal "Resize" !

Paski, s'il repasse et que la proposition correspond à son problème, aura 2 écritures à sa disposition.
 

Paski

XLDnaute Nouveau
Re : Limites de la boucle "For...Next" VBA

Bonjour à tous !

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)

Merci beaucoup beaucoup beaucoup !!!
 

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 087 970
Membres
103 688
dernier inscrit
Amadou