XL 2019 VBA - Suppression ligne Samedi et Dimanche

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 !

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
 
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

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

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
😂
 
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)
 
- 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
8
Affichages
581
Retour