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 lignes contenant mot dans classeur entier (avec InputBox) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut supprimer lignes contenant mot dans classeur entier (avec InputBox)
    Bonjour,

    Je sais que ce sujet a déjà été abordé mais rien ne fonctionne chez moi. J'y ai passé beaucoup de temps et je sèche. J'ai vraiment besoin d 'aide.
    Je suis sous Excel 2007 (windows). J'ai un fichier Excel qui au final contiendra une centaine de feuilles.
    La première page est une page d'accueil avec des boutons renvoyant aux différentes feuilles.
    Chaque feuille correspond à une formation et contient une liste de noms avec les dates de ces formations pour chaque personne. Les noms ne se trouvent pas toujours dans la première colonne.
    Je souhaiterais que lorsque je clic sur un bouton spécifique une boite de dialogue s'affiche et demande "le nom de la personne à supprimer".
    Ensuite, une fois le nom tapé, il faudrait que toutes les lignes contenant ce nom (sur TOUTES les feuilles du classeur) soient supprimées.
    J'ai essayé un code qui fonctionne très bien sur une seule feuille mais impossible de l'appliquer à tout le classeur.
    j'ai essayé tout ce que j'ai pu trouver sur les forums, rien ne va.
    Voici un mini fichier qui a la même forme que le vrai (car données confidentielles)

    test.xlsx (en xlsx car le xlsb ou m ne fonctionne pas désolée)

    Merci d'avance pour vos réponses.

    DlouJ

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub Supp()
    Dim Arret As Boolean
    Dim Ws As Worksheet
    Dim Pers As String
    Dim n As Integer
    Dim c As Range
     
    Pers = InputBox("Personne à supprimer", "SUPPRESSION")
    If Pers <> "" Then
        If MsgBox("Vous êtes ceratin de supprimer " & Pers & "?" & vbNewLine & "Action irréversible", vbYesNo + vbDefaultButton2 + vbExclamation) = vbYes Then
            For Each Ws In ThisWorkbook.Worksheets
                With Ws.UsedRange
                    Do
                        Set c = .Find(Pers, LookIn:=xlValues, LookAt:=xlWhole)
                        If Not c Is Nothing Then
                            c.EntireRow.Delete
                            n = n + 1
                        Else
                            Arret = True
                        End If
                    Loop While Not Arret
                End With
     
                Arret = False
            Next Ws
            MsgBox n & " enregistrements de " &pers &" ont été supprimés"
        Else
            MsgBox "action annulée"
        End If
    Else
        MsgBox "Entrez un nom non vide"
    End If
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup Mercatog, c'est exactement ce que je voulais.
    c'est vraiment gentil.

    Petite requete:
    Je ne comprends pas tout dans le code: serait-il possible de m'expliquer rapidement à quoi correspond chaque ligne du code?

    Merci d'avance et merci encore c'est parfait!

    DlouJ

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Rapidement je ne peux pas, à toi de voir avec les bases.

    Petite indication sur le code
    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
    Sub Supp()
    Dim Arret As Boolean
    Dim Ws As Worksheet
    Dim Pers As String
    Dim n As Integer
    Dim c As Range
     
    Pers = InputBox("Personne à supprimer", "SUPPRESSION")
    'Si l'utilisateur ne clique pas sur annuler ou n'a pas entré un mot vide
    If Pers <> "" Then
        'ici c'est une simple précaution pour avertir l'utilisateur
        If MsgBox("Vous êtes ceratin de supprimer " & Pers & "?" & vbNewLine & "Action irréversible", vbYesNo + vbDefaultButton2 + vbExclamation) = vbYes Then
            'On parcour chaque feuille du classeur
            For Each Ws In ThisWorkbook.Worksheets
                With Ws.UsedRange
                    'on fait une boucle de recherche sur la plage utilisée de chaque feuille
                    Do
                        'ici on fait la recherche à l'aide de la méthode Find (Voir l'Aide)
                        Set c = .Find(Pers, LookIn:=xlValues, LookAt:=xlWhole)
                        'si on trouve la personne, c est la cellule trouvée avec Find
                        If Not c Is Nothing Then
                            'on supprime toute la ligne
                            c.EntireRow.Delete
                            'on incrémente notre compteur n
                            n = n + 1
                            'si on ne trouve plus de personne sur la feuille Ws, on arrête la recherche sur la feuille Ws, logique non?
                        Else
                            Arret = True
                        End If
                    Loop While Not Arret
                End With
     
                Arret = False
                'on passe à la feuille suivante
            Next Ws
            MsgBox n & " enregistrements de " & Pers & " ont été supprimés"
        Else
            MsgBox "action annulée"
        End If
    Else
        MsgBox "Entrez un nom non vide"
    End If
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Super c'est parfait.

    Merci pour tout, c'est vraiment gentil.

    DlouJ

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Supprimer une series de 21 lignes contenant "x" dans la colonne A
    Par Vdk_sven dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/10/2014, 14h32
  2. Supprimer ligne par défaut dans Logger
    Par reitsab dans le forum Général Java
    Réponses: 8
    Dernier message: 25/11/2011, 16h24
  3. Supprimer ligne contenant un mot précis
    Par DjiLow dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2010, 09h19
  4. [RegEx] Extraction des mot dans un paragraph avec les REGEX
    Par geforce dans le forum Langage
    Réponses: 0
    Dernier message: 29/03/2010, 18h58

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