Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

sebamak

XLDnaute Nouveau
Bonjour le forum

Après plusieurs jours de recherche infructueuse, je me permets de revenir vers vous pour un petit problème que je n’arrive pas à résoudre.

Je souhaiterais trouver une macro qui me permette de supprimer toutes les lignes comportant une cellule avec une valeur précise et cela dans n’importe quelle colonne de cette ligne, et d’effectuer cela sur toutes les feuilles d’un classeur, et si possible, sans activer les feuilles une à une.:confused:

Scenario :

Sub ToutSupprimer ()

Recherche « valeur » dans toutes les cellules de toutes les feuilles du classeur

Puis

Supprimer toutes les lignes dans toutes les feuilles du classeur comportant cette « valeur »

End Sub

J’ai exploré la méthode « Find » mais je bloque complet

Alors si l’un de vous a la solution, je suis preneur

Merci d’avance pour vos réponses
 

flyonets44

XLDnaute Occasionnel
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Bonjour
tu peux tenter ceci
Public Sub Clearvalues()
'OBJECTIF IDENTIFIER DES LIGNES à 0 POUR LES VIDER
Dim K&, Kc&, Y&, Tmp As Object, Plage As Range
Dim Tablo() As Variant, Ctd As Collection
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'Feuil2.Activate
Y = Cells(65536, 1).End(xlUp).Row
ReDim Tablo(1 To Y, 1)
For Y = 2 To Y
Tablo(Y, 1) = Cells(Y, 3) + Cells(Y, 4) + Cells(Y, 5)
Next
For Y = 2 To UBound(Tablo)
Range("G" & Y) = Tablo(Y, 1)
Next
'Kc=La colonne à traiter
Kc = 7
Set Ctd = New Collection
Set Plage = Range(Cells(2, Kc), Cells(Y, Kc))
With Plage
For Each Tmp In Plage
If Tmp.Value = 0 Then
'stockage des numeros de lignes à 0
Ctd.Add Tmp.Row, CStr(Tmp.Row)
End If
Next
End With
If Ctd.Count = 0 Then Exit Sub
'definition de la plage des lignes à 0
For K = 1 To Ctd.Count
'Range("E" & Ctd(K)).Value = Ctd(K)
If K = 1 Then Set Plage = Rows(Ctd(K))
Set Plage = Union(Plage, Rows(Ctd(K)))
Next
'Marquage ou Raz des lignes à 0
With Plage
'.Interior.ColorIndex = 33 'AU CHOIX
.Delete 'AU CHOIX
End With
Range("g:g").ClearContents
Application.Calculation = xlCalculationAutomatic
Set Plage = Nothing: Set Ctd = Nothing
Cells(2, 3).Activate
End Sub
Cordialement
Flyonets
 

néné06

XLDnaute Accro
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Bonjour sebamak

Ton explication est très bien, mais en nous postant un fichier "même s'il plante", cela nous évitera de "réinventer la roue"
Nous ne devrons pas recréer tout un programme.

Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Bonsoir le fil, bonsoir le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim be As String 'déclare la variable be (boîte d'entrée)
Dim x As Integer 'déclare la variable x (incrément d'onglet)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim tb() As String 'déclare la variable tb (TaBleau)
Dim y As Long 'déclare la variable y (élément du tableau)
Dim vt As Range 'déclare la variable vt (Valeurs Trouvées)
 
be = InputBox("Tapez la donnée à supprimer", "SUPRRESION DE LIGNES") 'définit la boîte d'entrée
If be = "" Then Exit Sub 'si la boîte d'entrée n'est pas renseignée, sort de la procédure
 
Application.ScreenUpdating = False 'masque les changements à l'écran
For x = 1 To Sheets.Count 'boucle 1 : sur tous les onglets du classeur
    With Sheets(x) 'prend en compte l'onglet
        y = 0 'réinitialise la variable y
        pa = "" 'réinitialise la variable pa
        Set r = .Cells.Find(be, , xlValues, xlWhole) 'définit la recherche
        If Not r Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
            pa = r.Address 'définit la variable pa
            Do 'exécute
                ReDim Preserve tb(y) 'redimensionne le tableau tb
                tb(y) = r.Row 'attribue une valeur à la variable indéxée tb(y) (le numéro de ligne)
                y = y + 1 'incrémente y de +1
                Set r = .Cells.FindNext(r) 'reféfinit la recherche r (Prochaine occurrence)
            'boucle tant qu'il existe des occurrences ailleurs qu'en pa
            Loop While Not r Is Nothing And r.Address <> pa
        End If 'fin de la condition
        Set vt = .Rows(tb(0)) 'définit la variable vt
        For y = 1 To UBound(tb, 1) 'boucle 2 : sur tous les éléments du tableau tb (en partant du second
            Set vt = Application.Union(vt, .Rows(tb(y))) 'redéfinit la variable vt
        Next y 'prochain élément du tableau de la boucle 2
        vt.Delete 'supprime les lignes contenant be
    End With 'fin de la prise en compte de l'onglet
Next x 'prochain onglet de la boucle 1
Application.ScreenUpdating = True 'Affiche les changements à l'écran
End Sub

[Éditiion]
je précise toutefois que la remarque de Néné est tout a fait fondée et qu'un petit effort de la part des demandeurs serait parfois souhaitable...
 
Dernière édition:

sebamak

XLDnaute Nouveau
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Euh…En premier lieu je tiens à présenter mes excuses,
J’avoue ne pas avoir mis de fichier, car m’étant acharné dessus, il était rempli dans tout les sens, et j’ai un peu écrit ma demande à bout de nerf et après avoir tout fermé en espérant avoir une réponse qui tiendrait en quelques lignes…
Pour mes éventuelles prochaines demandes, je ferais de mon mieux, pour fournir un fichier…
En attendant, je vous remercie tous encore une fois d’avoir pris le temps de répondre…
Et un grand merci à Robert (que je sens avoir un tantinet énervé, sorry !) mais ton code à l’air de correspondre à ce que je cherche, même si je ne peux pas l’affirmé tout de suite car étant encore débutant en VBA, il va me falloir un peut de temps pour l’étudié.
Et pour ce qui est de l’étudier, là encore, un grand merci à toi, d’avoir en plus pris la peine de commenter toutes les lignes de codes ce qui va grandement me facilité la tâche.

En espérant pouvoir faire un jour de même pour quelqu’un d’autre, encore merci à vous.

Cordialement
Sebamak
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Bonjour le fil, bonjour le forum,

Le même code mais qui ne plante pas si la donnée recherchée n'existe pas... La partie du code qui efface est dans la condition et plus en dehors.
Code:
Sub Macro1()
Dim be As String 'déclare la variable be (boîte d'entrée)
Dim x As Integer 'déclare la variable x (incrément d'onglet)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim tb() As String 'déclare la variable tb (TaBleau)
Dim y As Long 'déclare la variable y (élément du tableau)
Dim vt As Range 'déclare la variable vt (Valeurs Trouvées)
 
be = InputBox("Tapez la donnée à supprimer", "SUPRRESION DE LIGNES") 'définit la boîte d'entrée
If be = "" Then Exit Sub 'si la boîte d'entrée n'est pas renseignée, sort de la procédure
 
Application.ScreenUpdating = False 'masque les changements à l'écran
For x = 1 To Sheets.Count 'boucle 1 : sur tous les onglets du classeur
    With Sheets(x) 'prend en compte l'onglet
        y = 0 'réinitialise la variable y
        pa = "" 'réinitialise la variable pa
        Set r = .Cells.Find(be, , xlValues, xlWhole) 'définit la recherche
        If Not r Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
            pa = r.Address 'définit la variable pa
            Do 'exécute
                ReDim Preserve tb(y) 'redimensionne le tableau tb
                tb(y) = r.Row 'attribue une valeur à la variable indéxée tb(y) (le numéro de ligne)
                y = y + 1 'incrémente y de +1
                Set r = .Cells.FindNext(r) 'reféfinit la recherche r (Prochaine occurrence)
            'boucle tant qu'il existe des occurrences ailleurs qu'en pa
            Loop While Not r Is Nothing And r.Address <> pa
            Set vt = .Rows(tb(0)) 'définit la variable vt
            For y = 1 To UBound(tb, 1) 'boucle 2 : sur tous les éléments du tableau tb (en partant du second
                Set vt = Application.Union(vt, .Rows(tb(y))) 'redéfinit la variable vt
            Next y 'prochain élément du tableau de la boucle 2
            vt.Delete 'supprime les lignes contenant be
        End If 'fin de la condition
    End With 'fin de la prise en compte de l'onglet
Next x 'prochain onglet de la boucle 1
Application.ScreenUpdating = True 'Affiche les changements à l'écran
End Sub
 

sachasse

XLDnaute Nouveau
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Bonjour,

J'aimerais supprimer et faire "monter" un case si la valeur dans celle ci est 0. Cela je pense m'évitera la feuille "tournament" dans le fichier quest tennis...

J'essaye de créer un tournois de tennis basé sur des matches doubles joueurs qui ne doivent jamais rejouer ensemble ni en adversaire, ni en partenaire.

merci d avance

sacha
 

Pièces jointes

  • tennis ligne.xlsx
    10.1 KB · Affichages: 92
  • quest tennis.xlsx
    171.1 KB · Affichages: 149
  • quest tennis.xlsx
    171.1 KB · Affichages: 153
  • quest tennis.xlsx
    171.1 KB · Affichages: 156

ketinu

XLDnaute Nouveau
Re : Supprimer lignes avec cellule = « valeur » dans toutes feuilles du classeur

Merci Robert pour ce programme :)

edit :

J'ai besoin de votre aide !
J'aimerais juste adapté le programme à un cas :

Il faut uniquement supprimer les valeurs de la feuille("base_de_donnees") SI et seulement SI la valeur de la case dans la colonne avant soit égale à la valeur du combobox.

Ca donnerait un code dans ce genre là mais une erreur se produit ...
Code:
 If  vt = ComboBox1.Value Then vt.Delete  'supprime les lignes contenant be

Une petite idée ???

Merci
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote