IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Supprimer ligne suivant valeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Par défaut Supprimer ligne suivant valeur
    Bonjour,

    Je cherche à supprimer une ligne à partir d'une valeur qui peut se trouver n'importe où dans mon tableau.

    J'ai un code me permettant de supprimer ce qui se trouve en colonne A uniquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub supLignes()
      Application.ScreenUpdating = False
      Set Dico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("trie").[A1].CurrentRegion:  Dico(c.Text) = "":  Next c
      J = 1
      Set f = Sheets("Base de donnée")
      Do While f.Cells(J, 1) <> ""
        If Dico.Exists(Left(f.Cells(J, 1), 5)) Then f.Rows(J).Delete Else J = J + 1
      Loop
    End Sub
    Je ne vois pas trop comment faire pour elargir le champs de recherche.

    Quelqu'un aurais une idée?

    Merci d'avance.

    Isa

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Ca va marcher si tes lignes sont remplies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub supLignes()
      Dim I, J As Long
      Dim exis As Boolean
      Application.ScreenUpdating = False
      Set Dico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("trie").[A1].CurrentRegion:  Dico(c.Text) = "":  Next c
      J = 1
      Set f = Sheets("Base de donnée")
      Do While f.Cells(J, 1) <> ""
        I = 1
        Exis = False
        Do While f.Cells(J, I) <> "" And Exis = False
           If Dico.Exists(Left(f.Cells(J, I), 5)) Then 
              f.Rows(J).Delete 
              Exis = True
           Else 
              I = I + 1
           End If
        Loop
        J = J + 1
      Loop
    End Sub

  3. #3
    Membre éclairé Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Par défaut
    Je te remercie pour la rapidité et l'effacité,

    Je viens de testé ton code malheureusement,

    Il fonctionne bien pour les 4 premières colonne mais si j'essaie de faire pour la colonne J. Cela ne marche pas.

    Une idée?

    Cordialement

    Isa

    Ensuite le soucis est que le texte que je cherche (dans trie) peux se trouver n'importe ou dans la cellule.

    Donc je crainds que Left ne marche pas dans ce cas, mais je ne sais pas par quoi le remplacer .


    Je dois également chercher des valeurs comme,

    clôturepr2010
    CPAS
    RFI
    ...

    Mille merci d'avance.

    Isa

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Dans ce cas, il faut utiliser la fonction InStr, mais en bouclant sur tous les mots que tu as à chercher. Tu ne pourras pas utiliser la méthode Exists du dictionnaire

  5. #5
    Membre éclairé Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Par défaut
    Par contre j'ai remarqué qu'avec le code que j'avais, si j'ai une colonne vide, il passe à la ligne suivant.

    Hors effectivement je peux avoir une colonne vide entre.

    je continue à regarder.

    Merci de l'info.

    Voilà j'ai trouvé, bon je vais devoir malheureusement trouvé un moyen d'utilisé le style de dico. Une idée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub supLignes()  Dim I, J As Long
      Dim exis As Boolean
      Application.ScreenUpdating = False
      'Set Dico = CreateObject("Scripting.Dictionary")
     ' For Each c In Sheets("trie").[A1].CurrentRegion:  Dico(c.Text) = "":  Next c
      J = 1
      Set f = Sheets("Base de donnée")
      Do While f.Cells(J, 1) <> ""
        I = 1
        exis = False
        Do While I < 11 And exis = False
           'If Dico.Exists(Left(f.Cells(J, I), 5)) Then
           If InStr(f.Cells(J, I), "Clôturepr") > 0 Then
              f.Rows(J).Delete
              exis = True
           Else
              I = I + 1
           End If
        Loop
        J = J + 1
      Loop
    End Sub

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Regarde le code que je te propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Explicit
     
    Public Sub test()
        Dim listMots As New Collection
        Dim c As Range
     
        For Each c In Sheets("trie").[A1].CurrentRegion
            listMots.Add c.Text
        Next c
     
        Dim r As Range
        Set r = Sheets("Base de donnée").UsedRange
     
        supprimerLesLignesContenant listMots, r
    End Sub
     
    Private Sub supprimerLesLignesContenant(ByRef listeMotsInterdits As Collection, ByRef rg As Range)
        Dim iCol, iRow As Long
        Dim i As Integer
        Dim currentValue As String
        Dim toDelete As Boolean
     
        iRow = rg.Rows.Count
     
        Do While iRow >= 1
            iCol = rg.Columns.Count
     
            Do While iCol >= 1
                currentValue = rg.Cells(iRow, iCol).Text
     
                i = 0
                toDelete = False
     
                If currentValue <> "" Then
                    Do While i <= listeMotsInterdits.Count And toDelete = False
                        If InStr(listeMotsInterdits(i), currentValue) > 0 Then
                            toDelete = True
                        Else
                            i = i + 1
                        End If
                    Loop
                End If
     
                If toDelete Then
                    iCol = 0
                    rg.Cells(iRow, 1).EntireRow.Delete
                Else
                    iCol = iCol - 1
                End If
     
            Loop
     
            iRow = iRow - 1
        Loop
    End Sub

Discussions similaires

  1. Comment dupliquer ligne suivant valeur Champ3
    Par toto92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/01/2013, 19h17
  2. Supprimer ligne si valeur exacte selectionnee
    Par filou75 dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 03/02/2011, 00h27
  3. [E-00] Supprimer lignes sur valeurs multiples
    Par stanev dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/11/2008, 11h56
  4. Supprimer ligne selon valeur du ComboBox1
    Par avyrex dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/06/2007, 10h27
  5. Réponses: 2
    Dernier message: 13/04/2007, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo