XL 2013 passage de fonction à VBA plante (calcul de différences de dates)

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,


grâce au forum, j'ai appris comment décomposer une différence de dates en année, mois, jour, minute etc.

Avec les formules (merci Eriiiic), ça fonctionne mais ayant besoin d'automatiser le tout, j'essaie de convertir tout ça en VBA et c'est là que je bute :

la formule =datedif(b3;c3;"ym") que j'écris en VBA EcartMois = DateDiff("ym", DateDebut, DateFin) plante sans que je sache pourquoi …

idem pour le modulo que je n'arrive pas à convertir en VBA

En pièce jointe un petit fichier

Quelqu'un a-t-il une idée ?


Merci d'avance

Seb
 

Pièces jointes

  • Question_Forum_03112017.xlsm
    21.8 KB · Affichages: 35

Sebast

XLDnaute Impliqué
Bonsoir,
merci pour ton aide. 'est plutôt râlant car c'était bien pratique ...
Je n'arrive pas à croire qu'en passant en VBA, un paramètre soit carrément zappé !
Mais étant novice, je dois le constater.
Quelqu'un a-t-il été confronté au problème ?

Bonne soirée
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Quelqu'un a-t-il été confronté au problème ?
1) Utiliser ce bel ouvrage signé ROGER2327*
https://www.excel-downloads.com/threads/date-dif.207853/page-2#post-1364859
2) Lire tout le fil cité ci-dessus par une nuit sans lune, près de l'âtre, avec sur les genoux un plaid de bonne facture, et en fond sonore , Flying Teapot (de Gong) permettra de mieux appréhender les déboires potentiels d'un usage immodéré de DATEDIF.

*: Ca fait un bail qu'XLD ne voit plus ROGER2327 nous proposer ses codes et autres formules.
Et c'est bien dommage
(En tout cas la lecture de ses messages étaient toujours pour moi un réel plaisir)
 
Dernière édition:

Sequoyah

XLDnaute Nouveau
Bonsoir le fil, le forum

ma proposition:

VB:
Sub Calculs2()

    With Sheets("Travail")
   
        'Insérer les formules dans les cellules
       
        .Range("D11").FormulaR1C1 = "=DATEDIF(R11C2,R11C3,""Y"")"
        .Range("E11").FormulaR1C1 = "=DATEDIF(R11C2,R11C3,""ym"")"
        .Range("F11").FormulaR1C1 = "=DATEDIF(R11C2,R11C3,""md"")"
        .Range("G11").FormulaR1C1 = "=MOD(R11C3-R11C2,1)"
       
        'Remplacer les formules par leur valeur calculée
       
        With Range("D11", "G11")
            .Value = .Value
        End With
       
    End With
   
End Sub
 

dg62

XLDnaute Barbatruc
Bonsoir,

un bout de code à peaufiner pour les experts.

Code:
Sub Tempsrestant()
Dim DateDebut As Date
Dim DateFin   As Date

    DateDebut = Range("B3").Value
    DateFin = Range("C3").Value
    ans = Int((DateFin - DateDebut) / 365.2425)
    mois = Int((((DateFin - DateDebut) / 365.2425) - ans) * 12)
    jours = Int(CByte(Day(DateSerial(Year(DateFin), Month(DateFin) + 1, 0))) * (((((DateFin - DateDebut) / 365.2425) - ans) * 12) - mois))
    hms = (DateFin - DateDebut) - Int(DateFin - DateDebut)
    reste = "il reste " & ans & " an(s) " & mois & " mois " & jours & " jours " & " et " & Format(hms, "h\hmm ss")
    Range("B13").Value = reste

End Sub

@+
 

dg62

XLDnaute Barbatruc
Bonsoir,

un bout de code à peaufiner pour les experts.

VB:
Sub Tempsrestant()
Dim DateDebut As Date
Dim DateFin   As Date

    DateDebut = Range("B3").Value
    DateFin = Range("C3").Value
    ans = Int((DateFin - DateDebut) / 365.2425)
    mois = Int((((DateFin - DateDebut) / 365.2425) - ans) * 12)
    jours = Int(CByte(Day(DateSerial(Year(DateFin), Month(DateFin) + 1, 0))) * (((((DateFin - DateDebut) / 365.2425) - ans) * 12) - mois))
    hms = (DateFin - DateDebut) - Int(DateFin - DateDebut)
    reste = "il reste " & ans & " an(s) " & mois & " mois " & jours & " jours " & " et " & Format(hms, "h\hmm ss")
    Range("B13").Value = reste

End Sub
[/QUOTE]

@+
 

Discussions similaires