[RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

cathodique

XLDnaute Barbatruc
Bonjour,

Je voudrai supprimer des lignes pour certaines dates en colonne C. J'ai mis ces dates dans un variable tableau, mais je n'obtiens pas le résultat escompté (suppression des lignes).
VB:
Sub Supprimer_Lignes_Date()
    Dim Code(), i As Integer, j As Integer, dl As Integer
    
    'Alimente les éléments du tableau code
    Code = Array("20/02/2012", "18/12/1995", "15/06/2005", "01/05/2014", "25/02/2006") 'Array("CMDP", "CSt")
    
    'Boucle sur les éléments
    With Sheets("bd")
        dl = .Range("A" & Rows.Count).End(xlUp).Row
        For i = LBound(Code) To UBound(Code)

            For j = 2 To dl
                If CDate(.Range("C" & j)) = Code(i) Then .Rows(j).Delete
            Next j
        Next i
    End With
End Sub
En vous remerciant par avance.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Mettre des dates dans Array pour boucler colonne comportant des dates

Bonjour.
Vos cellules contiennent déjà des dates si je comprends bien, CDate est donc inutile. En revanche votre Code() contient des String. Il faut donc CDate dessus. Par ailleurs vous aurez d'autres problèmes: bouclez d'abord sur For j = dl To 2 Step -1, et ensuite seulement sur For i = LBound(Code) To UBound(Code). Faites Exit For après le Delete.
 

Pierrot93

XLDnaute Barbatruc
Re : Mettre des dates dans Array pour boucler colonne comportant des dates

Bonjour,

peut être comme ceci :
Code:
Sub Supprimer_Lignes_Date()
Dim Code(), j As Long
    Code = Array("20/02/2012", "18/12/1995", "15/06/2005", "01/05/2014", "25/02/2006") 'Array("CMDP", "CSt")
    For j = Range("C" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Not IsError(Application.Match(Cells(j, 3).Text, Code, 0)) Then Rows(j).Delete
    Next j
End Sub

bon après midi
@+
 

cathodique

XLDnaute Barbatruc
Re : Mettre des dates dans Array pour boucler colonne comportant des dates

Merci à vous. Le code de Pierrot93 est impeccable.

En effet, la colonne C contient de dates. Merci pour tes conseils Dranreb.

Je voudrai vous poser encore une question. Je voulais personnaliser mes messages, le petit truc que vous avez rajouté au bas de votre réponse. On m'avait dit qu'il fallait rajouter une signature à partir de mon tableau de bord. Mais je n'ai pas trouvé la signature.

Comment faire? Merci.
 

cathodique

XLDnaute Barbatruc
Re : Mettre des dates dans Array pour boucler colonne comportant des dates

mes paramètres.JPGMerci Pierrot mais je n'ai pas dans mes paramètres ==> modifier votre signature.
 

job75

XLDnaute Barbatruc
Re : [RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

Bonjour cathodique, Bernard, Pierrot,

Plutôt que supprimer il vaut peut-être mieux masquer les lignes :

Code:
Sub Masquer_Lignes_Date()
Dim dat$
dat = "20/02/2012 18/12/1995 15/06/2005 01/05/2014 25/02/2006"
With Sheets("bd").[A1].CurrentRegion
  .Cells(2, .Columns.Count + 1) = "=ISERR(FIND(TEXT(C2,""jj/mm/aaaa""),""" & dat & """))"
  .AdvancedFilter xlFilterInPlace, .Cells(1, .Columns.Count + 1).Resize(2)
  .Cells(2, .Columns.Count + 1) = ""
End With
End Sub
Sur version anglaise utiliser :

Code:
Sub Masquer_Lignes_Date()
Dim dat$
dat = "20/02/2012 18/12/1995 15/06/2005 01/05/2014 25/02/2006"
With Sheets("bd").[A1].CurrentRegion
  .Cells(2, .Columns.Count + 1) = "=ISERR(FIND(TEXT(C2,""dd/mm/yyyy""),""" & dat & """))"
  .AdvancedFilter xlFilterInPlace, .Cells(1, .Columns.Count + 1).Resize(2)
  .Cells(2, .Columns.Count + 1) = ""
End With
End Sub
A+
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

Merci beaucoup Job75,

En effet, ta suggestion de masquer est une bonne idée que je garde pour un autre fichier.

J'ai voulu supprimer pour alléger un fichier, afin que je puisse le joindre à une discussion que j'envisage d'ouvrir.

Je commence à comprendre l'utilisation des tableaux mais pas assez pour arriver au résultat escompté.

Merci encore et à une prochaine discussion.

Bonne soirée à tous.
 

job75

XLDnaute Barbatruc
Re : [RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

Re,

S'il s'agit d'alléger un fichier c'est qu'il y a beaucoup de lignes à supprimer.

Les supprimer une par une prendra du temps, ceci sera beaucoup plus rapide :

Code:
Sub Supprimer_Lignes_Date()
Dim P As Range, dat$
dat = "20/02/2012 18/12/1995 15/06/2005 01/05/2014 25/02/2006"
Set P = Sheets("bd").[A1].CurrentRegion
Application.ScreenUpdating = False
With P.Columns(P.Columns.Count + 1)
  .FormulaR1C1 = "=FIND(TEXT(RC3,""jj/mm/aaaa""),""" & dat & """)"
  .Value = .Value 'supprime les formules
  P.Resize(, P.Columns.Count + 1).Sort .Cells, xlDescending 'tri pour accélérer
  On Error Resume Next
  .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
  .ClearContents
End With
End Sub
Bonne soirée.
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

Bonsoir,

Je te remercie beaucoup pour ton dernier code.

En effet, le fichier que je veux alléger comporte environ 30 000 lignes.

J'ai aussi d'autres fichiers Archive qui ont près de 800 milles lignes. Je sais que ton code fera l'affaire avec un peu plus de temps.

Je sais qu'avec des variables tableau c'est beaucoup plus rapide. Mais je suis au stade de l'initiation avec ce genre de variable.

Je vais le mettre en lieu sûr. Il me resservira, j'en suis certain.

Bonne soirée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : [RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

Bonjour cathodique, le forum,

Je sais qu'avec des variables tableau c'est beaucoup plus rapide.

Non, pas toujours... Voici la macro dans ce cas :

Code:
Sub Supprimer_Lignes_Date1()
Dim dat$, f$, t, ncol%, rest(), i&, n&, j%
dat = "20/02/2012 18/12/1995 15/06/2005 01/05/2014 25/02/2006"
f = "dd/mm/yyyy"
With Sheets("bd").[A1].CurrentRegion
  t = .Value
  ncol = UBound(t, 2)
  ReDim rest(1 To UBound(t), 1 To ncol)
  For i = 2 To UBound(t)
    If InStr(dat, Format(t(i, 3), f)) = 0 Then
      n = n + 1
      For j = 1 To ncol
        rest(n, j) = t(i, j)
      Next
    End If
  Next
  .Offset(1) = rest
End With
End Sub
Sur Win 8 Excel 2013 j'ai testé un tableau de 30000 lignes x 15 colonnes avec une ligne sur 2 supprimée.

Cette dernière macro s'exécute en 1,86 s, celle du post #11 en 0,84 s et celle du post #9 en 0,56 seconde.

Bonne journée.
 

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Mettre des dates dans Array pour boucler colonne comportant des dates

Bonjour Job75,

Je te suis reconnaissant pour ton dernier code avec tableaux.

Je te crois sur parole quant à la rapidité d’exécution des différents codes.

Je vais testé sur ma machine win7_excel2007. Mais ça va surtout me permettre d'apprendre un peu plus sur les tableaux.

Encore merci et bonne journée.
 

Discussions similaires

Réponses
2
Affichages
346

Membres actuellement en ligne

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal