Suppression de ligne en macro
hainlesgens
-
Ivan-hoe Messages postés 433 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Suppression de ligne en macro
- Partage de photos en ligne - Guide
- Forcer suppression fichier - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formulaire en ligne de meta - Guide
- Mètre en ligne - Guide
5 réponses
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...
désolé je suis trop nul...
mais cela n'empeche que la macro ne marche pas jusqu'a la fin...
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 :
A suivre...
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...
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..!!!
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..!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)
ou bien tester que ta ligne i ne contient aucune valeur
A suivre...
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...