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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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.
 
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
@+
 
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.
 
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:
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.
 
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:
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:
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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
733
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
244
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
498
Retour