Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro pour détecter journée manquante

anasimo

XLDnaute Occasionnel
Bonjour

je cherche 1 macro pour me détecter une journée manquante (journée non saisie par omission)... bien sur sauf samedi et dimanche (journée non comptabilisée) . la date de la journée se trouve dans la colonne B

je vous met en PJ à quoi ressemble le fichier (par confidentialité, j'ai supprimé les autres colonnes et le contenu de autres cellules)...la date de la journée se trouve dans la colonne B de la feuille "Compta".

Un msgbox m’indiquant s'il y a une journée manquante ou à vous d'imaginer ...ou peut être un msgbox m'indiquant nbr de journées matérialisées....etc

Il s'agit de noter que je dois chaque mois faire cette vérif

Merci de votre aide.
 

Pièces jointes

  • journée.xlsx
    25.7 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
bonjour
dans le debug tu a la liste des jours manquants
VB:
Sub test()
   Dim c As Range, plage As Range
    firstdate = CDate("31/12/" & Year(Date) - 1)
    Set plage = Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row)
    For j = 1 To 360
        Set c = plage.Find(CDate(firstdate + j), LookIn:=xlValues)
        If c Is Nothing Then Debug.Print CDate(firstdate + j)
    Next
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Pas la classe de Patrick mais une autre approche :

VB:
Sub Macro1()
Dim OC As Worksheet 'déclare la variable OC (Onglet Compta)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim MSG As String 'déclare la variable MSG (MeSsaGe)
Dim JS As String 'déclare la variable JS (Jour de la Semaine)

Set OC = Worksheets("compta") 'définit l'onglet OC
TV = OC.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les ligne I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 2)) = "" 'alimente le dictionaire D avec les données en colonne 2
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For I = 0 To UBound(TMP) - 1 'boucle sur tous les élément du tabeau temporaire TMP (sauf le dernier)
    If TMP(I + 1) <> TMP(I) + 1 Then 'condition : si l'élément suivant est différent de l'élément de la boucle plus un jour
         If Weekday(TMP(I), vbMonday) <> 5 Then 'condition 2: si le jour de la semaine n'est pas un vendredi
            'définit le jour de la semaine JS
            JS = Choose(Weekday(TMP(I), vbMonday), "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
            'définit le message MSG
            MSG = MSG & JS & " " & TMP(I) + 1 & Chr(13)
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
MsgBox "Manque le :" & Chr(13) & MSG 'message
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
je viens de retester avec ma macro
j'ai enlevé les weekend
VB:
Sub test()
   Dim c As Range, plage As Range
    firstdate = CDate("31/12/" & Year(Date) - 1)
    Set plage = Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row)
    For j = 1 To 360
        Set c = plage.Find(CDate(firstdate + j), LookIn:=xlValues)
         If c Is Nothing Then If Weekday(firstdate + j, vbUseSystemDayOfWeek) < 6 Then Debug.Print "Manquants!!: " & CDate(firstdate + j) & Format(CDate(firstdate + j), " dddd dd mm yyyy")
       Next
End Sub


j'obtiens cette liste dans le debug et après examen c'est exact !!
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…