Autres Boucle qui ne boucle pas ....

3tata6111165

XLDnaute Nouveau
bonjour a tous j'ai un petit probleme la macro ci dessous fonctionne mais ne boucle pas il faut que je click sur la souri pour faire effacer les lignes qui reponde au test
merci si vous avez une solutions moi je ne vois pas ou cela bloque

Sub toto()
Sheets("w").Select
With Sheets("w")
v1 = Cells(1, 1).Value
x = Application.WorksheetFunction.Max(Columns(4))
End With

i = 1

Do While Cells(i, 1).Value <> ""

If Cells(i, 1).Value = v1 And Cells(i, 4).Value < x Then
Rows(i).EntireRow.Delete
Cells(12, 1).Value = x 'pour visuel
Cells(12, 2).Value = v1 ' pour visuel
End If

i = i + 1
Loop


End Sub
 

danielco

XLDnaute Accro
Je ne comprends pas le "With". Quand on supprime des lignes, il faut commencer par la fin. Essaie :

VB:
Sub totobis()
  Sheets("w").Select
  With Sheets("w")
    v1 = Cells(1, 1).Value
    x = Application.WorksheetFunction.Max(Columns(4))
  End With
  For i = Cells(1, 1).End(xlDown).Row To 1 Step -1
    If Cells(i, 1).Value = v1 And Cells(i, 4).Value < x Then
      Rows(i).EntireRow.Delete
      Cells(12, 1).Value = x 'pour visuel
      Cells(12, 2).Value = v1 ' pour visuel
    End If
  Next i
End Sub

Cordialement.

Daniel
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

Si j'ai bien compris la donne, une autre façon de faire (sans boucle)
VB:
Sub tata()
Dim DL&, x
DL = Cells(Rows.Count, 1).End(3).Row
x = Application.Max(Columns(4))
Cells(2, Columns.Count).Resize(DL - 1).Formula = _
"=IF(AND(A2=$A$1,D2<" & x & "),""$"",1)"
Application.ScreenUpdating = False
Columns(Columns.Count).SpecialCells(-4123, 2).EntireRow.Delete
End Sub
 

3tata6111165

XLDnaute Nouveau
merci a tous

danielco ca fonctionne a merveille
>question pourquoi ma macro fonctionne au lancement puis au click de souris ? (le test ce fais bien et efface les lignes correspondantes mais il faut que je reclique hors sub)
staple1600 meme Pb que moi n'efface qu'une ligne clique de souris obliger pour les autres- puis erreur 1004 pas de cellule correspondante

cordialement et merci encors
laurent
 

Staple1600

XLDnaute Barbatruc
Re

Et comme cela?
Code:
Sub titi()
Dim DL&, x
DL = Cells(Rows.Count, 1).End(3).Row
x = Application.Max(Columns(4))
Cells(2, Columns.Count).Resize(DL - 1).Formula = _
"=IF(AND(A2=$A$1,D2<" & x & "),""$"",1)"
Application.ScreenUpdating = False
On Error Resume Next
Columns(Columns.Count).SpecialCells(-4123, 2).EntireRow.Delete
End Sub
 

3tata6111165

XLDnaute Nouveau
Je ne comprends pas. Tu exécutes la macro depuis Excel, ou depuis la fenêtre VBE ? Explique précisément ce que tu fais.

Daniel
j'execute depuis la fenetre vbe
la macro est dans un module
je lance la macro
le test ce fais et efface une des lignes correspondante
puis plus rien
je clique sur la souris et cela efface une autre ligne et cela jusqu'a la derniere ligne repondant au test
- est ce simplement que la macro reste active

merci
laurent
 

danielco

XLDnaute Accro
danielco cest vrais le with ne sert a rien
mais j'aimerais bien comprendre pourquoi ma macro fonctionne mais ne boucle pas .....

merci

Admettons que les lignes 2 et 3 soient à supprimer. Quand i=2, la ligne 2 est supprimée et la ligne 3 devient la ligne 2. En même temps, la valeur de i passe de 2 à 3. Ce qui fait que la ligne 2 (initialement ligne 3) n'est pas testée. C'est pourquoi, il faut commencer par tester la dernière ligne.

Daniel
 

danielco

XLDnaute Accro
j'execute depuis la fenetre vbe
la macro est dans un module
je lance la macro
le test ce fais et efface une des lignes correspondante
puis plus rien
je clique sur la souris et cela efface une autre ligne et cela jusqu'a la derniere ligne repondant au test
- est ce simplement que la macro reste active

merci
laurent
Il semblerait que tu aies mis des points d'arrêt. Ferme la fenêtre et rouvre-la.

Daniel
 
Haut Bas