Problème de suppression de lignes(Exxcel)

Résolu/Fermé
BenGonGon - 17 avril 2009 à 14:11
 BenGonGon - 17 avril 2009 à 15:12
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
A voir également:

4 réponses

leplot Messages postés 191 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 13 août 2015 131
17 avril 2009 à 14:42
Bonjour

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.
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
17 avril 2009 à 14:34
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...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
17 avril 2009 à 14:44
Pardon !!! Ma macro supprime les lignes ou est indiqué sous traitance et Type de commande....
Suit les conseils de "leplot".
Encore désolé
0
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
0