Calcul nombre Gua

Bonjour à tous,

J'ai besoin de votre aide pour réaliser une formule Excel malheureusement au-dessus de mes compétences... J'ai tenté différentes choses qui ne fonctionnent pas c'est pourquoi je m'en remets à vous.

Ces calculs se font selon plusieurs conditions que j'ai indiquées dans le fichier joint pour une meilleure compréhension.

Merci à tous pour votre aide précieuse.

Val

Bonjour,

Après lecture, re-lecture et re-re-lecture, il y a toujours un élément qui demeure incompréhensible pour moi :

Réduire les 2 derniers chiffres de son année de naissance en les additionnant jusqu'à obtenir un nombre à 1 chiffre (Ex : 1984 = 3)

Par quelle diablerie on passe de 84 à 3 ???

Salut Pedro22,

Je me suis posé la même question et au final je me suis dit peut être que 8+4 = 12 et donc 1+2 = 3 ?

Mais incapable d'arriver à le modéliser sous Excel.

Cdlt,

Bonjour à tous,

Pedro22 : C'est en additionnant les chiffres du nombre 84. 8+4 = 12. 1 + 2 = 3. On s'arrête ici car on obtient un chiffre.

Bonjour tout le monde,

En E2:....à tirer vers le bas....

=SI(ET(D2="Homme";C2<2000);10-SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1));SI(ET(D2="Homme";C2>2000);9-SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1));SI(ET(D2="Femme";C2<2000);SI(5+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1))>=10;STXT(5+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1));1;1)+STXT(5+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1));2;1);5+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)));SI(6+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1))>=10;STXT(6+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1));1;1)+STXT(6+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1));2;1);6+SI(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1)>=10;STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);1;1)+STXT(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1);2;1);STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);3;1)+STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);4;1))))))

....mais il y a certainement plus simple........désolé, je sors...

Cordialement,

Bonjour Pedro22,

Merci pour ton retour.

Voici l'explication pour l'année 1984 :

"Réduire les 2 derniers chiffres de son année de naissance" : on prend donc seulement en compte 84

"en les additionnant" : puis on additionne ces 2 chiffres, soit 8 + 4 = 12

"jusqu'à obtenir un nombre à 1 chiffre" : le résultat (12) étant constitué de 2 chiffres nous les additionnons à nouveau, soit 1 + 2 = 3

J'espère que cela est plus clair... n'hésite pas à revenir vers moi si ce n'est pas le cas.

Merci encore

Val

Re,

@Ergotamine Comme on ne prend qu'un nombre à deux chiffres, l'opération se répète maximum deux fois !

@VALIONNE Ta formule, un peu plus courte que celle de xorsankukai ahah ! À mettre en E2 :

=ABS(SI(SI(D2="Femme";SI(C2<2000;-5;-6);SI(C2<2000;10;9))-SI(CONCATENER(A2;"/";B2;"/";C2)-CONCATENER("04/02/";C2)<0;SI(NBCAR(STXT(C2-1;3;1)+DROITE(C2-1;1))=2;GAUCHE(STXT(C2-1;3;1)+DROITE(C2-1;1);1)+DROITE(STXT(C2-1;3;1)+DROITE(C2-1;1);1);STXT(C2-1;3;1)+DROITE(C2-1;1));SI(NBCAR(STXT(C2;3;1)+DROITE(C2;1))=2;GAUCHE(STXT(C2;3;1)+DROITE(C2;1);1)+DROITE(STXT(C2;3;1)+DROITE(C2;1);1);STXT(C2;3;1)+DROITE(C2;1)))=-10;1;SI(D2="Femme";SI(C2<2000;-5;-6);SI(C2<2000;10;9))-SI(CONCATENER(A2;"/";B2;"/";C2)-CONCATENER("04/02/";C2)<0;SI(NBCAR(STXT(C2-1;3;1)+DROITE(C2-1;1))=2;GAUCHE(STXT(C2-1;3;1)+DROITE(C2-1;1);1)+DROITE(STXT(C2-1;3;1)+DROITE(C2-1;1);1);STXT(C2-1;3;1)+DROITE(C2-1;1));SI(NBCAR(STXT(C2;3;1)+DROITE(C2;1))=2;GAUCHE(STXT(C2;3;1)+DROITE(C2;1);1)+DROITE(STXT(C2;3;1)+DROITE(C2;1);1);STXT(C2;3;1)+DROITE(C2;1)))))

Bonne journée,

Baboutz

EDIT : VALIONNE tu n'as jamais parlé du cas où l'année = 2000. Du coup j'ai pris le cas où 2000 = après 2000. (Suis-je clair ? )

Bonjour tout le monde !

Autre essai, par contre ligne 6 j'obtiens 10 et pas 1 :

=ABS(SI(D2="Homme";SI(C2<2000;10;9);SI(C2<2000;-5;-6))-SI(STXT(SI(DATE(C2;B2;A2)<DATE(C2;2;4);C2-1;C2);3;1)+STXT(SI(DATE(C2;B2;A2)<DATE(C2;2;4);C2-1;C2);4;1)>9;1+MOD(STXT(SI(DATE(C2;B2;A2)<DATE(C2;2;4);C2-1;C2);3;1)+STXT(SI(DATE(C2;B2;A2)<DATE(C2;2;4);C2-1;C2);4;1);10);STXT(SI(DATE(C2;B2;A2)<DATE(C2;2;4);C2-1;C2);3;1)+STXT(SI(DATE(C2;B2;A2)<DATE(C2;2;4);C2-1;C2);4;1)))

C'est aussi réalisable en macro à l'aide d'une fonction personnalisée.

Re,

Autre essai, par contre ligne 6 j'obtiens 10 et pas 1

Si résultat >10, il faut additionner les 2 chiffres,

Cordialement,

bonjour

un essai (plus light) rien que pour les hommes (j'ai eu la flemme pour les femmes)

9valionne.xlsx (10.20 Ko)

En VBA :

Function RéductionUnité(ByVal Nombre As Long) As Integer

Dim c As Integer, Res As Integer

While Nombre > 9
    Res = Nombre: Nombre = 0
    For c = 1 To Len(Res): Nombre = Nombre + Mid(Res, c, 1): Next c
Wend
RéductionUnité = Nombre

End Function
Function CalcGua(ByVal DateNaiss As Date, ByVal Sexe As String) As Integer

Dim Annee As Integer, Res As Integer

If DateNaiss < DateSerial(Year(DateNaiss), 2, 4) Then Annee = Year(DateNaiss) - 1 Else Annee = Year(DateNaiss)
Res = RéductionUnité(CInt(Right(Annee, 2)))
If Sexe Like "H*" Then
    If Annee < 2000 Then Res = 10 - Res Else Res = 9 - Res
ElseIf Sexe Like "F*" Then
    If Annee < 2000 Then Res = Res + 5 Else Res = Res + 6
End If
CalcGua = RéductionUnité(Res)

End Function

Ensuite en cellule E2 :

=CalcGua(DATE(C2;B2;A2);D2)

@tulipe On ne triche pas, pas de colonne intermédiaire ohoh

Mais sinon bravo, en reprenant ta formule tulipe, j'arrive à avoir une formule plus courte :

=SI(D2="Homme";SI(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1)<2000;10;9)-SIERREUR(SOMME(STXT(SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1);{1;2};{1;2})*1);SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1));SI(SI(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1)<2000;5;6)+SIERREUR(SOMME(STXT(SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1);{1;2};{1;2})*1);SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1))=10;1;SI(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1)<2000;5;6)+SIERREUR(SOMME(STXT(SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1);{1;2};{1;2})*1);SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1))))

Ça me fais penser, @VALIONNE je t'avais déjà aidé sur un fichier fin 2019 !

EDIT : En fait, avec la formule de Tulipe on pourrait avoir une formule totale "assez" concise mais le problème vient du fait que pour les femmes, on peut avoir un résultat = 10 qu'il faut passer à 1, ce qui fait faire : SI(formule_femme = 10;1;formule_femme) pour une formule totale sous la forme :
=SI(D2="Homme";formule_homme;SI(formule_femme = 10;1;formule_femme))

EDIT : En fait, avec la formule de Tulipe on pourrait avoir une formule totale "assez" concise mais le problème vient du fait que pour les femmes, on peut avoir un résultat = 10 qu'il faut passer à 1, ce qui fait faire : SI(formule_femme = 10;1;formule_femme) pour une formule totale sous la forme :

=SI(D2="Homme";formule_homme;SI(formule_femme = 10;1;formule_femme))

Moralité : les femmes c'est casse-couille !

Re,

Je vois que ma formule n'a pas rencontré de succès,

Un essai par macro:

Sub test()
 Dim i%, dl%
 Dim madate, annee%, num%, val%

  With Sheets("Feuil1")
   dl = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To dl
     On Error Resume Next
     madate = CDate(.Range("C" & i) & "/" & .Range("C" & i).Offset(0, -1) & "/" & .Range("C" & i).Offset(0, -2))
      annee = IIf(madate < CDate(.Range("C" & i) & "/" & "02" & "/" & "04"), CDbl(.Range("C" & i)) - 1, CDbl(.Range("C" & i)))
        num = CDbl(Mid(annee, 3, 1)) + CDbl(Mid(annee, 4, 1)): If num >= 10 Then num = CDbl(Mid(num, 1, 1)) + CDbl(Mid(num, 2, 1))
         If .Range("D" & i) Like "Homme" Then
          If CDbl(.Range("C" & i)) <= 2000 Then
           val = 10 - num
          ElseIf CDbl(.Range("C" & i)) > 2000 Then
           val = 9 - num
          End If
         ElseIf .Range("D" & i) Like "Femme" Then
          If CDbl(.Range("C" & i)) <= 2000 Then
           val = 5 + num: If val >= 10 Then val = CDbl(Mid(val, 1, 1)) + CDbl(Mid(val, 2, 1))
          ElseIf CDbl(.Range("C" & i)) > 2000 Then
           val = 6 + num: If val >= 10 Then val = CDbl(Mid(val, 1, 1)) + CDbl(Mid(val, 2, 1))
          End If
        End If
      .Range("E" & i) = val
    Next i
   End With
End Sub

Mais bon, ne vaut pas les fonctions de Pedro22,

Cordialement,

Bonjour à tous,

@xorsankukai : J'ai beaucoup aimé ta formule ! J'y pense pour tapisser mes murs, en la regardant ça m'apaise voir m'enivre. Ce motif est unique en son genre !

@tous : Félicitations pour vos propositions ! On dirait presque le cas pratique numéro 2 de h2sO4 !

Cdlt,

@tulipe On ne triche pas, pas de colonne intermédiaire ohoh

Mais sinon bravo, en reprenant ta formule tulipe, j'arrive à avoir une formule plus courte :

=SI(D2="Homme";SI(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1)<2000;10;9)-SIERREUR(SOMME(STXT(SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1);{1;2};{1;2})*1);SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1));SI(SI(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1)<2000;5;6)+SIERREUR(SOMME(STXT(SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1);{1;2};{1;2})*1);SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1))=10;1;SI(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1)<2000;5;6)+SIERREUR(SOMME(STXT(SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1);{1;2};{1;2})*1);SOMME(STXT(SI(DATE(C2;B2;A2)>DATE(C2;2;4);C2;C2-1);{3;4};{1;3})*1))))

Ça me fais penser, @VALIONNE je t'avais déjà aidé sur un fichier fin 2019 !

EDIT : En fait, avec la formule de Tulipe on pourrait avoir une formule totale "assez" concise mais le problème vient du fait que pour les femmes, on peut avoir un résultat = 10 qu'il faut passer à 1, ce qui fait faire : SI(formule_femme = 10;1;formule_femme) pour une formule totale sous la forme :
=SI(D2="Homme";formule_homme;SI(formule_femme = 10;1;formule_femme))

je pense qu'en passant avec un petit CHOISIR( ;;;; de derrière les fagots) on doit faire plus concis

Re,

@xorsankukai : J'ai beaucoup aimé ta formule ! J'y pense pour tapisser mes murs, en la regardant ça m'apaise voir m'enivre. Ce motif est unique en son genre !

ae13c1c18bc656f612818150aa8451cc

Bonjour à tous,

Houlala, ça c'est de la formule
Ma proposition :
=MOD(SI(D2="Homme";10-(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34)>=2000)-(MOD(DROITE(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34);2)-1;9)+1);5+(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34)>=2000)+(MOD(DROITE(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34);2)-1;9)+1));9)
eric

C'est pas les soldes mais une petite réduction quand même :
=MOD(SI(D2="Homme";10-(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34)>=2000);5+(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34)>=2000))-((D2="Homme")*2-1)*(MOD(DROITE(C2-(JOURS360(DATE(C2;1;1);DATE(C2;B2;A2))<34);2)-1;9)+1);9)
eric

PS : faute de précision sur les dates de bascule j'ai pris >=2000 et <=04/02
PS2 : je suis déçu, ça ne saute pas au yeux qu'il y a 50 car. de moins

Impressionnant, bravo Éric ! Tu as réduit drastiquement la taille de la formule

Première fois que je vois la fonction JOURS360() merci pour la découverte

Rechercher des sujets similaires à "calcul nombre gua"