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 :

[RESOLU] - [VBA / EXCEL 365] Boucle pour supprimer si une cellule contient une valeur cible


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    revenue manager
    Inscrit en
    Avril 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : revenue manager

    Informations forums :
    Inscription : Avril 2023
    Messages : 15
    Par défaut [RESOLU] - [VBA / EXCEL 365] Boucle pour supprimer si une cellule contient une valeur cible
    Bonjour,

    J'ai un classeur qui contient une date de trop sur toutes les feuilles. Le problème c'est que cette date doit être supprimer car elle génère des erreurs lié aux valeurs qui sont sur la même ligne. Il me faut donc supprimer toutes les lignes qui sont sur cette date.

    Je voulais savoir si vous pouviez m'aider sur ma macro. Je cherche à scanner chaque feuille qui contient la date concernée et qui, peu importe la position de la celulle, me supprimer la ligne entière de la cellule.
    Je ne peux pas vous donner l'ensemble du fichier avec toutes les données, je vous ai donc fait une copie simplifiée avec 3 feuilles pour illustrer mon propos.
    J'ai également commencer une macro, mais je bloque :

    Je souhaite supprimer toutes les lignes dont la date est le 26 décembre, formaté "26-déc"

    Si il y a déjà un article traité à ce sujet, je serais ravie d'avoir le lien

    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
    Sub Supprimer()
     
    Dim Ws As Worksheet
     
     
    For Each Ws In Worksheets
     
     
    Cells.Find(What:="26-déc", After:=ActiveCell, LookIn:=xlValues, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
            ActiveSheet.Rows(ActiveCell.Row).EntireRow.Delete
     
     
    Next
    MsgBox "Les cellules ont été supprimées"
    End Sub
    Sauf qu'il me manque l'objet . J'ai donc rajouté la variable

    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
    Sub Supprimer()
     
    Dim Ws As Worksheet
    Dim Cell As Range
     
    For Each Ws In Worksheets
    'La colonne de date peut varier d'une feuille à une autre, c'est un gros fichier d'entreprise, donc je ne voulais pas définir de plage particulière, simplement que la boucle s'arrête une fois que toutes les dates sont supprimées
    For Each Cell In Range("A:AR")
     
     
    Cells.Find(What:="26-déc", After:=ActiveCell, LookIn:=xlValues, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
            ActiveSheet.Rows(ActiveCell.Row).EntireRow.Delete
     
            Next Cell
    Next Ws
    MsgBox "Les cellules ont été supprimées"
    End Sub
    Mais cela ne marche toujours pas. J'ai toujours l'erreur 91.

    Merci à vous.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 518
    Par défaut
    Salut,

    Sert-toi de l'exemple de Crosoft et de la méthode Find et FindNext
    Attention Find ne s'arrête pas donc bien vérifier en fin de boucle que C = Nothing et que C.Address <> FirstAddress
    Si tu as plusieurs lignes à effacer sur une feuille tu dois
    • Soit décompter de la dernière ligne jusqu'à la première et supprimer celle qui correspond au critère
      • C.EntireRow.Delete

    • Soit Utiliser la Méthode Union et les supprimer après la boucle.

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, s'il n'y a qu'une seule occurence par feuille, tu peux faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Supprimer()
        Dim Ws As Worksheet
        Dim Cell As Range
     
        For Each Ws In Worksheets
            Set Cell = Ws.Cells.Find(What:="26-déc")
            If Not Cell Is Nothing Then
                Cell.EntireRow.Delete
            End If
            Set Cell = Nothing
        Next Ws
        MsgBox "Les cellules ont été supprimées"
    End Sub

  4. #4
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 518
    Par défaut
    Re,
    Et en complément de la réponse à Franc, si tu as plusieurs lignes dans chaque feuilles :
    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
    Public Function deleteDate(DateValue As String, Optional Workbook As Excel.Workbook) As Long
        Dim localworkbook As Excel.Workbook
        Set localworkbook = Workbook
        If localworkbook Is Nothing Then Set localworkbook = ThisWorkbook
     
     
        Dim ItemSheet As Excel.Worksheet
        For Each ItemSheet In localworkbook.Worksheets
            Dim Searchedrange As Excel.Range
            Set Searchedrange = Nothing
     
            With ItemSheet.UsedRange
                Set Searchedrange = .Find(DateValue, LookIn:=xlValues)
                If Not Searchedrange Is Nothing Then
                    Dim firstAddress As String
                    firstAddress = Searchedrange.Address
                    Do
                        Dim LinesToDelete As Range
                        If LinesToDelete Is Nothing Then
                            Set LinesToDelete = Searchedrange.EntireRow
                        Else
                            Set LinesToDelete = Union(LinesToDelete, Searchedrange.EntireRow)
                        End If
                        Set Searchedrange = .FindNext(Searchedrange)
                        Dim Counter As Long
                        Counter = Counter + 1
                    Loop While Not Searchedrange Is Nothing And firstAddress <> Searchedrange.Address
                End If
                If Not LinesToDelete Is Nothing Then
                    LinesToDelete.Delete
                    Set LinesToDelete = Nothing
                End If
            End With
        Next ItemSheet
        deleteDate = Counter
    End Function
    Avec la procédure de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub TestDeleteDate()
        Dim Counter As Long
        Counter = deleteDate("26-déc.")
        Select Case Counter
            Case Is = 0
                Dim Messade As String
                Message = "Aucune date n'a été trouvée !"
            Case Is = 1
                Message = "Une ligne a été supprimée !"
            Case Is > 1
                Message = Counter & " lignes ont été supprimées !"
        End Select
        MsgBox Message
    End Sub

  5. #5
    Membre averti
    Femme Profil pro
    revenue manager
    Inscrit en
    Avril 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : revenue manager

    Informations forums :
    Inscription : Avril 2023
    Messages : 15
    Par défaut
    Bonjour à tous les deux,

    Je n'en attendais pas autant, les deux fonctionnent superbement bien.
    Valtrase je pense qu'il m'aurait fallu un petit moment avant d'arriver à ta solution ! Fort heureusement il n'y avait que une fois la date par feuille.

    Merci à vous deux. Je passe ce sujet en résolu.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2016, 10h04
  2. Réponses: 7
    Dernier message: 26/10/2014, 16h47
  3. Une boucle pour supprimer des lignes ?
    Par eldoir dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/04/2012, 18h43
  4. [VBA-E]Comment faire pour écrire dans une page excel existante ?
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h54
  5. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48

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