XL 2019 VBA - Suppression ligne Samedi et Dimanche

Rithy44

XLDnaute Nouveau
Bonjour,

Dans mon fichier excel figure dans la colonne B des dates sous le format jj/mm/aaaa. La première date figurant précisément en B5.
Je n'arrive pas à formuler une macro qui pourrait me permettre de complétement supprimer les lignes contenant les samedis et dimanches.

Je vous remercie par avance
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Rithy, et bienvenu sur XLD,
Un essai en PJ avec :
VB:
Sub SupSamDim()
    Dim L%, DL%
    Application.ScreenUpdating = False
    DL = Range("B65500").End(xlUp).Row
    For L = DL To 5 Step -1
        ' Weekday=7 samedi, =1 Dimanche
        If Weekday(Cells(L, "B")) = 1 Or Weekday(Cells(L, "B")) = 7 Then
            Cells(L, "B").EntireRow.Delete
        End If
    Next L
    Application.ScreenUpdating = True
End Sub
essayez toujours de fournir un petit fichier test représentatif, cela permet de gagner du temps et de faire une réponse plus circonstanciée.:)
 

Pièces jointes

  • SuppWE.xlsm
    17.8 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick,

Le param firstdayofweek est optionnel, on peut l'ignorer :
irstdayofweekFacultatif. Constante indiquant le premier jour de la semaine. Si aucune valeur n’est spécifiée, la valeur vbSunday (dimanche) est supposée.

Ceci étant dit, il eût été plus futé d'utiliser ce param avec 2 comme valeur, de cette façon Samedi=6 Dimanche=7 et on peut optimiser :
Code:
Sub SupSamDim()
    Dim L%
    Application.ScreenUpdating = False
    For L = (Range("B65500").End(xlUp).Row) To 5 Step -1
        ' Avec param=2,  Samedi=6, Dimanche=7
        If Weekday(Cells(L, "B"), 2) > 5 Then Cells(L, "B").EntireRow.Delete
    Next L
    Application.ScreenUpdating = True
End Sub
On n'a plus qu'un Weekday à évaluer. ;)
 

Pièces jointes

  • SuppWE2.xlsm
    16.9 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Pour moi, ce n'est qu'arbitraire. On choisit quel jour de la semaine doit être le premier.
Et comme on ne fait qu'une comparaison, ça n'a guère d'importance.
Ce qui est plus amusant, c'est qu'une optimisation en ignorant un paramètre optionnel conduit à une complexification de l'écriture et une augmentation du temps de calcul.
Comme quoi les optimisations ne sont pas toujours là où on les attend :
VB:
If Weekday(Cells(L, "B")) = 1 Or Weekday(Cells(L, "B")) = 7 Then
If Weekday(Cells(L, "B"), 2) > 5 Then
😂
 

patricktoulon

XLDnaute Barbatruc
re
et oui tu en donne l'exemple avec le test >
en mode us (sans argument) ça ne marcherait pas ;)

perso je préfère utiliser vbusesystemdayofweek (0)qui rend automatique la reconnaissance du xldateorder du system dans le quel tourne la macro
VB:
MsgBox Weekday(Date, 0)
 

Discussions similaires

Réponses
1
Affichages
893

Statistiques des forums

Discussions
311 720
Messages
2 081 912
Membres
101 837
dernier inscrit
Ugo