Suppression ligne avec condition de date
Bonjour à tous,
Je tourne un peu en rond car mes connaissances sont limitées donc j'ai opté pour la demande d'aide de personnes confirmées.
Voici ce que j'essaie de faire dans ma macro :
Je traite un fichier excel avec en colonne G et à partir de la ligne 2 une suite de lignes avec des dates du style 04/04/2013, j'aimerai coller en amont de ma macro actuelle une suppression des lignes ayant pour date le mois précédent à celle du jour.
Voici ma macro à ce jour certainement pas très clean
Merci beaucoup d'avance.
Sub Cotations()
'
' Cotations Macro
'
'
Application.ScreenUpdating = False
Dim lig As Long
For lig = [G8000].End(xlUp).Row To 1 Step -1
If IsDate(Cells(lig, 1)) And Cells(lig, 1) < MOIS((AUJOURDHUI())-1;31) Then Rows(lig).Delete
Next lig
Dim myRange As Range
Dim myDate As Date
Range("G2:G8000").Select 'Je commence ici à la 2ème ligne pour eviter la cellule C1 ou il y a du texte et pas une date
For Each myRange In Selection
If myRange.Value = "" Then
Exit For
Else
myDate = myRange.Value
myRange.NumberFormat = "@"
myRange.Value = Format(myDate, "dd/mm/yyyy")
End If
Next
Columns("C:C").Select
ActiveWorkbook.Worksheets("import").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("import").Sort.SortFields.Add Key:=Range("C1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("import").Sort
.SetRange Range("A2:Q2894")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.Replace What:="N° ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="-00", Replacement:="-v", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="-0", Replacement:="-v", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("B:B").Select
Selection.Replace What:=" ", Replacement:="-", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ActiveWindow.SmallScroll ToRight:=3
Range("R2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
Range("R2").Select
Selection.AutoFill Destination:=Range("R2:R8000"), Type:=xlFillDefault
Range("R2:R8000").Select
Range("R8000").Select
ActiveWindow.ScrollRow = 2898
ActiveWindow.ScrollRow = 2893
ActiveWindow.ScrollRow = 2879
ActiveWindow.ScrollRow = 2869
ActiveWindow.ScrollRow = 2855
ActiveWindow.ScrollRow = 2830
ActiveWindow.ScrollRow = 2811
ActiveWindow.ScrollRow = 2782
ActiveWindow.ScrollRow = 2743
ActiveWindow.ScrollRow = 2671
ActiveWindow.ScrollRow = 2632
ActiveWindow.ScrollRow = 2599
ActiveWindow.ScrollRow = 2555
ActiveWindow.ScrollRow = 2517
ActiveWindow.ScrollRow = 2478
ActiveWindow.ScrollRow = 2439
ActiveWindow.ScrollRow = 2391
ActiveWindow.ScrollRow = 2352
ActiveWindow.ScrollRow = 2304
ActiveWindow.ScrollRow = 2265
ActiveWindow.ScrollRow = 2227
ActiveWindow.ScrollRow = 2179
ActiveWindow.ScrollRow = 2140
ActiveWindow.ScrollRow = 2096
ActiveWindow.ScrollRow = 2063
ActiveWindow.ScrollRow = 2014
ActiveWindow.ScrollRow = 1976
ActiveWindow.ScrollRow = 1928
ActiveWindow.ScrollRow = 1889
ActiveWindow.ScrollRow = 1850
ActiveWindow.ScrollRow = 1802
ActiveWindow.ScrollRow = 1754
ActiveWindow.ScrollRow = 1710
ActiveWindow.ScrollRow = 1662
ActiveWindow.ScrollRow = 1614
ActiveWindow.ScrollRow = 1570
ActiveWindow.ScrollRow = 1527
ActiveWindow.ScrollRow = 1488
ActiveWindow.ScrollRow = 1440
ActiveWindow.ScrollRow = 1406
ActiveWindow.ScrollRow = 1367
ActiveWindow.ScrollRow = 1334
ActiveWindow.ScrollRow = 1305
ActiveWindow.ScrollRow = 1276
ActiveWindow.ScrollRow = 1256
ActiveWindow.ScrollRow = 1242
ActiveWindow.ScrollRow = 1227
ActiveWindow.ScrollRow = 1213
ActiveWindow.ScrollRow = 1189
ActiveWindow.ScrollRow = 1179
ActiveWindow.ScrollRow = 1165
ActiveWindow.ScrollRow = 1150
ActiveWindow.ScrollRow = 1136
ActiveWindow.ScrollRow = 1121
ActiveWindow.ScrollRow = 1102
ActiveWindow.ScrollRow = 1087
ActiveWindow.ScrollRow = 1063
ActiveWindow.ScrollRow = 1049
ActiveWindow.ScrollRow = 1029
ActiveWindow.ScrollRow = 1005
ActiveWindow.ScrollRow = 981
ActiveWindow.ScrollRow = 957
ActiveWindow.ScrollRow = 928
ActiveWindow.ScrollRow = 904
ActiveWindow.ScrollRow = 875
ActiveWindow.ScrollRow = 841
ActiveWindow.ScrollRow = 807
ActiveWindow.ScrollRow = 774
ActiveWindow.ScrollRow = 740
ActiveWindow.ScrollRow = 706
ActiveWindow.ScrollRow = 672
ActiveWindow.ScrollRow = 648
ActiveWindow.ScrollRow = 614
ActiveWindow.ScrollRow = 585
ActiveWindow.ScrollRow = 551
ActiveWindow.ScrollRow = 532
ActiveWindow.ScrollRow = 513
ActiveWindow.ScrollRow = 489
ActiveWindow.ScrollRow = 474
ActiveWindow.ScrollRow = 460
ActiveWindow.ScrollRow = 445
ActiveWindow.ScrollRow = 431
ActiveWindow.ScrollRow = 416
ActiveWindow.ScrollRow = 402
ActiveWindow.ScrollRow = 392
ActiveWindow.ScrollRow = 378
ActiveWindow.ScrollRow = 358
ActiveWindow.ScrollRow = 344
ActiveWindow.ScrollRow = 329
ActiveWindow.ScrollRow = 305
ActiveWindow.ScrollRow = 291
ActiveWindow.ScrollRow = 271
ActiveWindow.ScrollRow = 252
ActiveWindow.ScrollRow = 228
ActiveWindow.ScrollRow = 204
ActiveWindow.ScrollRow = 184
ActiveWindow.ScrollRow = 160
ActiveWindow.ScrollRow = 146
ActiveWindow.ScrollRow = 127
ActiveWindow.ScrollRow = 107
ActiveWindow.ScrollRow = 88
ActiveWindow.ScrollRow = 73
ActiveWindow.ScrollRow = 59
ActiveWindow.ScrollRow = 49
ActiveWindow.ScrollRow = 35
ActiveWindow.ScrollRow = 25
ActiveWindow.ScrollRow = 11
ActiveWindow.ScrollRow = 6
ActiveWindow.ScrollRow = 1
Range("R1").Select
ActiveCell.FormulaR1C1 = "Prix Final"
Range("S1").Select
ActiveCell.FormulaR1C1 = "=RC[-16]&""-""&RC[-12]&""-""&RC[-17]"
Range("S1").Select
Selection.AutoFill Destination:=Range("S1:S8000"), Type:=xlFillDefault
Range("S1:S8000").Select
ActiveWindow.ScrollRow = 2898
ActiveWindow.ScrollRow = 2893
ActiveWindow.ScrollRow = 2884
ActiveWindow.ScrollRow = 2864
ActiveWindow.ScrollRow = 2850
ActiveWindow.ScrollRow = 2821
ActiveWindow.ScrollRow = 2797
ActiveWindow.ScrollRow = 2768
ActiveWindow.ScrollRow = 2734
ActiveWindow.ScrollRow = 2700
ActiveWindow.ScrollRow = 2661
ActiveWindow.ScrollRow = 2565
ActiveWindow.ScrollRow = 2517
ActiveWindow.ScrollRow = 2459
ActiveWindow.ScrollRow = 2338
ActiveWindow.ScrollRow = 2280
ActiveWindow.ScrollRow = 2222
ActiveWindow.ScrollRow = 2116
ActiveWindow.ScrollRow = 2063
ActiveWindow.ScrollRow = 2010
ActiveWindow.ScrollRow = 1956
ActiveWindow.ScrollRow = 1850
ActiveWindow.ScrollRow = 1792
ActiveWindow.ScrollRow = 1725
ActiveWindow.ScrollRow = 1667
ActiveWindow.ScrollRow = 1532
ActiveWindow.ScrollRow = 1474
ActiveWindow.ScrollRow = 1416
ActiveWindow.ScrollRow = 1353
ActiveWindow.ScrollRow = 1242
ActiveWindow.ScrollRow = 1189
ActiveWindow.ScrollRow = 1131
ActiveWindow.ScrollRow = 1020
ActiveWindow.ScrollRow = 971
ActiveWindow.ScrollRow = 933
ActiveWindow.ScrollRow = 865
ActiveWindow.ScrollRow = 798
ActiveWindow.ScrollRow = 759
ActiveWindow.ScrollRow = 725
ActiveWindow.ScrollRow = 691
ActiveWindow.ScrollRow = 638
ActiveWindow.ScrollRow = 619
ActiveWindow.ScrollRow = 600
ActiveWindow.ScrollRow = 576
ActiveWindow.ScrollRow = 556
ActiveWindow.ScrollRow = 542
ActiveWindow.ScrollRow = 522
ActiveWindow.ScrollRow = 508
ActiveWindow.ScrollRow = 484
ActiveWindow.ScrollRow = 465
ActiveWindow.ScrollRow = 450
ActiveWindow.ScrollRow = 436
ActiveWindow.ScrollRow = 421
ActiveWindow.ScrollRow = 407
ActiveWindow.ScrollRow = 392
ActiveWindow.ScrollRow = 382
ActiveWindow.ScrollRow = 363
ActiveWindow.ScrollRow = 349
ActiveWindow.ScrollRow = 334
ActiveWindow.ScrollRow = 320
ActiveWindow.ScrollRow = 305
ActiveWindow.ScrollRow = 291
ActiveWindow.ScrollRow = 281
ActiveWindow.ScrollRow = 271
ActiveWindow.ScrollRow = 262
ActiveWindow.ScrollRow = 247
ActiveWindow.ScrollRow = 242
ActiveWindow.ScrollRow = 238
ActiveWindow.ScrollRow = 223
ActiveWindow.ScrollRow = 218
ActiveWindow.ScrollRow = 213
ActiveWindow.ScrollRow = 209
ActiveWindow.ScrollRow = 204
ActiveWindow.ScrollRow = 199
ActiveWindow.ScrollRow = 194
ActiveWindow.ScrollRow = 189
ActiveWindow.ScrollRow = 180
ActiveWindow.ScrollRow = 175
ActiveWindow.ScrollRow = 170
ActiveWindow.ScrollRow = 160
ActiveWindow.ScrollRow = 156
ActiveWindow.ScrollRow = 146
ActiveWindow.ScrollRow = 136
ActiveWindow.ScrollRow = 131
ActiveWindow.ScrollRow = 127
ActiveWindow.ScrollRow = 112
ActiveWindow.ScrollRow = 107
ActiveWindow.ScrollRow = 98
ActiveWindow.ScrollRow = 93
ActiveWindow.ScrollRow = 78
ActiveWindow.ScrollRow = 73
ActiveWindow.ScrollRow = 69
ActiveWindow.ScrollRow = 59
ActiveWindow.ScrollRow = 49
ActiveWindow.ScrollRow = 40
ActiveWindow.ScrollRow = 35
ActiveWindow.ScrollRow = 30
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 15
ActiveWindow.ScrollRow = 11
ActiveWindow.ScrollRow = 6
ActiveWindow.ScrollRow = 1
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.Quit
End SubBonjour
En voyant ton fichier, il sera plus facile de trouver une solution à ton problème
Tu y expliques ce que tu veux faire
D'après ce que j'ai compris ce sont les dates du mois précédent à celui en cours
hdavid a écrit :l'astuce pour remplacer les activewindow.scrollrow =
Tu les supprimes c'est tout
En fait, je souhaite avec le fichier joint supprimer automatiquement les lignes dont la date de la colonne G est plus ancienne que le mois en cours donc dans le cas présent on supprime la ligne 3 etc car à la base mon fichier fait 6000 lignes puis ensuite on exécute la macro que j'ai mis plus haut.
Bonjour
Remplaces le début de ta macro
Application.ScreenUpdating = False
For lig = [G8000].End(xlUp).Row To 2 Step -1
If IsDate(Cells(lig, "G")) And Month(Cells(lig, "G")) < Month(Date) Then Rows(lig).Delete
Next ligBonjour,
Suite à test cela fonctionne presque mais ne gère pas les années. Par exemple j'ai un 15/03/2014 qui a été enlevé alors que mars est le mois précédent mais l'année suivante, il aurait donc du rester.
Quelque chose à rajouter à la ligne de code ?
Merci.
Bonsoir
Une semaine sans Excel
Espérons que cela t'aidera
Le début de ta macro
Sub Cotations()
Dim lig As Long
Application.ScreenUpdating = False
For lig = [G8000].End(xlUp).Row To 2 Step -1
If IsDate(Cells(lig, "G")) Then
If Cells(lig, "G") < DateSerial(Year(Date), Month(Date), 1) Then Rows(lig).Delete
End If
Next ligSupprimera les dates inférieures au 1er du mois en cours
Bonjour,
Impeccable merci beaucoup pour l'aide.