Supprimer ligne SI un mot est présent

Résolu
Ikarytos Messages postés 38 Statut Membre -  
Ikarytos Messages postés 38 Statut Membre -
Bonjour,

Voilà quelque jours que j'essaie de faire un fichier m'aidant à démasquer des infractions parmi des log's d'action bref.

Chaque ligne est analysée avec des fonctions SI par apport à d'autre ligne, le problème est qu'il y a des lignes parasites qui font échouer le résultat.

Est-il possible de supprimer ces lignes avec une condition par exemple que le mot « domicile » s'y trouve parmi d'autre dans la ligne ?

Espérant avoir été assez précis, je vous remercie d'avance

5 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    il manque des précisions, le mot recherché se trouve t-il toujours dans la même colonne?
    Dans quelle colonne doit s'applique le contrôle?
    En attendant voici un petit bout de code, j'effectue le contrôle sur la colonne 2, changez le N° si ce n'est pas ça "Col=?"

    Sub SupprimerLigneParasite()
    Application.ScreenUpdating = False
    DerLig = Range("A100000").End(xlUp).Row
    Col = 2
    For Lig = 2 To DerLig
    Deb:
    Parasite = InStr(1, Cells(Lig, Col), "Domicile", 1)
    If Parasite <> 0 Then GoTo LigneSuivante
    Cells(Lig, Col).EntireRow.Delete
    DerLig = DerLig - 1
    If DerLig = 0 Or DerLig < Lig Then Exit Sub
    GoTo Deb
    LigneSuivante:
    Next Lig
    End Sub
    bonne soirée
    cdlt
    1
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    bonsoir
    Voici, j'ai laissé la boîte de dialogue, car très pratique.
    Vous saisissez tous les mots à éliminer séparés par une virgule sans espaces et terminez par une virgule
    Sub SupprimerLigneParasite3()
        Application.ScreenUpdating = False    
        Dim Message, Title, MotRecherche
        Message = "Quel mot ?"
        Titre = "Supprimer toutes les lignes contenant "
        MotsRecherches = InputBox(Message, Titre)    
        NbVirgule = UBound(Split(MotsRecherches, ",", , 1))
        ReDim Mot(NbVirgule + 1) As String
        ReDim Virgule(NbVirgule) As String    
        For i = 1 To NbVirgule
            Mot(i) = Mid(MotsRecherches, 1, InStr(1, MotsRecherches, ",", 1) - 1)
            MotsRecherches = Right(MotsRecherches, Len(MotsRecherches) - InStr(1, MotsRecherches, ",", 1))
        Next i    
        DerLig = Range("A100000").End(xlUp).Row
        Col = 1
        For Lig = 2 To DerLig
            For i = 1 To NbVirgule
    Deb:
                Parasite = InStr(1, Cells(Lig, Col), Mot(i), 1)
                If Parasite = 0 Then GoTo TesterParasiteSuivant
                Cells(Lig, Col).EntireRow.Delete
                DerLig = DerLig - 1
                If DerLig = 0 Or DerLig < Lig Then Exit Sub
                GoTo Deb
    TesterParasiteSuivant:
            Next i
    LigneSuivante:
        Next Lig
    End Sub
    ça devrait aller
    bonne soirée
    cdlt
    1
  3. Ikarytos Messages postés 38 Statut Membre 12
     
    Merci à vous pour votre aide.

    C'est toujours dans la première colonne que le contrôle à besoin d'être fait. Et est-il possible d'avoir plusieurs mots clef dans la recherche ?

    Par contre j'ai testé le code donné, mais c'est l'inverse qui se toutes les cellules n'ayant pas le mot clef ont été effacé.

    En fait c'est toute la ligne en entier contenant le mot clef qui devrait être supprimée.

    Désoler si mon explication n'était pas assez compréhensible.
    0
    1. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Bonsoir
      Effectivement, j'ai fait l'inverse, voilà, c'est corrigé.
      A chaque lancement du programme, il vous sera demandé de saisir le mot dont la ligne sera supprimée.
      Sub SupprimerLigneParasite()
          Application.ScreenUpdating = False
          
          Dim Message, Title, MotRecherche
          Message = "Quel mot ?"
          Titre = "Supprimer toutes les lignes contenant "
          MotRecherche = InputBox(Message, Titre)
          
          DerLig = Range("A100000").End(xlUp).Row
          Col = 1
          For Lig = 2 To DerLig
      Deb:
              Parasite = InStr(1, Cells(Lig, Col), MotRecherche, 1)
              If Parasite = 0 Then GoTo LigneSuivante
              Cells(Lig, Col).EntireRow.Delete
              DerLig = DerLig - 1
              If DerLig = 0 Or DerLig < Lig Then Exit Sub
              GoTo Deb
      LigneSuivante:
          Next Lig
      End Sub

      bonne soirée
      cdlt
      0
  4. Ikarytos Messages postés 38 Statut Membre 12
     
    Je vous en remercie infiniment. Le code fonction parfaitement.

    Sans vouloir abuser, pour une utilisation optimum, est-il possible de mettre comme dans le premier exemple (sans la boite de dialogue) les mots clef en même temps ?
    J'ai essayé plusieurs choses mais rien ne va :

    Parasite = InStr(1, Cells(Lig, Col), "Domicile" & "NPA" & "ASSmG", 1)
    ou
    Parasite = InStr(1, Cells(Lig, Col), "Domicile,NPA,ASSmG", 1)
    Parasite = InStr(1, Cells(Lig, Col), "Domicile ;NPA ;ASSmG", 1)

    mais rien ne va.
    0
    1. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Bonsoir
      Etant absent de la journée, Je viens de voir votre post, j'essaie de vous faire ça pour ce soir
      A+
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ikarytos Messages postés 38 Statut Membre 12
     
    Vraiment super, un très grand merci. Je vais pouvoir économiser beaucoup de temps dans mon travail. Encore milles merci.
    0