XL 2013 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.
 

Fichiers joints

patricktoulon

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

anasimo

XLDnaute Occasionnel
Ah parfait Robert ça marche...
on ne peut avoir une autre macro recensant les journées manquantes du mois M et M-1 (mois en cours et mois précédent)
 

anasimo

XLDnaute Occasionnel
ah oui pas maintenant...prenez votre temps.

Sinon je change koi dans la macro si la colonne contenant les dates se trouve dans la colonne G au lieu de la colonne B
 

anasimo

XLDnaute Occasionnel
y a kelk chose ki marche pas....quand je supprime une journée pour tester...ça me sort pas que comme koi cette journée est manquante dans le msgbox
 

patricktoulon

XLDnaute Accro
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 !!
Manquants!!: 01/01/2019 mardi 01 01 2019
Manquants!!: 11/01/2019 vendredi 11 01 2019
Manquants!!: 01/05/2019 mercredi 01 05 2019
Manquants!!: 05/06/2019 mercredi 05 06 2019
Manquants!!: 06/06/2019 jeudi 06 06 2019
Manquants!!: 07/06/2019 vendredi 07 06 2019
Manquants!!: 30/07/2019 mardi 30 07 2019
Manquants!!: 12/08/2019 lundi 12 08 2019
Manquants!!: 13/08/2019 mardi 13 08 2019
Manquants!!: 14/08/2019 mercredi 14 08 2019
Manquants!!: 15/08/2019 jeudi 15 08 2019
Manquants!!: 20/08/2019 mardi 20 08 2019
Manquants!!: 21/08/2019 mercredi 21 08 2019
Manquants!!: 02/09/2019 lundi 02 09 2019
Manquants!!: 03/09/2019 mardi 03 09 2019
Manquants!!: 04/09/2019 mercredi 04 09 2019
Manquants!!: 05/09/2019 jeudi 05 09 2019
Manquants!!: 06/09/2019 vendredi 06 09 2019
Manquants!!: 09/09/2019 lundi 09 09 2019
Manquants!!: 10/09/2019 mardi 10 09 2019
Manquants!!: 11/09/2019 mercredi 11 09 2019
Manquants!!: 12/09/2019 jeudi 12 09 2019
Manquants!!: 13/09/2019 vendredi 13 09 2019
Manquants!!: 16/09/2019 lundi 16 09 2019
Manquants!!: 17/09/2019 mardi 17 09 2019
Manquants!!: 18/09/2019 mercredi 18 09 2019
Manquants!!: 19/09/2019 jeudi 19 09 2019
Manquants!!: 20/09/2019 vendredi 20 09 2019
Manquants!!: 23/09/2019 lundi 23 09 2019
Manquants!!: 24/09/2019 mardi 24 09 2019
Manquants!!: 25/09/2019 mercredi 25 09 2019
Manquants!!: 26/09/2019 jeudi 26 09 2019
Manquants!!: 27/09/2019 vendredi 27 09 2019
Manquants!!: 30/09/2019 lundi 30 09 2019
Manquants!!: 01/10/2019 mardi 01 10 2019
Manquants!!: 02/10/2019 mercredi 02 10 2019
Manquants!!: 03/10/2019 jeudi 03 10 2019
Manquants!!: 04/10/2019 vendredi 04 10 2019
Manquants!!: 07/10/2019 lundi 07 10 2019
Manquants!!: 08/10/2019 mardi 08 10 2019
Manquants!!: 09/10/2019 mercredi 09 10 2019
Manquants!!: 10/10/2019 jeudi 10 10 2019
Manquants!!: 11/10/2019 vendredi 11 10 2019
Manquants!!: 14/10/2019 lundi 14 10 2019
Manquants!!: 15/10/2019 mardi 15 10 2019
Manquants!!: 16/10/2019 mercredi 16 10 2019
Manquants!!: 17/10/2019 jeudi 17 10 2019
Manquants!!: 18/10/2019 vendredi 18 10 2019
Manquants!!: 21/10/2019 lundi 21 10 2019
Manquants!!: 22/10/2019 mardi 22 10 2019
Manquants!!: 23/10/2019 mercredi 23 10 2019
Manquants!!: 24/10/2019 jeudi 24 10 2019
Manquants!!: 25/10/2019 vendredi 25 10 2019
Manquants!!: 28/10/2019 lundi 28 10 2019
Manquants!!: 29/10/2019 mardi 29 10 2019
Manquants!!: 30/10/2019 mercredi 30 10 2019
Manquants!!: 31/10/2019 jeudi 31 10 2019
Manquants!!: 01/11/2019 vendredi 01 11 2019
Manquants!!: 04/11/2019 lundi 04 11 2019
Manquants!!: 05/11/2019 mardi 05 11 2019
Manquants!!: 06/11/2019 mercredi 06 11 2019
Manquants!!: 07/11/2019 jeudi 07 11 2019
Manquants!!: 08/11/2019 vendredi 08 11 2019
Manquants!!: 11/11/2019 lundi 11 11 2019
Manquants!!: 12/11/2019 mardi 12 11 2019
Manquants!!: 13/11/2019 mercredi 13 11 2019
Manquants!!: 14/11/2019 jeudi 14 11 2019
Manquants!!: 15/11/2019 vendredi 15 11 2019
Manquants!!: 18/11/2019 lundi 18 11 2019
Manquants!!: 19/11/2019 mardi 19 11 2019
Manquants!!: 20/11/2019 mercredi 20 11 2019
Manquants!!: 21/11/2019 jeudi 21 11 2019
Manquants!!: 22/11/2019 vendredi 22 11 2019
Manquants!!: 25/11/2019 lundi 25 11 2019
Manquants!!: 26/11/2019 mardi 26 11 2019
Manquants!!: 27/11/2019 mercredi 27 11 2019
Manquants!!: 28/11/2019 jeudi 28 11 2019
Manquants!!: 29/11/2019 vendredi 29 11 2019
Manquants!!: 02/12/2019 lundi 02 12 2019
Manquants!!: 03/12/2019 mardi 03 12 2019
Manquants!!: 04/12/2019 mercredi 04 12 2019
Manquants!!: 05/12/2019 jeudi 05 12 2019
Manquants!!: 06/12/2019 vendredi 06 12 2019
Manquants!!: 09/12/2019 lundi 09 12 2019
Manquants!!: 10/12/2019 mardi 10 12 2019
Manquants!!: 11/12/2019 mercredi 11 12 2019
Manquants!!: 12/12/2019 jeudi 12 12 2019
Manquants!!: 13/12/2019 vendredi 13 12 2019
Manquants!!: 16/12/2019 lundi 16 12 2019
Manquants!!: 17/12/2019 mardi 17 12 2019
Manquants!!: 18/12/2019 mercredi 18 12 2019
Manquants!!: 19/12/2019 jeudi 19 12 2019
Manquants!!: 20/12/2019 vendredi 20 12 2019
Manquants!!: 23/12/2019 lundi 23 12 2019
Manquants!!: 24/12/2019 mardi 24 12 2019
Manquants!!: 25/12/2019 mercredi 25 12 2019
Manquants!!: 26/12/2019 jeudi 26 12 2019
 

patricktoulon

XLDnaute Accro
re
aha!!!! ben voila dis moi ca au lieu de me dire que ca fait rien ;)
le debug c'est la console pour vbe (la ou tu code ) la fenêtre d’exécution
regarde
demo3.gif
 

anasimo

XLDnaute Occasionnel
Merci patrick...désolé....je croyais la macro une fois exécutée un message s'affichera sur l'écran
 

patricktoulon

XLDnaute Accro
ben remplace "debug.print" par "msgbox" et tu l'aura dans un message
tout du moins une partie car la liste des manquants est longue et un msgbox a un nombre limité de caracteres
;)
 

anasimo

XLDnaute Occasionnel
2normalement la macro ne doit pas recenser des journées non encore échues comme celles de décembre 2019 (et le reste des journées de novembre)
 

patricktoulon

XLDnaute Accro
tiens tu l'a en msgbox et debug et ca s'arrete a aujourd'hui
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 texte = texte & "Manquants!!: " & CDate(firstdate + j) & Format(CDate(firstdate + j), " dddd dd mm yyyy") & vbCrLf
       If firstdate + j > Date Then Exit For
       Next

MsgBox texte ' une partie
Debug.Print texte 'liste complete
End Sub
demo3.gif
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas