Suppression de ligne en macro

hainlesgens -  
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous, j'essai de creer une macro qui va supprimer automatiquement des lignes dons la valeur de la cellulle b(i) quand celle ci est égale a 0 et que la cellule F(i) est supperieur a F(i+1)
j'ai fait la requete suivante, mais quand j'essais de l'exécuter, le programme me renvoi
"erreur d'exécution'438'; propriété ou méthode non géré par cet objet"
si quelqu'un a la solution... sa m'aiderai énormément!
( j'ai mis des msgbox futiles pour essayer de trouver d'ou provenais l'erreur mais elle ne fonctionnne pas non plus :S)

i = 49
While (Cells(i, 1).Values <> "")
MsgBox ("tant que réussis")
If (Cells(2, i).Values = 0) Then
MsgBox ("si cells 2,I .values réussis")
If (Cells(i, 6).Values > Cells(i + 1, 6).Values) Then
MsgBox ("si cells I,6 .values réussis")

i = i + 1
MsgBox (" incrémentation de I reussis")
Rows("i").Select
Selection.Delete shift:=xlUp
MsgBox (" suppréssion de la ligne réussis")
Else
i = i - 1
Rows("i").Select
Selection.Delete shift:=xlUp
MsgBox (" suppression de la ligne réussis")
i = i + 1
MsgBox (" incrémentation de I réussis")

End If
End If
Wend
i = i + i
MsgBox ("incrémentation du I réussis")
End Sub
A voir également:

5 réponses

hainlesgens
 
autant pour moi... j'ai mis des S à mes values...

désolé je suis trop nul...

mais cela n'empeche que la macro ne marche pas jusqu'a la fin...
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Bonjour !
tu peux aussi corriger Rows("i") en Rows(i)
A suivre...
0
hainlesgens
 
oui merci, je viens de m'en apercevoir aussi a l'instant..
j'ai presque réussis, juste qu'il me supprime pas les bonne ligne et que quand il supprimé les valeurs les moins haute, et qu'il a trouver la plus forte, il arette de supprimé les autres :D
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Quand, dans la ligne i, B(i) = 0 et F(i)>F(i+1), quelle ligne veux-tu supprimer ? la ligne i ? la ligne i+1 ?
Quand les 2 conditions ne sont pas réunies, faut-il aussi supprimer une ligne ou bien rien ?

D'après ce que j'ai compris jusqu'ici de ta problématique, voici ce que j'aurais écrit :
i = 49
While (Cells(i, 1).Value <> "")
    If (Cells(i, 2).Value = 0) Then
        If (Cells(i, 6).Value > Cells(i + 1, 6).Value) Then
            Rows(i).Delete shift:=xlUp
            i = i - 1
        End If
    End If
    i = i + 1
Wend

A suivre...
0
Hainlesgens
 
i = 48
While (Cells(i, 8).Value = 1) And i <> 100
i = i + 1

While (Cells(i, 1).Value = "")
' i = i + 1
' MsgBox ("i vaux" & i)
'Wend
MsgBox ("i vaux" & i)
If (Cells(i, 2).Value = 0) Then
While (Cells(i, 2).Value = 0)

MsgBox ("i vaux" & i)
If (Cells(i, 6).Value > Cells(i + 1, 6).Value) Then
'And (Cells(i, 8).Value = "1") Then

MsgBox ("i vaux" & i)
i = i + 1
Rows(i).Select
Selection.Delete shift:=xlDown
i = i - 1
Else
MsgBox ("i vaux" & i)
Rows(i).Select
Selection.Delete shift:=xlDown

End If

MsgBox ("i vaux" & i)
Wend
i = i + 1

MsgBox ("i vaux" & i)
End If
Wend

MsgBox ("i vaux" & i)

Wend
i = i + 1

voila la sollution qui me convien presque au final, plus qu'a faire en sorte que sa s'arette quand les lignes sont entierement vides..!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Salut,
c'est pas la procédure la plus simplement construite que j'aie vue et , honnêtement, je renonce à la comprendre ! C'est un sacré sac de noeuds que tu as fabriqué, il y a certainement plus simple à faire, mais l'essentiel, c'est que ça marche. Prends quand-même bien le temps de tester tous les cas de figure !

Pour arrêter la procédure à la première ligne vide, tu peux par exemple commencer par déterminer le n° de la dernière ligne avec .End(xlDown)
Dim DerniereLigne As Integer
i = 48
DerniereLigne = Cells(i, 8).End(xlDown).Row
While (Cells(i, 8).Value = 1) And i <> 100 And i <= DerniereLigne
     'suite des instructions

ou bien tester que ta ligne i ne contient aucune valeur
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then 
     Exit Sub

A suivre...
0