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

  • Initiateur de la discussion Initiateur de la discussion Paski
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 ! 🙂
 
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
 
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.
 
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 !!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
177
Réponses
8
Affichages
233
Réponses
2
Affichages
201
Réponses
8
Affichages
466
Réponses
5
Affichages
232
Réponses
10
Affichages
281
Réponses
7
Affichages
363
Retour