Problème boucle for

Bonjour à tous,

J'ai un code qui marche bien sauf une bouche "for" qui n'effectue en réalité rien (le programme ne fait pas les opérations de la boucle).

La boucle " for" doit passer de ligne en ligne:

Dans tous les cas -> calculer en colonne C ligne i la somme de (colonne C ligne i-1 et de la colonne B ligne i) note: ce sont deux colonnes au format hh:mm:ss

Si la cellule Di =1 alors rien de spéciale (juste incrémenter i)

Sinon

Si la somme de la cellule Ai+Bi est supérieur à la cellule A(i+1) alors supprimer totalement la ligne i+1 (donc en remontant tous le tableau qui s'étend de A1 à D 169

For i = 2 To 169
Worksheets("Feuil2").Cells(i, 3) = Worksheets("Feuil2").Cells(i - 1, 3) + Worksheets("Feuil2").Cells(i, 2)
If Worksheets("Feuil2").Cells(i, 4) = 1 Then
MsgBox "ok"
Else
If (Worksheets("Feuil2").Cells(i, 1) + Worksheets("Feuil2").Cells(i, 2) > Worksheets("Feuil2").Cells(i + 1, 1)) Then
Worksheets("Feuil2").Row(i).Delete Shift:=xlUp
MsgBox "Convertir"

ActiveSheet.Calculate
End If
End If
Next i
       

Actuellement ça ne me mets une erreur "438" propriété ou méthode non géré par cet objet sans surligner de ligne

Je vous remercie de votre aide

Bonjour Gsolti,

J'ai réécrit ainsi ton code VBA :

Option Explicit

Sub Essai()
  Dim i%
  With Worksheets("Feuil2")
    For i = 169 To 2 Step -1
      .Cells(i, 3) = .Cells(i - 1, 3) + .Cells(i, 2)
      If .Cells(i, 4) <> 1 Then
        If .Cells(i, 1) + .Cells(i, 2) > .Cells(i + 1, 1) Then .Rows(i).Delete
      End If
    Next i
  End With
End Sub

suppression de ligne ➯ travail à faire de bas en haut !

comme j'ai pas ton fichier, j'te laisse adapter le reste.

dhany

Bonjour Dhany et merci de ton activité

Pourquoi faut il impérativement le faire de bas en haut ?

Et pourquoi ma propre fonction ne marche pas ?

Je te remercie

AUSSI du fait un problème avec ton code c'est que ma colonne A doit contenir le cumule de la colonne B en partant du haut ce qui ne marche plus alors (quoi que je peut refaire une boucle à la suite de ton code pour le calculer)

Tu a écrit :

Pourquoi faut-il impérativement le faire de bas en haut ?

Parce que quand tu le fais de haut en bas, la suppression d'une ligne fait que toutes les autres en dessous remontent et il y a une ligne de moins à chaque fois ➯ tout ça fait que ça perturbe le compteur utilisé par la boucle pour balayer les lignes ; dans les 2 codes VBA, le compteur utilisé par la boucle est la variable i.

Dans ton code VBA : For i = 2 To 169 ➯ lors de l'interprétation de cette instruction : valeur initiale "enregistrée" = 2 ; valeur finale "enregistrée" = 169 ; si dans la boucle tu supprimes par exemple la ligne 5, il y aura une ligne en moins : les lignes 6 à 169 vont toutes remonter d'une ligne et deviendront les lignes 5 à 168 ; mais la valeur finale de i qui a été "enregistrée" pour 169 n'a pas changé ! donc au lieu de finir à 168 ça continuera jusqu'à 169 ; et plus le nombre de lignes supprimées est important, plus ce problème est aggravé ! exemple : si au lieu d'une seule ligne ce sont 10 lignes qui sont supprimées, ça devrait finir à 159 mais la valeur finale "enregistrée" est toujours 169, donc ça continuera le traitement pour 10 lignes "fantômes" de trop !

Pour t'aider davantage, il me faudrait ton fichier ; à te lire pour la suite.

dhany

Rechercher des sujets similaires à "probleme boucle"