Supprimer ligne contenant variable string

Bonjour à tous,

petit problème pour supprimer des lignes contenant plusieurs choses "Amundi Actions PME",...

Pourriez vous m'aider:) le code pour supprimer les lignes ci-dessous ne fait rien.

merci à tous

Sub cop()

Dim R, F As Range

Dim fin, ligne As Long

Dim cellule As Variant

Dim P As Variant

Dim Var1 As Variant

Dim Var2 As Variant

Dim lign1 As Variant

Dim lign2 As Variant

ligne = 5

c = Range("A:A")

With ThisWorkbook

Sheets("MVTS").Select

Sheets("MVTS").Activate

Worksheets("MVTS").Range("A5:A100").ClearContents 'Delete Shift:=xlUp

For Each R In .Sheets("Mvts_data").Range("A:A")

' Recherche d'au mons un doublon

Set F = .Sheets("MVTS").Range("A:A").Find(R.Value)

If Not F Is Nothing Then

' Doublon trouvé, on passe à la ligne suivante de la feuille de PRestations

GoTo FinBoucle

Else

' Doublon non trouvé, on copie l'élément en cours

.Sheets("MVTS").Range("A" & ligne).Value = R.Value

If ligne < 100 Then ligne = ligne + 1

End If

FinBoucle:

Next

End With

Sheets("MVTS").Select

Sheets("MVTS").Activate

For Each cellule In Range("A6:A100")

If c = "AMUNDI ACTIONS PME" Or c = "AMUNDI EUROPE MICROCAPS" Or c = "AMUNDI FDS EQ EUROLAND SMALL CAP" Or c = "AMUNDI FDS EQ EUROPE SMALL CAP" Or c = "AMUNDI TRANSM PATRIM - POCHE SMALL CAPS" Or c = "AMUNDI TRANSMISSION ACT - POCHE PME/PEA" Or c = "GRD 12 ACTIONS" Or c = "OSOOL EUROPE SMALL CAPS" Or c = "SG ACTIONS EUROPE MIDCAP" Or c = "SOGECAP ACTIONS MID CAP" Or c = "SOGECAP ACTIONS SMALL CAP" Then Row.Delete

Next

bonjour

une proposition de correction

Sub cop()
Dim R, F As Range
Dim fin, ligne As Long
Dim cellule As Variant
Dim P As Variant
Dim Var1 As Variant
Dim Var2 As Variant
Dim lign1 As Variant
Dim lign2 As Variant
ligne = 5
c = Range("A:A")
With ThisWorkbook
 .Worksheets("MVTS").Range("A5:A100").ClearContents 'Delete Shift:=xlUp
 For Each R In .Sheets("Mvts_data").Range("A:A")
' Recherche d'au mons un doublon
  Set F = .Sheets("MVTS").Range("A:A").Find(R.Value)
  If Not F Is Nothing Then
  ' Doublon trouvé, on passe à la ligne suivante de la feuille de PRestations
  Else
  ' Doublon non trouvé, on copie l'élément en cours
   .Sheets("MVTS").Range("A" & ligne).Value = R.Value
   If ligne < 100 Then ligne = ligne + 1
  End If
 Next
 For Each c In .Sheets("MVTS").Range("A6:A100")
  If c = "AMUNDI ACTIONS PME" Or c = "AMUNDI EUROPE MICROCAPS" Or c = "AMUNDI FDS EQ EUROLAND SMALL CAP" Or c = "AMUNDI FDS EQ EUROPE SMALL CAP" Or c = "AMUNDI TRANSM PATRIM - POCHE SMALL CAPS" Or c = "AMUNDI TRANSMISSION ACT - POCHE PME/PEA" Or c = "GRD 12 ACTIONS" Or c = "OSOOL EUROPE SMALL CAPS" Or c = "SG ACTIONS EUROPE MIDCAP" Or c = "SOGECAP ACTIONS MID CAP" Or c = "SOGECAP ACTIONS SMALL CAP" Then Row.Delete
 Next
End With
End Sub

Bonjour,

Vous ne pouvez pas supprimer des lignes de cette manière car la variable cellule ("c") est faussée dès que vous supprimez la première ligne. De plus l'instruction est fausse, il aurait fallu écrire : "c.entirerow.delete" .

La seule façon de faire est de stocker les lignes à supprimer et ensuite de les supprimer globalement. Comme ceci :

    For Each cellule In Range("A6:A100")
        If c = "AMUNDI ACTIONS PME" Or c = "AMUNDI EUROPE MICROCAPS" Or c = "AMUNDI FDS EQ EUROLAND SMALL CAP" Or c = "AMUNDI FDS EQ EUROPE SMALL CAP" Or c = "AMUNDI TRANSM PATRIM - POCHE SMALL CAPS" Or c = "AMUNDI TRANSMISSION ACT - POCHE PME/PEA" Or c = "GRD 12 ACTIONS" Or c = "OSOOL EUROPE SMALL CAPS" Or c = "SG ACTIONS EUROPE MIDCAP" Or c = "SOGECAP ACTIONS MID CAP" Or c = "SOGECAP ACTIONS SMALL CAP" Then
            If lignes_à_supprimer Is Nothing Then Set lignes_à_supprimer = c.EntireRow _
            Else Set lignes_à_supprimer = Union(lignes_à_supprimer, c.EntireRow)
        Next
        lignes_à_supprimer.Delete

La deuxième solution est d'une d'utiliser une variable ligne avec une boucle décrémentante (for i = 100 to 6 step -1) pour aller de la ligne 100 à la ligne 6.

effectivement Thev

je n'avais pas regardé plus loin que l'utilisation de cellule d'un coté et c de l'autre.

Merci à vous deux, je viens de changer mon code sur tes conseils mais cela ne fonctionne tjs pas, je dois avoir une erreur dans le code mais comme VBA ne me renvoie aucune erreur, je ne vois pas d'où cela vient. un remède?

Merci:)

Et merci pour les explications.

Sub cop()

Dim R, F As Range

Dim fin, ligne As Long

Dim cellule As Variant

Dim c As Variant

Dim P As Variant

Dim Var1 As Variant

Dim Var2 As Variant

Dim lign1 As Variant

Dim lign2 As Variant

ligne = 5

With ThisWorkbook

.Worksheets("MVTS").Range("A5:A100").ClearContents 'Delete Shift:=xlUp

For Each R In .Sheets("Mvts_data").Range("A:A")

' Recherche d'au mons un doublon

Set F = .Sheets("MVTS").Range("A:A").Find(R.Value)

If Not F Is Nothing Then

' Doublon trouvé, on passe à la ligne suivante de la feuille de PRestations

Else

' Doublon non trouvé, on copie l'élément en cours

.Sheets("MVTS").Range("A" & ligne).Value = R.Value

If ligne < 100 Then ligne = ligne + 1

End If

Next

For Each cellule In Range("A6:A100")

If c = "AMUNDI ACTIONS PME" Or c = "AMUNDI EUROPE MICROCAPS" Or c = "AMUNDI FDS EQ EUROLAND SMALL CAP" Or c = "AMUNDI FDS EQ EUROPE SMALL CAP" Or c = "AMUNDI TRANSM PATRIM - POCHE SMALL CAPS" Or c = "AMUNDI TRANSMISSION ACT - POCHE PME/PEA" Or c = "GRD 12 ACTIONS" Or c = "OSOOL EUROPE SMALL CAPS" Or c = "SG ACTIONS EUROPE MIDCAP" Or c = "SOGECAP ACTIONS MID CAP" Or c = "SOGECAP ACTIONS SMALL CAP" Then

If lignes_à_supprimer Is Nothing Then Set lignes_à_supprimer = c.EntireRow _

Else: Set lignes_à_supprimer = Union(lignes_à_supprimer, c.EntireRow)

lignes_à_supprimer.Delete

End If

Next

End With

End Sub

Bonjour,

quand tu postes du code sur le forum mets le entre les balise

remplace l'instruction

For Each cellule In Range("A6:A100")

par

For Each c In Range("A6:A100")
For Each c In Range("A6:A100")
 If c = "AMUNDI ACTIONS PME" Or c = "AMUNDI EUROPE MICROCAPS" Or c = "AMUNDI FDS EQ EUROLAND SMALL CAP" Or c = "AMUNDI FDS EQ EUROPE SMALL CAP" Or c = "AMUNDI TRANSM PATRIM - POCHE SMALL CAPS" Or c = "AMUNDI TRANSMISSION ACT - POCHE PME/PEA" Or c = "GRD 12 ACTIONS" Or c = "OSOOL EUROPE SMALL CAPS" Or c = "SG ACTIONS EUROPE MIDCAP" Or c = "SOGECAP ACTIONS MID CAP" Or c = "SOGECAP ACTIONS SMALL CAP" Then
 If lignes_à_supprimer Is Nothing Then Set lignes_à_supprimer = c.EntireRow _
 Else: Set lignes_à_supprimer = Union(lignes_à_supprimer, c.EntireRow)
 lignes_à_supprimer.Delete
 End If
 Next
 End With
End Sub

Ca ne fonctionne tjs pas, rien ne se passe à ce niveau;(

Bonjour,

La ligne globale de suppression est mal placée, elle doit être placée après l'instruction next. Il ne doit pas y avoir ":" derrière le "else" du fait du caractère de continuation "_".

Par ailleurs, il serait bon d'indenter ton code comme te l'as recommandé H2So4.

    For Each c In Range("A6:A100")
        If c = "AMUNDI ACTIONS PME" Or c = "AMUNDI EUROPE MICROCAPS" Or c = "AMUNDI FDS EQ EUROLAND SMALL CAP" Or c = "AMUNDI FDS EQ EUROPE SMALL CAP" Or c = "AMUNDI TRANSM PATRIM - POCHE SMALL CAPS" Or c = "AMUNDI TRANSMISSION ACT - POCHE PME/PEA" Or c = "GRD 12 ACTIONS" Or c = "OSOOL EUROPE SMALL CAPS" Or c = "SG ACTIONS EUROPE MIDCAP" Or c = "SOGECAP ACTIONS MID CAP" Or c = "SOGECAP ACTIONS SMALL CAP" Then
            If lignes_à_supprimer Is Nothing Then Set lignes_à_supprimer = c.EntireRow _
            Else Set lignes_à_supprimer = Union(lignes_à_supprimer, c.EntireRow)
        End If
    Next
    lignes_à_supprimer.Delete
End With
 

Toujours rien de nouveau, c'est vraiment étrange

Bonjour,

Il se peut que tes comparaisons ne soient pas pertinentes du fait d'un espace avant ou après le libellé. Au niveau comparaison, essayer plutôt :

If c like "*AMUNDI ACTIONS PME*" Or ......

De toute façon, le plus simple est d'insérer une instruction "STOP" provisoire juste après le If pour savoir si une des conditions est bien remplie.

Rechercher des sujets similaires à "supprimer ligne contenant variable string"