Suppression de ligne variable VBA

Bonjour,

J'ai fait un code me permettant de supprimer des lignes en fonction d'une variable

en revanche je ne comprends pas pourquoi le code ne fonctionne pas lorsque vba arrive sur la partie où il faut selectionner la ligne...

Si vous pouvez m'aider la dessus j'en serais ravi!

Sub SupLig()

Application.ScreenUpdating = False

Worksheets("Data2").Visible = True

ThisWorkbook.Worksheets("Data2").Select

y = 2   'y est la ligne à analyser

'=====on supprime les lignes ne correspondant pas au ticker désiré=========

'verif vide?
Do While IsEmpty(Cells(y, 3).Value) = True

    'on verifie l'acces aux donnees et si pas bon on sort
    If ThisWorkbook.Worksheets("cover").Range("G6").Value = "Getting data..." Then
        MsgBox "Datas not available yet, wait for it then click on <kebab> button"
        Exit Do

     Else

    End If

    'verif si différent et suppr lignes
    If Cells(y, 3) <> Worksheets("Cover").Range("f3").Value Then
        Cells(y, 3).Select
            Selection.End(xlToLeft).Select
            Range(Selection, Selection.End(xlToRight)).Select
            Selection.ClearContents
            Rows("y:y").Select
            Selection.Delete Shift:=xlUp
        Else: y = y + 1
        End If

     'verif ticker pareil
     If Cells(y, 3) = Worksheets("Cover").Range("f3").Value Then
     y = y + 1
     End If

Loop

'========fin suppression=========

Worksheets("Data2").Visible = False

Application.ScreenUpdating = True

End Sub

Bonsoir,

Supprimer une ligne avec une boucle de progression à la ligne suivante provoque des erreurs car la suppression de la ligne entraîne la remontée d'une ligne. Il faut soit une boucle de progression inverse, soit stocker les lignes à supprimer et ensuite les supprimer globalement. Par ailleurs, je ne vois pas à quoi servent tous ces Select puisque la ligne est supprimée .

Je te propose ce code :

        If Cells(y, 3) <> Worksheets("Cover").Range("f3").Value Then
            If lignes_à_supprimer Is Nothing Then Set lignes_à_supprimer = Rows(y) _
            Else Set lignes_à_supprimer = Union(Rows(y), lignes_à_supprimer)
        Else
            y = y + 1
        End If

et après la boucle, insérer l'instruction de suppression globale

        Loop

        '========fin suppression=========
        lignes_à_supprimer.Delete

Tres bien merci, je vois ce que vous voulez dire!

Cependant le code ne fonctionne pas, il me dit Object required et me met en mode debug sur la derniere ligne, celle après loop...

merci encore pour l'aide

il manque juste la définition de la variable objet (à insérer dans votre code avant l'utilisation de la variable, en général au tout début du code, après l'instruction Sub).

Dim lignes_à_supprimer  As Range

merci encore :

Voici le code modifié qui ne fonctionne toujours pas ca me rend fou

Sub suplig()

Dim sup As Range
Dim lig As Variant
Set lig = 2

tkr = ActiveWorkbook.Worksheets("COVER").Range("F3").Value
tlist = ActiveWorkbook.Worksheets("DATA").Cells(lig, 3).Value

lig = 2

Do While tlist <> ""

    If tlist <> tkr Then
        If sup Is Nothing Then
        Set sup = Rows(lig)
        Else: sup = Union(Rows(lig), sup)
        End If

    Else: lig = lig + 1
    End If

Loop

sup.Delete

End Sub

Vos If ne sont pas programmés correctement, les ":" d'instruction suivante sont à enlever derrière vos Else.

il manque l'actualisation de Tlist.

essayer ce code (non testé)

Sub suplig()

    Dim sup As Range
    Dim lig As Single

    tkr = ActiveWorkbook.Sheets("COVER").Range("F3").Value
    lig = 2
    tlist = ActiveWorkbook.Sheets("DATA").Cells(lig, 3).Value
    Do While tlist <> ""
        If tlist <> tkr Then
            If sup Is Nothing Then Set sup = Rows(lig) _
            Else sup = Union(Rows(lig), sup)
        End If

        lig = lig + 1
        tlist = ActiveWorkbook.Sheets("DATA").Cells(lig, 3).Value
    Loop

    sup.Delete

End Sub

GENIAL on tient le bon bout merci!

Cependant cela supprime une ligne puis le code tombe sur une case blanche ( puisque ligne supprimée ), et de ce fait la boucle se termine.

Dois-je ajouter une ligne lig=lig+1 ?

merci encore je debute en vba je n'ai pas tous les automatismes

Cependant cela supprime une ligne puis le code tombe sur une case blanche ( puisque ligne supprimée

Les lignes ne sont supprimées qu'après la fin de la boucle. Vous avez apparemment des lignes blanches dans la plage utilisée.

Pour parcourir toute la plage utilisée de feuille "DATA" , utiliser ce code :

Sub suplig()

    Dim sup As Range
    Dim lig As Single, lig_max As Single

    With ActiveWorkbook
        tkr = .Sheets("COVER").Range("F3").Value
        lig_max = .Sheets("DATA").UsedRange.Rows.Count
        For lig = 2 To lig_max
            tlist = .Sheets("DATA").Cells(lig, "C").Value
            If tlist <> tkr Then
                If sup Is Nothing Then Set sup = Rows(lig) _
                Else sup = Union(Rows(lig), sup)
            End If
        Next lig
    End With

    sup.Delete

End Sub

Ca fonctionne encore moins bien j'ai l'impression

117book1.xlsm (165.33 Ko)

regardez, j'ai fait plusieurs bouton qui sont chacun d'entre eux liés à un module et la macro "non" est le dernier essai

Merci de persister vous etes super

il manque l'instruction "set" à cette ligne car il s'agit d'une variable objet.

Else set sup = Union(Rows(lig), sup)
Sub suplig()

    Dim sup As Range
    Dim lig As Single, lig_max As Single

    With ActiveWorkbook
        tkr = .Sheets("COVER").Range("F3").Value
        lig_max = .Sheets("DATA").UsedRange.Rows.Count
        For lig = 2 To lig_max
            tlist = .Sheets("DATA").Cells(lig, "C").Value
            If tlist <> tkr Then
                If sup Is Nothing Then Set sup = Rows(lig) _
                Else Set sup = Union(Rows(lig), sup)
            End If
        Next lig
    End With

    sup.Delete

End Sub

PARFAIT!

Merci énormément pour tout ça!!!!

Rechercher des sujets similaires à "suppression ligne variable vba"