RESOLU Accélérer un LOOP

chacal33

XLDnaute Junior
Bonjour à toutes et à tous.

J'ai créé une macro qui fait ce que je veux, mais c'est très lent.
Sauriez-vous comment accélérer le processus?

Code:
Sub BUDGET()


For i = 2 To 10000


Sheets("Feuil1").Select
If Sheets("Feuil1").Range("D" & i).Value <> "Tâcherons" And Sheets("Feuil1").Range("D" & i).Value <> "" And Sheets("Feuil1").Range("K" & i).Value <> "" And Sheets("Feuil").Range("A30").Value = "ABC" Then
    
    Sheets("Feuil2").Range("A30").Value = Sheets("Feuil1").Range("K" & i).Value
   
    Sheets("Feuil2").Select
    Range("B30").Select
    
   Dim strName As String
    strName = InputBox("Veuillez rentrer le montant du budget", "Budget")
    ActiveCell.Value = strName

ElseIf Sheets("Feuil1").Range("D" & i).Value <> "Tâcherons" And Sheets("Feuil1").Range("D" & i).Value <> "" And Sheets("Feuil1").Range("K" & i).Value <> "" And Sheets("BILAN").Range("A30").Value <> Sheets("Feuil1").Range("K" & i).Value And Sheets("Feuil2").Range("A31").Value = "ABC" Then

    Sheets("Feuil2").Range("A31").Value = Sheets("Feuil1").Range("K" & i).Value

    Sheets("Feuil2").Select
    Range("B31").Select
    
   Dim strName1 As String
    strName1 = InputBox("Veuillez rentrer le montant du budget", "Budget")
    ActiveCell.Value = strName1


End If

Next i

End Sub

Merci de vos retours.

PS: J'ai déjà désactivé dans le classeur les calculs automatiques.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Accélérer un LOOP

Bonjour,

Ne pas travailler sur des cellules mais sur des tableaux VBA (matrices).

Bien sûr pas d'InputBox dans la boucle, sauf si c'est très occasionnel.

Nombreux exemples sur le forum.

A+
 

ROGER2327

XLDnaute Barbatruc
Re : Accélérer un LOOP

Bonjour à tous.


Code:
Sub BUDGET()
Dim i&, s$, x
    With Sheets("Feuil1")
        For i = 2 To 10000
            If .Cells(i, 4).Value <> "Tâcherons" And .Cells(i, 4).Value <> "" And .Cells(i, 11).Value <> "" Then
                If Sheets("Feuil").Range("A30").Value = "ABC" Then
                    s = InputBox("Veuillez rentrer le montant du budget", "Budget")
                    Sheets("Feuil2").Range("A30:B30").Value = Array(.Cells(i, 11).Value, s)
                ElseIf Sheets("BILAN").Range("A30").Value <> .Cells(i, 11).Value And Sheets("Feuil2").Range("A31").Value = "ABC" Then
                    s = InputBox("Veuillez rentrer le montant du budget", "Budget")
                    Sheets("Feuil2").Range("A31:B31").Value = Array(.Cells(i, 11).Value, s)
                End If
            End If
        Next i
    End With
End Sub
Sous toutes réserves, car :
  1. on ne sait pas ce que doit faire la procédure ;
  2. on ne dispose d'aucun support permettant de tester le code.


Bonne soirée.


ℝOGER2327
#7273


Mercredi 4 Palotin 141 (Sainte Susan Calvin, docteur - fête Suprême Quarte)
4 Floréal An CCXXII, 6,3262h - aubépine
2014-W17-3T15:10:58Z
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Accélérer un LOOP

Re...


Bonjour à tous,

merci Roger pour ton option. C'est exactement ce que je cherchais et ça fonctionne du feu de Dieu!

A+
Au poil !
Comme quoi il faut croire au coup de bol...



ℝOGER2327
#7275


Jeudi 5 Palotin 141 (Sainte Poignée, veuve et Sainte Jutte, recluse - fête Suprême Quarte)
5 Floréal An CCXXII, 6,1803h - rossignol
2014-W17-4T14:49:58Z
 

Discussions similaires

Statistiques des forums

Discussions
312 344
Messages
2 087 448
Membres
103 546
dernier inscrit
mohamed tano