Microsoft 365 calcul nombre de jour entre deux dates avec un code vba

stéphane97429

XLDnaute Nouveau
Bonjour à tous
je souhaite calculer le nombre de jour entre deux dates avec une macro (une date "échéance" enregistrée dans un tableau Excel et aujourd'hui) puis afficher un msg box à l'ouverture pour indiquer le résultat.
Après plusieurs recherches sur le net, sans succès, je viens vous demander des conseils.
En pièce jointe le tableau Excel.
Merci d'avance pour le coup de main
Cordialement
 

Pièces jointes

  • fichier_221022.xlsm
    26.4 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Stéphane,
Un essai en PJ avec dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
    On Error GoTo Fin
    ProchaineEcheance = Format(Application.Min(Sheets("jour").[B:B]) - Date, "0 jours.")
    MsgBox "Prochaine échéance dans " & ProchaineEcheance
Fin:
End Sub
 

Pièces jointes

  • fichier_221022.xlsm
    30.9 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
vous avez activé les macros ?
Normalement vous devriez avoir ça :
20221022_152301.gif


En Pj, la même mais améliorée :
1- On précise la prochaine échéance.
2- On met un message s'il n'y a pas de futures échéances.
1666445143645.png
 

Pièces jointes

  • fichier_221022 (V2).xlsm
    32.1 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Par curiosité, qu'est ce qui clochait pour que ça ne marche pas ?

Un doute m'a effleuré, en relisant le code.
En effet si la date min est déjà passée alors il y a un bug car il considère que le min étant passé il n'y a pas de nouvelle échéance. Les ex ne sont pas représentatifs. Pour le vérifier passez B2 en 20/10/2022. Sorry.
Donc une V3 en PJ, et ça se complique un peu, on ne peut pas prendre simplement le min, il faut tout parcourir, avec :
VB:
Private Sub Workbook_Open()
    Dim L%, Ligne%, ProchaineEcheance
    On Error GoTo Fin
    ProchaineEcheance = 70000  ' Init vers 2091 !
    For L = 2 To Sheets("jour").Range("B65500").End(xlUp).Row
        If Sheets("jour").Cells(L, "B") >= Date And Sheets("jour").Cells(L, "B") < ProchaineEcheance Then
            ProchaineEcheance = Sheets("jour").Cells(L, "B")
            Ligne = L
        End If
    Next L
    If ProchaineEcheance <> 70000 Then
        MsgBox "Prochaine échéance dans " & _
                Format(ProchaineEcheance - Date, "0 jours.") & Chr(10) & Chr(10) & _
                Sheets("jour").Cells(Ligne, "C") & " le " & Format(Sheets("jour").Cells(Ligne, "B"), "dddd dd mmmm")
    Else
        MsgBox "Pas de futures échéances programmées."
    End If
Fin:
End Sub
Mais au moins là ça marche. :)
si c'est ok pour vous, pensez à mettre la bonne PJ en solution retenue pour éviter qu'un futur lecteur se laisse bernée par la PJ #4.
 

Pièces jointes

  • fichier_221022 (V3).xlsm
    32.7 KB · Affichages: 3
Dernière édition:

stéphane97429

XLDnaute Nouveau
Bonjour Sylvanu
J'ai voulu utiliser votre macro immédiatement dans un autre fichier (fichier perso budget) dans lequel je fais le suivi des échéances avec un tableau.
Je vais donc utiliser le tableau en pièce jointe et votre macro et je vais prendre le temps de trouver la solution pour adapter votre macro. Si jamais je bloque, je me permettrais de revenir vers vous. Vous m'avez mis sur la bonne piste.
Encore merci.
Comme vous le suggérez, en pièce jointe le fichier dernière version
Cordialement
 

Pièces jointes

  • fichier_221022_VersionFinale.xlsm
    32.9 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour stéphane97429, sylvanu,

Cette formule en E2 est plus simple =SI(B2<=AUJOURDHUI();"date échue";B2-AUJOURDHUI())

La macro dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Dim mini&, mes$, tablo, i&
With Feuil1.[B1].CurrentRegion
    mini = Application.Min(.Columns(4))
    If mini = 0 Then Exit Sub
    mes = "Echeance(s) dans " & mini & " jour(s) :"
    tablo = .Value2 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        If tablo(i, 4) = mini Then mes = mes & vbLf & tablo(i, 2) & " " & tablo(i, 3) & " €"
    Next
End With
MsgBox mes
End Sub
A+
 

Pièces jointes

  • fichier_221022(1).xlsm
    33.2 KB · Affichages: 4

job75

XLDnaute Barbatruc
Si l'on veut aussi un message le jour de l'échéance utiliser en E2 :
Code:
=SI(B2<AUJOURDHUI();"date échue";B2-AUJOURDHUI())
et la macro :
VB:
Private Sub Workbook_Open()
Dim mini&, tablo, i&, mes$
With Feuil1.[B1].CurrentRegion
    mini = Application.Min(.Columns(4))
    tablo = .Value2 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        If tablo(i, 4) = mini Then mes = mes & vbLf & tablo(i, 2) & " " & tablo(i, 3) & " €"
    Next
End With
If mes <> "" Then MsgBox "Echéance(s) " & IIf(mini, "dans " & mini & " jour(s) :", "de ce jour :") & mes
End Sub
 

Pièces jointes

  • fichier_221022(2).xlsm
    33.5 KB · Affichages: 5

Discussions similaires

Réponses
9
Affichages
777

Statistiques des forums

Discussions
314 714
Messages
2 112 140
Membres
111 436
dernier inscrit
jibusigor