Problème de suppression de lignes(Exxcel)

Résolu
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
Configuration: Windows Vista
Internet Explorer 7.0
Excel 2003

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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. Modérateur
      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...
      1. Modérateur
        Pardon !!! Ma macro supprime les lignes ou est indiqué sous traitance et Type de commande....
        Suit les conseils de "leplot".
        Encore désolé
        1. 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