OVH Cloud OVH Cloud

[HS] Distraction numérique

25 réponses
Avatar
Tatanka
Bonjour,

Il existe un seul nombre entier positif (Pierre de Fermat) tel que
celui qui le précède est un carré et celui qui le suit est un cube.
Quelle serait la plus courte macro permettant de le débusquer ?
En souvenir de la plus courte formule :-)

Serge

10 réponses

1 2 3
Avatar
Tatanka
(si déjà entre 2 et 65536 il n'y a que 26 ....)


Ta remarque vient de me rappeler quelque chose d'assez spécial :
http://www.cijoint.fr/cjlink.php?file=cj201008/cij7RksDTY.xls

Mais peut-être jadis l'ai-je déjà envoyé au MPFE.

Serge
Avatar
LSteph
Objection toutefois par rapport au sujet:

Il y a certes un légère différence c'est indéniable mais ce n'est p as
la raison pour laquelle le code de Serge ne fonctionnait pas

Il suffit de tester ce code avec ou sans déclaration du type
et le résultat est éloquent on a 26 dans le bon cas
et 2 dans le mauvais ' comme ici en commentaire

Sub Fermat_Steph()
'Dim a As Single, n As Single, b As Single
n = 2
test = False
Do


a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)


If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:
Exit Do
n = n + 1
Loop While test = False
[a1] = n
End Sub



On 2 août, 18:00, "michdenis" wrote:
| Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

Les concepteurs - programmeurs des fonctions de la feuille de calcul ne s ont pas les mêmes que ceux des fonctions
appartenant aux VBA. En conséquence, il y a des petites différences.. .

Un autre exemple :
Feuille de calcul :  =Arrondi(6.65;1)  retourne 6.7
En VBA = Round(6.65,1) retourne 6.6

Les 2 fonctions réfèrent à des codes différents -> ce sont 2 fonc tions différentes.
Celle en VBA est déficiente dans l'exemple donné.
Il vaut mieux utiliser = Application.WorksheetFunction.Round(6.65,1)
sachant que Application.WorksheetFunction utilise les fonctions de la feu ille de calcul

--
MichD
--------------------------------------------

"Tatanka" a écrit dans le message de gro upe de discussion :
i36o4t$
Bizz!

Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT(a)) .
Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int(a).
Ce qui explique la défaillance de la macro Fermat_Isabelle.
Quand même curieux que le modulo du VBA  ne soit pas identique
au modulo d'une feuille de calcul!
Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

Serge

"Tatanka" a écrit dans le message de new s: i36f4u$



> Plutôt ceci :

> Sub Fermat_Isabelle()
>    Do
>        n = n + 1
>        a = (n - 1) ^ 0.5
>        b = (n + 1) ^ (1 / 3)
>        If (a Mod Int(a) = 0) And (b Mod Int(b) = 0) Then Ex it Do
>    Loop
>    [a1] = n
> End Sub

> mais ça ne fonctionne pas non plus!

> "Tatanka" a écrit dans le message de n ews: i36dvg$
>> Bonjour Isabelle,

>> Tu as très bien compris la question et moi j'ai compris que tu voula is écrire ^ plutôt que * dans :
>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

>> Voici une solution ne contenant que 72 caractères sans compter les e spaces :
>> Sub Fermat_Serge()
>>    Do
>>        n = n + 1
>>        a = (n - 1) ^ 0.5
>>        b = (n + 1) ^ (1 / 3)
>>        If Int(a) = a And Int(b) = b Then Exit Do
>>    Loop
>>    [a1] = n
>> End Sub

>> Mais curieusement :
>> Sub Fermat_Isabelle()
>>    Do
>>        n = n + 1
>>        a = (n - 1) ^ 0.5
>>        b = (n + 1) ^ (1 / 3)
>>        If (a Mod Int(a) = 0) And (b Mod Int(b)) = 0 Then E xit Do
>>    Loop
>>    [a1] = n
>> End Sub
>> ne fonctionne pas!
>> Por qué?

>> A--
>> Serge

>> "isabelle" a écrit dans le message de news: i35djs$g4..
>>> bonjour Serge,

>>> je n'ai peut être pas compris la donne mais selon ma compréhensio n, un seul j'en doute... n(2,5,17,26,50,65...)

>>> =ET(MOD(RACINE(A1-1);ENT(RACINE(A1-1)))=0;MOD((A1+1)*(1/3);ENT((A 1+1)*(1/3)­))=0)

>>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

>>> isabelle

>>> Le 2010-08-01 17:22, Tatanka a écrit :
>>>> Bonjour,

>>>> Il existe un seul nombre entier positif (Pierre de Fermat) tel que
>>>> celui qui le précède est un carré et celui qui le suit est un cube.
>>>> Quelle serait la plus courte macro permettant de le débusquer ?
>>>> En souvenir de la plus courte formule :-)

>>>> Serge- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
Tatanka
Est-ce que tu peux faire fonctionner ta macro en utilisant
If (a Mod Int(a) = 0) And (b Mod Int(b) = 0)
plutôt que
If (a - Int(a) = 0) And (b - Int(b) = 0) ?


"LSteph" a écrit dans le message de news:
Objection toutefois par rapport au sujet:

Il y a certes un légère différence c'est indéniable mais ce n'est pas
la raison pour laquelle le code de Serge ne fonctionnait pas

Il suffit de tester ce code avec ou sans déclaration du type
et le résultat est éloquent on a 26 dans le bon cas
et 2 dans le mauvais ' comme ici en commentaire

Sub Fermat_Steph()
'Dim a As Single, n As Single, b As Single
n = 2
test = False
Do


a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)


If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:
Exit Do
n = n + 1
Loop While test = False
[a1] = n
End Sub



On 2 août, 18:00, "michdenis" wrote:
| Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

Les concepteurs - programmeurs des fonctions de la feuille de calcul ne sont pas les mêmes que ceux des fonctions
appartenant aux VBA. En conséquence, il y a des petites différences...

Un autre exemple :
Feuille de calcul : =Arrondi(6.65;1) retourne 6.7
En VBA = Round(6.65,1) retourne 6.6

Les 2 fonctions réfèrent à des codes différents -> ce sont 2 fonctions différentes.
Celle en VBA est déficiente dans l'exemple donné.
Il vaut mieux utiliser = Application.WorksheetFunction.Round(6.65,1)
sachant que Application.WorksheetFunction utilise les fonctions de la feuille de calcul

--
MichD
--------------------------------------------

"Tatanka" a écrit dans le message de groupe de discussion :
i36o4t$
Bizz!

Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT(a)).
Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int(a).
Ce qui explique la défaillance de la macro Fermat_Isabelle.
Quand même curieux que le modulo du VBA ne soit pas identique
au modulo d'une feuille de calcul!
Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

Serge

"Tatanka" a écrit dans le message de news: i36f4u$



> Plutôt ceci :

> Sub Fermat_Isabelle()
> Do
> n = n + 1
> a = (n - 1) ^ 0.5
> b = (n + 1) ^ (1 / 3)
> If (a Mod Int(a) = 0) And (b Mod Int(b) = 0) Then Exit Do
> Loop
> [a1] = n
> End Sub

> mais ça ne fonctionne pas non plus!

> "Tatanka" a écrit dans le message de news: i36dvg$
>> Bonjour Isabelle,

>> Tu as très bien compris la question et moi j'ai compris que tu voulais écrire ^ plutôt que * dans :
>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

>> Voici une solution ne contenant que 72 caractères sans compter les espaces :
>> Sub Fermat_Serge()
>> Do
>> n = n + 1
>> a = (n - 1) ^ 0.5
>> b = (n + 1) ^ (1 / 3)
>> If Int(a) = a And Int(b) = b Then Exit Do
>> Loop
>> [a1] = n
>> End Sub

>> Mais curieusement :
>> Sub Fermat_Isabelle()
>> Do
>> n = n + 1
>> a = (n - 1) ^ 0.5
>> b = (n + 1) ^ (1 / 3)
>> If (a Mod Int(a) = 0) And (b Mod Int(b)) = 0 Then Exit Do
>> Loop
>> [a1] = n
>> End Sub
>> ne fonctionne pas!
>> Por qué?

>> A--
>> Serge

>> "isabelle" a écrit dans le message de news: i35djs$
>>> bonjour Serge,

>>> je n'ai peut être pas compris la donne mais selon ma compréhension, un seul j'en doute... n(2,5,17,26,50,65...)

>>> =ET(MOD(RACINE(A1-1);ENT(RACINE(A1-1)))=0;MOD((A1+1)*(1/3);ENT((A1+1)*(1/3)­))=0)

>>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

>>> isabelle

>>> Le 2010-08-01 17:22, Tatanka a écrit :
>>>> Bonjour,

>>>> Il existe un seul nombre entier positif (Pierre de Fermat) tel que
>>>> celui qui le précède est un carré et celui qui le suit est un cube.
>>>> Quelle serait la plus courte macro permettant de le débusquer ?
>>>> En souvenir de la plus courte formule :-)

>>>> Serge- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
LSteph
Avant de partir sur une autre considération
Suite à tes questions précédentes je n'ai toujours pas pu m'assurer
que tu avais bien essayé ceci qui me semble répondre(pour le reste
essaye aussi ;o)
:

Sub Fermat_Steph()
Dim a As Single, n As Single, b As Single
n = 2
test = False
Do


a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)


If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:Exit Do
n = n + 1
Loop While test = False
[a1] = n
End Sub




On 2 août, 18:25, "Tatanka" wrote:
Est-ce que tu peux faire fonctionner ta macro en utilisant
If (a Mod Int(a) = 0) And (b Mod Int(b) = 0)
plutôt que
If (a - Int(a) = 0) And (b - Int(b) = 0) ?

"LSteph" a écrit dans le message de news: 243a8fe7
Objection toutefois par rapport au sujet:

Il y a certes un légère différence c'est indéniable mais ce n'est pas
la raison pour laquelle le code de Serge ne fonctionnait pas

Il suffit de tester ce code avec ou sans déclaration du type
et le résultat est éloquent on a 26 dans le bon cas
et 2 dans le mauvais ' comme ici en commentaire

Sub Fermat_Steph()
'Dim a As Single, n As Single, b As Single
n = 2
test = False
    Do

        a = (n - 1) ^ 0.5
        b = (n + 1) ^ (1 / 3)

        If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:
Exit Do
         n = n + 1
    Loop While test = False
    [a1] = n
End Sub

On 2 août, 18:00, "michdenis" wrote:



> | Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

> Les concepteurs - programmeurs des fonctions de la feuille de calcul ne sont pas les mêmes que ceux des fonctions
> appartenant aux VBA. En conséquence, il y a des petites différences ...

> Un autre exemple :
> Feuille de calcul : =Arrondi(6.65;1) retourne 6.7
> En VBA = Round(6.65,1) retourne 6.6

> Les 2 fonctions réfèrent à des codes différents -> ce sont 2 fo nctions différentes.
> Celle en VBA est déficiente dans l'exemple donné.
> Il vaut mieux utiliser = Application.WorksheetFunction.Round(6.65,1)
> sachant que Application.WorksheetFunction utilise les fonctions de la f euille de calcul

> --
> MichD
> --------------------------------------------

> "Tatanka" a écrit dans le message de g roupe de discussion :
> i36o4t$
> Bizz!

> Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT(a )).
> Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int(a) .
> Ce qui explique la défaillance de la macro Fermat_Isabelle.
> Quand même curieux que le modulo du VBA ne soit pas identique
> au modulo d'une feuille de calcul!
> Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

> Serge

> "Tatanka" a écrit dans le message de n ews: i36f4u$

> > Plutôt ceci :

> > Sub Fermat_Isabelle()
> > Do
> > n = n + 1
> > a = (n - 1) ^ 0.5
> > b = (n + 1) ^ (1 / 3)
> > If (a Mod Int(a) = 0) And (b Mod Int(b) = 0) Then Exit Do
> > Loop
> > [a1] = n
> > End Sub

> > mais ça ne fonctionne pas non plus!

> > "Tatanka" a écrit dans le message de news: i36dvg$
> >> Bonjour Isabelle,

> >> Tu as très bien compris la question et moi j'ai compris que tu vou lais écrire ^ plutôt que * dans :
> >> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

> >> Voici une solution ne contenant que 72 caractères sans compter les espaces :
> >> Sub Fermat_Serge()
> >> Do
> >> n = n + 1
> >> a = (n - 1) ^ 0.5
> >> b = (n + 1) ^ (1 / 3)
> >> If Int(a) = a And Int(b) = b Then Exit Do
> >> Loop
> >> [a1] = n
> >> End Sub

> >> Mais curieusement :
> >> Sub Fermat_Isabelle()
> >> Do
> >> n = n + 1
> >> a = (n - 1) ^ 0.5
> >> b = (n + 1) ^ (1 / 3)
> >> If (a Mod Int(a) = 0) And (b Mod Int(b)) = 0 Then Exit Do
> >> Loop
> >> [a1] = n
> >> End Sub
> >> ne fonctionne pas!
> >> Por qué?

> >> A--
> >> Serge

> >> "isabelle" a écrit dans le message de news: i35djs$g4
> >>> bonjour Serge,

> >>> je n'ai peut être pas compris la donne mais selon ma compréhens ion, un seul j'en doute... n(2,5,17,26,50,65...)

> >>> =ET(MOD(RACINE(A1-1);ENT(RACINE(A1-1)))=0;MOD((A1+1)*(1/3);ENT( (A1+1)*(1/3)­­))=0)

> >>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

> >>> isabelle

> >>> Le 2010-08-01 17:22, Tatanka a écrit :
> >>>> Bonjour,

> >>>> Il existe un seul nombre entier positif (Pierre de Fermat) tel que
> >>>> celui qui le précède est un carré et celui qui le suit est u n cube.
> >>>> Quelle serait la plus courte macro permettant de le débusquer ?
> >>>> En souvenir de la plus courte formule :-)

> >>>> Serge- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
Tatanka
J'avais essayé ta macro et elle fonctionnait à merveille.
Ce que je trouve bizz, c'est qu'en VBA, a - Int(a)
n'est pas équivalent à a Mod Int(a) alors que dans
une feuille de calcul, a-ENT(a) est équivalent à MOD(a;ENT(a)).


"LSteph" a écrit dans le message de news:
Avant de partir sur une autre considération
Suite à tes questions précédentes je n'ai toujours pas pu m'assurer
que tu avais bien essayé ceci qui me semble répondre(pour le reste
essaye aussi ;o)
:

Sub Fermat_Steph()
Dim a As Single, n As Single, b As Single
n = 2
test = False
Do


a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)


If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:Exit Do
n = n + 1
Loop While test = False
[a1] = n
End Sub




On 2 août, 18:25, "Tatanka" wrote:
Est-ce que tu peux faire fonctionner ta macro en utilisant
If (a Mod Int(a) = 0) And (b Mod Int(b) = 0)
plutôt que
If (a - Int(a) = 0) And (b - Int(b) = 0) ?

"LSteph" a écrit dans le message de news:

Objection toutefois par rapport au sujet:

Il y a certes un légère différence c'est indéniable mais ce n'est pas
la raison pour laquelle le code de Serge ne fonctionnait pas

Il suffit de tester ce code avec ou sans déclaration du type
et le résultat est éloquent on a 26 dans le bon cas
et 2 dans le mauvais ' comme ici en commentaire

Sub Fermat_Steph()
'Dim a As Single, n As Single, b As Single
n = 2
test = False
Do

a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)

If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:
Exit Do
n = n + 1
Loop While test = False
[a1] = n
End Sub

On 2 août, 18:00, "michdenis" wrote:



> | Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

> Les concepteurs - programmeurs des fonctions de la feuille de calcul ne sont pas les mêmes que ceux des fonctions
> appartenant aux VBA. En conséquence, il y a des petites différences...

> Un autre exemple :
> Feuille de calcul : =Arrondi(6.65;1) retourne 6.7
> En VBA = Round(6.65,1) retourne 6.6

> Les 2 fonctions réfèrent à des codes différents -> ce sont 2 fonctions différentes.
> Celle en VBA est déficiente dans l'exemple donné.
> Il vaut mieux utiliser = Application.WorksheetFunction.Round(6.65,1)
> sachant que Application.WorksheetFunction utilise les fonctions de la feuille de calcul

> --
> MichD
> --------------------------------------------

> "Tatanka" a écrit dans le message de groupe de discussion :
> i36o4t$
> Bizz!

> Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT(a)).
> Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int(a).
> Ce qui explique la défaillance de la macro Fermat_Isabelle.
> Quand même curieux que le modulo du VBA ne soit pas identique
> au modulo d'une feuille de calcul!
> Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

> Serge

> "Tatanka" a écrit dans le message de news: i36f4u$

> > Plutôt ceci :

> > Sub Fermat_Isabelle()
> > Do
> > n = n + 1
> > a = (n - 1) ^ 0.5
> > b = (n + 1) ^ (1 / 3)
> > If (a Mod Int(a) = 0) And (b Mod Int(b) = 0) Then Exit Do
> > Loop
> > [a1] = n
> > End Sub

> > mais ça ne fonctionne pas non plus!

> > "Tatanka" a écrit dans le message de news: i36dvg$
> >> Bonjour Isabelle,

> >> Tu as très bien compris la question et moi j'ai compris que tu voulais écrire ^ plutôt que * dans :
> >> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

> >> Voici une solution ne contenant que 72 caractères sans compter les espaces :
> >> Sub Fermat_Serge()
> >> Do
> >> n = n + 1
> >> a = (n - 1) ^ 0.5
> >> b = (n + 1) ^ (1 / 3)
> >> If Int(a) = a And Int(b) = b Then Exit Do
> >> Loop
> >> [a1] = n
> >> End Sub

> >> Mais curieusement :
> >> Sub Fermat_Isabelle()
> >> Do
> >> n = n + 1
> >> a = (n - 1) ^ 0.5
> >> b = (n + 1) ^ (1 / 3)
> >> If (a Mod Int(a) = 0) And (b Mod Int(b)) = 0 Then Exit Do
> >> Loop
> >> [a1] = n
> >> End Sub
> >> ne fonctionne pas!
> >> Por qué?

> >> A--
> >> Serge

> >> "isabelle" a écrit dans le message de news: i35djs$
> >>> bonjour Serge,

> >>> je n'ai peut être pas compris la donne mais selon ma compréhension, un seul j'en doute... n(2,5,17,26,50,65...)

> >>> =ET(MOD(RACINE(A1-1);ENT(RACINE(A1-1)))=0;MOD((A1+1)*(1/3);ENT((A1+1)*(1/3)­­))=0)

> >>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

> >>> isabelle

> >>> Le 2010-08-01 17:22, Tatanka a écrit :
> >>>> Bonjour,

> >>>> Il existe un seul nombre entier positif (Pierre de Fermat) tel que
> >>>> celui qui le précède est un carré et celui qui le suit est un cube.
> >>>> Quelle serait la plus courte macro permettant de le débusquer ?
> >>>> En souvenir de la plus courte formule :-)

> >>>> Serge- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
LSteph
Donc pour répondre tout de même à ta question , je reprends dans
l'ordre qui me de ce qui semble plus fondamental

Si tu as testé cette version avec les expression déclarée ou pas dans
un type décimal (single ou double) tu notes que cela fonctionne bien
dans un cas et pas dans l'autre car le calcul doit d'abord pouvoir
considérer les décimales au travers des variables utilisées.


Ensuite tu te demande pourquoi j'ai préfèré utiliser la différence
plutôt que mod
et je suppose que tu as testé que cette formule dans les deux cas ne
marche pas
et bien sans aller jusqu'à considérer les secrets des programmeurs
évoqués par ailleurs il est écrit ceci dans l'aide tout en bas:
"La partie décimale est tronquée"
Donc le reste de 10.2/5 devient l'expression 0
le reste de 10.2/3 devient 1
il y a bien un reste mais seul un reste entier est considéré.

--
LSteph





On 2 août, 18:33, LSteph wrote:
Avant de partir sur une autre considération
Suite à tes questions précédentes je n'ai toujours pas pu m'assurer
que tu avais bien essayé ceci qui me semble répondre(pour le reste
essaye aussi ;o)
:

Sub Fermat_Steph()
Dim a As Single, n As Single, b As Single
n = 2
test = False
    Do

        a = (n - 1) ^ 0.5
        b = (n + 1) ^ (1 / 3)

If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:Exit Do
         n = n + 1
    Loop While test = False
    [a1] = n
End Sub

On 2 août, 18:25, "Tatanka" wrote:



> Est-ce que tu peux faire fonctionner ta macro en utilisant
> If (a Mod Int(a) = 0) And (b Mod Int(b) = 0)
> plutôt que
> If (a - Int(a) = 0) And (b - Int(b) = 0) ?

> "LSteph" a écrit dans le message de news: 243a8f
> Objection toutefois par rapport au sujet:

> Il y a certes un légère différence c'est indéniable mais ce n'e st pas
> la raison pour laquelle le code de Serge ne fonctionnait pas

> Il suffit de tester ce code avec ou sans déclaration du type
> et le résultat est éloquent on a 26 dans le bon cas
> et 2 dans le mauvais ' comme ici en commentaire

> Sub Fermat_Steph()
> 'Dim a As Single, n As Single, b As Single
> n = 2
> test = False
>     Do

>         a = (n - 1) ^ 0.5
>         b = (n + 1) ^ (1 / 3)

>         If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:
> Exit Do
>          n = n + 1
>     Loop While test = False
>     [a1] = n
> End Sub

> On 2 août, 18:00, "michdenis" wrote:

> > | Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

> > Les concepteurs - programmeurs des fonctions de la feuille de calcul ne sont pas les mêmes que ceux des fonctions
> > appartenant aux VBA. En conséquence, il y a des petites différenc es...

> > Un autre exemple :
> > Feuille de calcul : =Arrondi(6.65;1) retourne 6.7
> > En VBA = Round(6.65,1) retourne 6.6

> > Les 2 fonctions réfèrent à des codes différents -> ce sont 2 fonctions différentes.
> > Celle en VBA est déficiente dans l'exemple donné.
> > Il vaut mieux utiliser = Application.WorksheetFunction.Round(6.65,1 )
> > sachant que Application.WorksheetFunction utilise les fonctions de la feuille de calcul

> > --
> > MichD
> > --------------------------------------------

> > "Tatanka" a écrit dans le message de groupe de discussion :
> > i36o4t$
> > Bizz!

> > Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT (a)).
> > Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int( a).
> > Ce qui explique la défaillance de la macro Fermat_Isabelle.
> > Quand même curieux que le modulo du VBA ne soit pas identique
> > au modulo d'une feuille de calcul!
> > Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?

> > Serge

> > "Tatanka" a écrit dans le message de news: i36f4u$

> > > Plutôt ceci :

> > > Sub Fermat_Isabelle()
> > > Do
> > > n = n + 1
> > > a = (n - 1) ^ 0.5
> > > b = (n + 1) ^ (1 / 3)
> > > If (a Mod Int(a) = 0) And (b Mod Int(b) = 0) Then Exit Do
> > > Loop
> > > [a1] = n
> > > End Sub

> > > mais ça ne fonctionne pas non plus!

> > > "Tatanka" a écrit dans le message de news: i36dvg$
> > >> Bonjour Isabelle,

> > >> Tu as très bien compris la question et moi j'ai compris que tu v oulais écrire ^ plutôt que * dans :
> > >> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1 ) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

> > >> Voici une solution ne contenant que 72 caractères sans compter l es espaces :
> > >> Sub Fermat_Serge()
> > >> Do
> > >> n = n + 1
> > >> a = (n - 1) ^ 0.5
> > >> b = (n + 1) ^ (1 / 3)
> > >> If Int(a) = a And Int(b) = b Then Exit Do
> > >> Loop
> > >> [a1] = n
> > >> End Sub

> > >> Mais curieusement :
> > >> Sub Fermat_Isabelle()
> > >> Do
> > >> n = n + 1
> > >> a = (n - 1) ^ 0.5
> > >> b = (n + 1) ^ (1 / 3)
> > >> If (a Mod Int(a) = 0) And (b Mod Int(b)) = 0 Then Exit Do
> > >> Loop
> > >> [a1] = n
> > >> End Sub
> > >> ne fonctionne pas!
> > >> Por qué?

> > >> A--
> > >> Serge

> > >> "isabelle" a écrit dans le message de news: i35djs$
> > >>> bonjour Serge,

> > >>> je n'ai peut être pas compris la donne mais selon ma compréhe nsion, un seul j'en doute... n(2,5,17,26,50,65...)

> > >>> =ET(MOD(RACINE(A1-1);ENT(RACINE(A1-1)))=0;MOD((A1+1)*(1/3);EN T((A1+1)*(1/3)­­­))=0)

> > >>> If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then

> > >>> isabelle

> > >>> Le 2010-08-01 17:22, Tatanka a écrit :
> > >>>> Bonjour,

> > >>>> Il existe un seul nombre entier positif (Pierre de Fermat) tel q ue
> > >>>> celui qui le précède est un carré et celui qui le suit est un cube.
> > >>>> Quelle serait la plus courte macro permettant de le débusquer ?
> > >>>> En souvenir de la plus courte formule :-)

> > >>>> Serge- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
Tatanka
"et bien sans aller jusqu'à considérer les secrets des programmeurs
évoqués par ailleurs il est écrit ceci dans l'aide tout en bas:
"La partie décimale est tronquée"
Donc le reste de 10.2/5 devient l'expression 0
le reste de 10.2/3 devient 1
il y a bien un reste mais seul un reste entier est considéré."

Oui oui, c'est bien ce que j'avais remarqué.
Mais je ne comprends toujours pas pourquoi les programmeurs VBA
n'ont pas téléphoné aux programmeurs de formules de feuilles de calcul
pour faire en sorte que a Mod b donne le même résultat que MOD(a;b) :-)))
Avatar
michdenis
| Mais je ne comprends toujours pas pourquoi les programmeurs VBA
| n'ont pas téléphoné aux programmeurs de formules de feuilles de calcul
| pour faire en sorte que a Mod b donne le même résultat que MOD(a;b) :-)))

Ce sont des équipes différentes probablement dans 2 régions du monde différentes
et que l'intégration du code pour donner l'application Excel telle que l'on connaît
est probablement réalisée par une troisième équipe... Comme tout ce beau monde
ne se connaît pas et ne connaît même pas l'existence des autres équipes de travail,
il est difficile qu'il se coordonne !

--
MichD
--------------------------------------------
Avatar
michdenis
====>>> il est difficile qu'ELLES se coordonnent !

--
MichD
--------------------------------------------
Avatar
LSteph
Oui j'ai bien compris.
Il y a une distinction tout de même qui n'engage pas forcément de
concertation
c'est que mod du basic n'avait peut-etre pas au depart le même
objectif de precision
car à l'origine c'est un opérateur contrairement à MOD() d'excel qui
est une fonction.
Toutefois si on tient compte de la différence entre integer et single
ou double en multipliant à hauteur
on pourrait obtenir un code satisfaisant.
Mais si le mod d'excel paraît plus élégant qu'une différence entre
entier et décimal dans la feuille
ce calcul de différence est finalmement plus simple amha dans le code
VBA.

En tout cas voilà un sujet qui nous permettra d'éviter des erreurs
qu'on aurait pas forcément pressenti.

J'ai aussi vu ton lien sur l'autre partie du fil , tu as bien raison
ce qui paraît logique reste souvent bien plus difficile à démontrer.


@++

LSteph


On 2 août, 19:29, "Tatanka" wrote:
"et bien sans aller jusqu'à considérer les secrets des programmeurs
évoqués par ailleurs il est écrit ceci dans l'aide tout en bas:
"La partie décimale est tronquée"
Donc le reste de 10.2/5 devient l'expression  0
le reste de 10.2/3 devient 1
il y a bien un reste mais seul un reste entier est considéré."

Oui oui, c'est bien ce que j'avais remarqué.
Mais je ne comprends toujours pas pourquoi les programmeurs VBA
n'ont pas téléphoné aux programmeurs de formules de feuilles de cal cul
pour faire en sorte que a Mod b donne le même résultat que  MOD(a;b ) :-)))
1 2 3