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- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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.DeleteLa 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 SubCa ne fonctionne tjs pas, rien ne se passe à ce niveau;(
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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.