Sous excel Supression ligne Automatic

Bonjour,

j'aurai besoins d'une aide precieuse

Dans une feuille excel d'environ 500000 lignes je voudrai effacer des lignes en Automatique
si et seulement si la valeur est différent de G OU J aprés la syntaxe MID=

Ci joint 3 exemples BRUT et ceux sur trois lignes différente

GPC--PM=PM--MID=1_DOMODULE_C71.01--C=2422217--S=LT_WC_GPC_Chuckspot--R=DOMODULE_C71.SANSALIGN.VA04A00262C0--N=3--G=2--T=3.09659238752066379--I1=Range_PHY_X--I2=Range_PHY_Y

GPC--PM=PM--MID=J934IRI.13--C=2425404--S=LT_WC_GPC_Chuckspot--R=RA69A.49E0.RA69A49E0047--N=3--G=1--T=3.7990593927151779--I1=Range_PHY_X--I2=Range_PHY_Y

GPC--PM=PM--MID=G002412.11--C=2435320--S=LT_WC_GPC_Chuckspot--R=8207B.01A0.8207B00134E3--N=3--G=1--T=7.47596122141144814--I1=Range_PHY_X--I2=Range_PHY_Y

ci joint le resultat escompté les seuls ligne qui m'intéresse

GPC--PM=PM--MID=J934IRI.13--C=2425404--S=LT_WC_GPC_Chuckspot--R=RA69A.49E0.RA69A49E0047--N=3--G=1--T=3.7990593927151779--I1=Range_PHY_X--I2=Range_PHY_Y

GPC--PM=PM--MID=G002412.11--C=2435320--S=LT_WC_GPC_Chuckspot--R=8207B.01A0.8207B00134E3--N=3--G=1--T=7.47596122141144814--I1=Range_PHY_X--I2=Range_PHY_Y

bref j'accepte uniquement les datas qui sont = a G* ou J* aprés le MID=
par conséquent j'efface de ma feuille les autres

merci d'avance pour votre Aide
Configuration: XP

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonsoir,
    les données sont dans une seule et même cellule ou le "--" signifie que l'on change de colonne ?
    1. Salut,
      chaque ligne commence par GPC et tout le script se trouve dans une meme cellule

      Merci
      1. Contributeur
        Bonsoir,

        une proposition :
        Sub supplig()
            Dim car As String, lig As Long, derlig As Long, a
            derlig = Cells(Range("A:A").Rows.Count, 1).End(xlUp).Row
            For lig = derlig To 2 Step -1
                car = Mid(Cells(lig, 1).Value, InStr(Cells(lig, 1).Value, "MID=") + 4, 1)
                If Not (car = "G" Or car = "J") Then a = 1 'Rows(lig).EntireRow.Delete
            Next lig
        End Sub

        Si MID= n'est pas trouvé la ligne est supprimée (celles des cellules vides en A aussi)
        Comme tu as parlé de 500000 lignes j'ai fait en sorte que la macro s'adapte au nombre de lignes d'excel 2003 et 2007
        eric
        1. MRCI ERIC pour cette Proposition j'aurai loisirs a le testé demain

          Encore Merci, je t'en dirai des Nouvelles
          1. Contributeur
            heuuu, je t'ai mis la version intermédiaire qui ne supprime pas les données...
            Teste plutôt ça :
            Sub supplig()
                Dim car As String, lig As Long, derlig As Long
                derlig = Cells(Range("A:A").Rows.Count, 1).End(xlUp).Row
                For lig = derlig To 2 Step -1
                    car = Mid(Cells(lig, 1).Value, InStr(Cells(lig, 1).Value, "MID=") + 4, 1)
                    If Not (car = "G" Or car = "J") Then Rows(lig).EntireRow.Delete
                Next lig
            End Sub

            Et j'ai supposé que tu avais une ligne de titre à ne pas traiter.
            eric