formule qui ne marche plus...

C@thy

XLDnaute Barbatruc
Bonjour le forum,

j'avais cette formule sous excel :
=DATEDIF(AUJOURDHUI()-JOURS360(LC(-2);AUJOURDHUI());AUJOURDHUI();"y")&" ans "&DATEDIF(AUJOURDHUI()-JOURS360(LC(-2);AUJOURDHUI());AUJOURDHUI();"ym")&" mois "&DATEDIF(AUJOURDHUI()-JOURS360(LC(-2);AUJOURDHUI());AUJOURDHUI();"md")&" jours"

mais hélas, elle ne fonctionne pas lorsque j'ouvre le fichier avec libreoffice...
qui ne connait pas datedif... le pôvre!

du coup, ça me paraît vraiment compliqué d'obtenir la même sous libreoffice, c'est à dire sans le datedif, et surtout sans macro!.... screugneugneu!...

si vous avez une petite idée pour m'aider, je vous en remercie grandement...

Mille bises

C@thy
 

job75

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Bonjour C@thy :)

Vois le fichier joint.

Dans ta formule avec DATEDIF la date de début est AUJOURDHUI()-JOURS360(A2;AUJOURDHUI()).

J'ai mis cette date en B2, la formule avec DATEDIF est en C2.

Alors tu peux utiliser cette formule en D2 :

Code:
=ENT(JOURS360(B2;AUJOURDHUI()+1)/360)&" ans "&ENT(JOURS360(B2;AUJOURDHUI()+1)/30)-12*ENT(JOURS360(B2;AUJOURDHUI()+1)/360)&" mois "&JOURS360(B2;AUJOURDHUI()+1)-30*ENT(JOURS360(B2;AUJOURDHUI()+1)/30)&" jours"
Elle donne bien le même résultat.

A+
 

Pièces jointes

  • Formule sans DATEDIF(1).xls
    23.5 KB · Affichages: 37

C@thy

XLDnaute Barbatruc
Re : formule qui ne marche plus...

un "vrai-faux" exemple...

Edit : comme tu peux le voir, il y a 2 feuilles, dont une avec 360

C@thy
 

Pièces jointes

  • Copie de 2013 - Calcul ancienneté 360jours.xls
    38 KB · Affichages: 38
Dernière édition:

job75

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Re C@thy,

Une solution générale qui utilise 3 colonnes intermédiaires.

Avec les SOMMEPROD c'est de l'artillerie lourde, il y a sûrement plus simple.

Fichier (2).

A+
 

Pièces jointes

  • Formule sans DATEDIF(2).xls
    24 KB · Affichages: 37

C@thy

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Merci Gérard,

le seul problème c'est que ces fichiers ont déjà été envoyés aux utilisateurs:mad: en libreoffice, et qu'on ne peut pas se permettre de modifier la structure en rajoutant des colonnes...:(:(

mais je creuse la première piste, elle était bien...

Bizz

c u (=see you = @+)

C@thy
 

job75

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Re,

Voyons C@thy j'ai mis les colonnes intermédiaires pour que tu comprennes bien :)

On peut facilement les éviter mais alors la formule devient trapue :

Code:
=SOMMEPROD(N((TEXTE(A2-1+LIGNE(INDIRECT("1:"&AUJOURDHUI()-A2+1));"jjmm")=TEXTE($A2;"jjmm"))))-1&" ans "&SOMMEPROD(N((JOUR(A2-1+LIGNE(INDIRECT("1:"&AUJOURDHUI()-A2+1)))=JOUR(A2))))-1-12*(SOMMEPROD(N((TEXTE(A2-1+LIGNE(INDIRECT("1:"&AUJOURDHUI()-A2+1));"jjmm")=TEXTE($A2;"jjmm"))))-1)&" mois "&AUJOURDHUI()-DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI())-(JOUR(AUJOURDHUI())<JOUR(A2));JOUR(A2))&" jours"
Fichier (3).

A+
 

Pièces jointes

  • Formule sans DATEDIF(3).xls
    23.5 KB · Affichages: 40

piga25

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Bonjour Cathy, Gérard,

Avec une fonction personnalisée à mettre dans libreoffice:
Voici un exemple d'application pratique avec une fonction DATE_DIF qui va calculer des écarts entre 2 dates.
Suivant les options possibles, les résultats peuvent être combinés en jours,
semaines, mois, années. La syntaxe sera :

DATE_DIF(DateDebut; DateFin; Unite1; Unite2;
Unite3; [SemaineDebut; [AnneeDebut]])


Unité
Commentaires
Y ou A
Le nombre d'années entières comprises dans la période (Y pour
compatibilité Excel)
M ou YM
La différence entre les mois de DateDebut et DateFin. Les
jours et les années des dates ne sont pas pris en compte. (YM pour compatibilité
Excel)
D ou J ou MD
La différence entre les jours de DateDebut et DateFin. Les
mois et les années des dates ne sont pas pris en compte. (D ou MD pour
compatibilité Excel)
YD
La différence entre les jours de DateDebut et DateFin. Les
années des dates ne sont pas prises en compte. (YD pour compatibilité
Excel)
W
Différences en semaines
WW
Différences en semaines. L'option SemaineDebut a une action
SemaineDebut
Option. Utile uniquement avec W
ou WW
AnneeDebut
Option. Utile uniquement avec WW
et si SemaineDebut
présent

SemaineDebut
Commentaires
Valeur système par défaut
1
Dimanche (par défaut)
2
Lundi
3
Mardi
4
Mercredi
5
Jeudi
6
vendredi
7
Samedi






  • Function Date_Dif(DateDebut As
    Variant, DateFin As
    Variant, Unite1 As
    String, Optional Unite2 As String, _
    Optional Unite3 As String, Optional SemaineDeb As Variant, Optional AnneeDeb As Integer) As String
  • '-----------------------------------
  • ' DATE_DIF Préversion Novembre 2006
  • ' Le tableur Calc par l'exemple
  • ' Tutorial - Tableur Calc d'OpenOffice.org par l'exemple
  • '-----------------------------------
  • Dim Txt(3) As String
  • '
  • If IsMissing(Unite2) Then
    Unite2=""
  • If IsMissing(Unite3) Then
    Unite3=""
  • If IsMissing(SemaineDeb) Then
    SemaineDeb=0
  • If IsMissing(AnneeDeb) Then
    AnneeDeb=0
  • '
  • On Error Goto GestionErreurs
  • OK = False
  • '
  • For i = 1 To 3
  • If i = 1 Then Unite = Unite1
  • If i = 2 Then Unite = Unite2
  • If i = 3 Then Unite = Unite3
  • Gosub TraiteUnites
  • Next i
  • '
  • If OK = False
    Then 'aucun paramètre
  • Date_Dif = "Err:Date_Dif"
  • Exit Function
  • Endif
  • '
  • Dim A1 As Integer, A2 As Integer, AA As Integer
  • Dim M1 As Integer, M2 As Integer, MM As Integer
  • Dim J1 As Integer, J2 As Integer, JJ As Integer
  • '
  • A2 = Year(DateFin)
  • A1 = Year(DateDebut)
  • M2 = Month(DateFin)
  • M1 = Month(DateDebut)
  • J2 = Day(DateFin)
  • J1 = Day(DateDebut)
  • '
  • 'Calcul YD différence en jours, une fois les années
    soustraites
  • Bissextile = ((A1 Mod 100 ‹› 0) And (A1 Mod 4 = 0)) Or (A1 Mod 400 = 0) 'Année début bissextile ?
  • YD = DateSerial(A2, M2, J2) - DateSerial(A2, M1,
    J1)
  • If YD‹0 Then
  • YD = (DateSerial(A1, 12, 31) - DateSerial(A1, M1, J1)) + (DateSerial(A2, M2, J2) -
    DateSerial(A2, 1, 1))
  • Endif
  • If Bissextile‹0 Then
  • If M1‹2 Then
  • YD = YD - Bissextile
  • Endif
  • Endif
  • ' fin YD
  • '
  • If M2=1 Then
  • JourDansMoisFinPrec = 31
  • Else
  • JourDansMoisFinPrec = DateSerial(A2, M2,
    1) - DateSerial(A2,
    M2-1, 1)
  • Endif
  • '
  • AA = A2-A1
  • '
  • If M2›=M1 Then
  • MM = M2 - M1
  • Else
  • MM = M2 - M1 + 12
  • AA = AA - 1
  • Endif
  • '
  • If (J2-J1)‹0 Then
  • JJ = J2 - J1 + JourDansMoisFinPrec
  • If MM ‹1 Then
  • MM = MM + 11
  • AA = AA - 1
  • Else
  • MM = MM - 1
  • Endif
  • Else
  • JJ = J2 - J1
  • Endif
  • '
  • Assemblage =
    ""
  • For n = 1 to 3
  • If n = Jours
    Then
  • Assemblage = Assemblage & JJ &
    Txt(n)
  • Elseif n =
    Mois Then
  • Assemblage = Assemblage & MM &
    Txt(n)
  • ElseIf n =
    Annees Then
  • Assemblage = Assemblage & AA &
    Txt(n)
  • ElseIf n =
    CasYd Then
  • Assemblage = Assemblage & YD &
    Txt(n)
  • ElseIf n =
    CasW Or n =
    CasWW Then
  • If n =
    CasW Then Param =
    "w" Else Param =
    "ww"
  • Assemblage = Assemblage & DateDiff (Param,
    DateDebut, DateFin , SemaineDeb , AnneeDeb) & Txt(n)
  • Endif
  • Next n
  • '
  • Date_Dif = Assemblage
  • '
  • Exit Function
  • '
  • '---
  • TraiteUnites:
  • If Unite‹›"" Then
  • Pv = Instr(Unite, ",")
  • If Pv =
    0 Then
  • Pv = Instr(Unite, ";")
  • Endif
  • If Pv ›
    0 Then
  • TxtLu = Right(Unite, Len(Unite) - Pv)
  • UnProv = Ucase(Trim(Left(Unite, Pv-1)))
  • Else
  • UnProv = Ucase(Trim(Unite))
  • Endif
  • '
  • If UnProv =
    "Y" Or UnProv = "A" Then
  • Annees = i
  • Txt(i) = TxtLu
  • OK = True
  • ElseIf UnProv = "M" Or UnProv = "YM" Then
  • Mois = i
  • Txt(i) = TxtLu
  • OK = True
  • ElseIf UnProv = "D" Or UnProv = "J" Or UnProv = "MD" Then
  • Jours = i
  • Txt(i) = TxtLu
  • OK = True
  • ElseIf UnProv = "YD" Then 'Excel : diff. jours, une fois
    les années soustraites
  • CasYd = i
  • Txt(i) = TxtLu
  • OK = True
  • ElseIf UnProv = "W" Then
  • CasW = i
  • Txt(i) = TxtLu
  • OK = True
  • ElseIf UnProv = "WW" Then
  • casWW = i
  • Txt(i) = TxtLu
  • OK = True
  • Endif
  • Endif
  • Return
  • '
  • '
  • GestionErreurs:
  • 'MsgBox "Erreur ligne " & Erl & chr(13) &
    "Erreur n°" & Err
  • If Err = 449 Then 'paramètre absent
  • Resume Next
  • ElseIf Err =
    13 Then
  • MsgBox("Incompatibilité de type")
  • Exit Function
  • Endif
  • '
  • End Function




Cela n'est pas de moi, mais de Tutorial - Tableur Calc d'OpenOffice.org par l'exemple
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Bonjour C@thy, piga25, le forum,

Voici la bonne solution, sans SOMMEPROD :

Code:
=ANNEE(AUJOURDHUI())-ANNEE(A2)-(AUJOURDHUI()<DATE(ANNEE(AUJOURDHUI());MOIS(A2);JOUR(A2)))&" ans "&MOD(MOIS(AUJOURDHUI())-MOIS(A2);12)&" mois "&AUJOURDHUI()-DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI())-(JOUR(AUJOURDHUI())<JOUR(A2));JOUR(A2))&" jours"
Fichier (4).

@piga25 : la dame a dit au post #1 sans le datedif, et surtout sans macro!
A+
 

Pièces jointes

  • Formule sans DATEDIF(4).xls
    24 KB · Affichages: 38

C@thy

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Hi hi hi!!! Un grand merci à tous.
Oui, la dame elle a dit sans macro, car la macro-fonction je l'ai, mais ils n'en veulent pas
(postes en sécurité haute)

Merci vous êtes SUPER!!!

Biese et bonne journée

C@thy
 

job75

XLDnaute Barbatruc
Re : formule qui ne marche plus...

Re C@thy,

Il manquait encore un petit quelque chose pour le calcul des mois :

Code:
=ANNEE(AUJOURDHUI())-ANNEE(A2)-(AUJOURDHUI()<DATE(ANNEE(AUJOURDHUI());MOIS(A2);JOUR(A2)))&" ans "&MOD(MOIS(AUJOURDHUI())-MOIS(A2);12)-(JOUR(AUJOURDHUI())<JOUR(A2))&" mois "&AUJOURDHUI()-DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI())-(JOUR(AUJOURDHUI())<JOUR(A2));JOUR(A2))&" jours"
J'espère n'avoir rien oublié, teste bien.

Fichier (5).

A+
 

Pièces jointes

  • Formule sans DATEDIF(5).xls
    24.5 KB · Affichages: 45
Dernière édition:

Statistiques des forums

Discussions
312 381
Messages
2 087 830
Membres
103 667
dernier inscrit
datengo