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

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 !

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

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

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

Dernière édition:
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

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

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

- 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
1
Affichages
235
Réponses
11
Affichages
684
Retour