Problème de suppression de lignes(Exxcel)
Résolu
BenGonGon
-
BenGonGon -
BenGonGon -
Bonjour,
J'ai un petit pépin avec une macro Excel (pour changer).
Pépin:
Je cherche une chaine de caractère dans une colonne.
Quand il la trouve, je demande de supprimer la ligne complète.
Tout se décale vers le haut.
Et il passe à la ligne suivante sans la tester.
J'ai résolu le problème en relançant la boucle tant qu' il trouve quelque chose à supprimer.
J'ai fait comme ça parce que je n'ai pas trouvé comment décrémenter mon "for each".
Mais maintenant ce tri me prend des plombes.
Code:
Dim pouet As Boolean
Dim tut As Range
pouet = True
Do While pouet
pouet = False
Columns("F:F").Select
For Each LaCase In Selection
If tut .Text <> ("Type de commande") Then
If tut .Text <> ("Sous-traitance") Then
If tut .Text <> ("") Then
tut .Value = tut .Row
Rows(tut .Row).Select
Selection.Delete Shift:=xlUp
pouet = True
End If
End If
End If
Next
Loop
Récapitulatif:
Une fois que le fou rire sera passé.
Si vous avez une piste pour résoudre mon pépin de temps.
Ce serais bien volontier.
Avec un grand merci à l'équipe de "Commentcamarche" et à toutes sympathique communauté.
BenGonGon
J'ai un petit pépin avec une macro Excel (pour changer).
Pépin:
Je cherche une chaine de caractère dans une colonne.
Quand il la trouve, je demande de supprimer la ligne complète.
Tout se décale vers le haut.
Et il passe à la ligne suivante sans la tester.
J'ai résolu le problème en relançant la boucle tant qu' il trouve quelque chose à supprimer.
J'ai fait comme ça parce que je n'ai pas trouvé comment décrémenter mon "for each".
Mais maintenant ce tri me prend des plombes.
Code:
Dim pouet As Boolean
Dim tut As Range
pouet = True
Do While pouet
pouet = False
Columns("F:F").Select
For Each LaCase In Selection
If tut .Text <> ("Type de commande") Then
If tut .Text <> ("Sous-traitance") Then
If tut .Text <> ("") Then
tut .Value = tut .Row
Rows(tut .Row).Select
Selection.Delete Shift:=xlUp
pouet = True
End If
End If
End If
Next
Loop
Récapitulatif:
Une fois que le fou rire sera passé.
Si vous avez une piste pour résoudre mon pépin de temps.
Ce serais bien volontier.
Avec un grand merci à l'équipe de "Commentcamarche" et à toutes sympathique communauté.
BenGonGon
A voir également:
- Problème de suppression de lignes(Exxcel)
- Forcer suppression fichier - Guide
- Partage de photos en ligne - Guide
- Formulaire en ligne de meta - Guide
- Suppression compte gmail - Guide
- Outil de suppression mcafee - Guide
4 réponses
Bonjour
Je préfère faire un do loop plutôt qu'un each pour pouvoir choisir de changer de ligne ou non. S'il y a une suppression, on teste la même ligne sinon, on descend.
Il faut 10-20 secondes pour faire tout le fichier.
Option Explicit
Sub SuppressionLignes()
Dim Feuille
Dim NumLigne
Set Feuille = ActiveSheet
Feuille.Activate
NumLigne = 1
Do
If Feuille.Range("F" & NumLigne) <> "Type de commande" And Feuille.Range("F" & NumLigne) <> "Sous-traitance" And Feuille.Range("F" & NumLigne) <> "" Then
Feuille.Rows(NumLigne).Delete Shift:=xlUp
Else
NumLigne = NumLigne + 1
End If
Loop While NumLigne <= 65356
End Sub
Je préfère faire un do loop plutôt qu'un each pour pouvoir choisir de changer de ligne ou non. S'il y a une suppression, on teste la même ligne sinon, on descend.
Il faut 10-20 secondes pour faire tout le fichier.
Salut,
Vous n'avez que 2 chaines de caractères à "traiter"? Type de commande et sous-traitance?
Si c'est le cas essayez ceci :
Sauvegardez votre tableau car une fois qu'une macro est lancée on ne peux plus annuler!!!
ActiveSheet.Range("F1").Select 'sélectionne la 1ère cellule colonne F
Do While ActiveCell <> "" 'tant que la cellule n'est pas vide
If ActiveCell.Value = "Type de commande" Then 'si cellule = type de commande alors
ActiveCell.EntireRow.Delete 'supprimer la ligne entière
Else 'sinon
If ActiveCell.Value = "sous-traitance" Then 'si cellule = sous-traitance alors
ActiveCell.EntireRow.Delete ' supprimer la ligne entière
End If
End If
ActiveCell.Offset(1, 0).Select 'si cellule différent de type de commande et de sous-traitance passer à la suivante
Loop 'on recommence jusqu'à ce que mon tableau soit épuré de ce que je ne veux plus
ça doit être ça...
Vous n'avez que 2 chaines de caractères à "traiter"? Type de commande et sous-traitance?
Si c'est le cas essayez ceci :
Sauvegardez votre tableau car une fois qu'une macro est lancée on ne peux plus annuler!!!
ActiveSheet.Range("F1").Select 'sélectionne la 1ère cellule colonne F
Do While ActiveCell <> "" 'tant que la cellule n'est pas vide
If ActiveCell.Value = "Type de commande" Then 'si cellule = type de commande alors
ActiveCell.EntireRow.Delete 'supprimer la ligne entière
Else 'sinon
If ActiveCell.Value = "sous-traitance" Then 'si cellule = sous-traitance alors
ActiveCell.EntireRow.Delete ' supprimer la ligne entière
End If
End If
ActiveCell.Offset(1, 0).Select 'si cellule différent de type de commande et de sous-traitance passer à la suivante
Loop 'on recommence jusqu'à ce que mon tableau soit épuré de ce que je ne veux plus
ça doit être ça...
Pardon !!! Ma macro supprime les lignes ou est indiqué sous traitance et Type de commande....
Suit les conseils de "leplot".
Encore désolé
Suit les conseils de "leplot".
Encore désolé
Pikaju,
Il me semblait bien que quelque chose dans ton code quelque chose clochait.
Mais ton temps de réponse, aimabilité et honneté fait que ton aide à été grandement apprécié.
leplot,
Un grand merci à toi, ta réponse est claire, efficace et élégante.
Tu viens de me retirer une jolie épine du pied.
Ce problème à été résolu avec une grande efficacité.
Encore une fois, Un grand MERCI à toutes la communauté "commentcamarche".
BenGonGon
Il me semblait bien que quelque chose dans ton code quelque chose clochait.
Mais ton temps de réponse, aimabilité et honneté fait que ton aide à été grandement apprécié.
leplot,
Un grand merci à toi, ta réponse est claire, efficace et élégante.
Tu viens de me retirer une jolie épine du pied.
Ce problème à été résolu avec une grande efficacité.
Encore une fois, Un grand MERCI à toutes la communauté "commentcamarche".
BenGonGon