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
- Suppression compte gmail - Guide
- Formulaire en ligne de meta - 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