OVH Cloud OVH Cloud

Comparer 2 nombres à 18 chiffres

10 réponses
Avatar
Joël
Bonjour,

Dans VBA, 2 nombres étudiés sous forme de texte contenant 18 chiffres dont
les 2 derniers sont différents sont considérés comme égaux !

ex :
5434567890123456700 (N1 sous forme de texte)
et
5434567890123456799 (N2 sous forme de texte)

par quelle méthode pourrais-je déterminer le plus grand des 2 ?

La procédure suivante considère que N1 = N2, ce qui n'est pas vrai.

if cdbl(N1) >= cdbl(N2) then
msgbox erreur
endif

Voius remerciant de vos lumières...

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr

10 réponses

Avatar
AV
MsgBox [N1] > [N2]

AV
Avatar
Joël
Merci AV pour t'être penché sur ma question...

Malheureusement, il semble que je n'ait pas été explicite suffisamment, car
ta proposition ne fonctionne pas sur des nombre à 18 chiffres.

Mais ne te fatigue pas plus, j'ai une une réponse d'impossibilité sur le
forum Access.
dixit Raymond :
================================================ tu dépasses les limites maxi d'un double :
aide access:
Les variables de type Double (à virgule flottante en double précision) sont
stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets)
IEEE dont la valeur est comprise entre -1,79769313486231E308
et -4,94065645841247E-324 pour les nombres négatifs et entre
4,94065645841247E-324 et 1,79769313486231E308 pour les positifs. Le
caractère de déclaration de type Double est le signe #.

j'espère que ce n'est pas le solde de ton compte en suisse ? tu fais quoi
avec ce montant ?

=================================================
auquel j'ai répondu :
================================================= Merci Raymond pour cette réponse.

Pour information, il ne s'agit pas de montants (ce n'est pas le solde de mon
compte en Suisse hélas... quoi que), mais 2 numéros de téléphone au format
international que je dois comparer.

Dans la mesure où ces numéros me sont envoyés par l'application au format
texte, je me suis résigné à écrire une procédure comparant un à un les
différents chiffres composant ces numéros, me donnant le plus grand des
deux.

Encore merci, et bon courage...
==================================================
merci à toi ...
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"AV" a écrit dans le message de news:
Or%
MsgBox [N1] > [N2]

AV




Avatar
Norvi
Bonjour,

Une fonction (qui doit pouvoir être grandement simplifiée !!!) qui te
permet de comparer deux numéros stockés au format texte, quelque soit
leur nombre de caractères :

Function COMPARE(Val1, Val2)
Dim Nb_Analyse, Nb_LastNombre, Limite_Excel, i As Integer
Dim ListeComparaison()

If Len(Val1) > Len(Val2) Then COMPARE = Val1 & " est supérieure à " &
Val2
If Len(Val1) < Len(Val2) Then COMPARE = Val2 & " est supérieure à " &
Val1
If Len(Val1) = Len(Val2) Then
Limite_Excel = 11

Nb_Analyse = Application.WorksheetFunction.RoundUp(Len(Val1) /
Limite_Excel, 0)

For i = 1 To Nb_Analyse
Nb_LastNombre = Limite_Excel - ((Limite_Excel * Nb_Analyse) -
Len(Val1))
If i = Nb_Analyse Then
Nb_LastNombre = Limite_Excel - ((Limite_Excel * Nb_Analyse) -
Len(Val1))
Else
Nb_LastNombre = Limite_Excel
End If

ReDim Preserve ListeComparaison(1, i)
ListeComparaison(0, i - 1) = Right(Left(Val1, (Limite_Excel * i)),
Nb_LastNombre)
ListeComparaison(1, i - 1) = Right(Left(Val2, (Limite_Excel * i)),
Nb_LastNombre)
Next

For i = 1 To Nb_Analyse
If ListeComparaison(0, i - 1) > ListeComparaison(1, i - 1) Then COMPARE
= Val1 & " est le plus grand"
If ListeComparaison(0, i - 1) < ListeComparaison(1, i - 1) Then COMPARE
= Val2 & " est le plus grand"
If ListeComparaison(0, i - 1) = ListeComparaison(1, i - 1) Then COMPARE
= Val1 & " et " & Val2 & " sont égaux"
Next
End If

End Function
Avatar
Jacquouille
Bonjour
S'il n'y a vraiment que des chiffres, pourquoi ne pas les multiplier par 1
dans une autre cellule, puis effectuer la comparaison des résultats ?


--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"Joël" a écrit dans le message de news:
443cb5f6$0$18316$
Merci AV pour t'être penché sur ma question...

Malheureusement, il semble que je n'ait pas été explicite suffisamment,
car ta proposition ne fonctionne pas sur des nombre à 18 chiffres.

Mais ne te fatigue pas plus, j'ai une une réponse d'impossibilité sur le
forum Access.
dixit Raymond :
================================================ > tu dépasses les limites maxi d'un double :
aide access:
Les variables de type Double (à virgule flottante en double précision)
sont
stockées sous la forme de nombres à virgule flottante de 64 bits (8
octets)
IEEE dont la valeur est comprise entre -1,79769313486231E308
et -4,94065645841247E-324 pour les nombres négatifs et entre
4,94065645841247E-324 et 1,79769313486231E308 pour les positifs. Le
caractère de déclaration de type Double est le signe #.

j'espère que ce n'est pas le solde de ton compte en suisse ? tu fais quoi
avec ce montant ?

================================================= >
auquel j'ai répondu :
================================================= > Merci Raymond pour cette réponse.

Pour information, il ne s'agit pas de montants (ce n'est pas le solde de
mon
compte en Suisse hélas... quoi que), mais 2 numéros de téléphone au format
international que je dois comparer.

Dans la mesure où ces numéros me sont envoyés par l'application au format
texte, je me suis résigné à écrire une procédure comparant un à un les
différents chiffres composant ces numéros, me donnant le plus grand des
deux.

Encore merci, et bon courage...
================================================== >
merci à toi ...
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"AV" a écrit dans le message de news:
Or%
MsgBox [N1] > [N2]

AV








Avatar
Clément Marcotte
Bonjour,

Y a juste le problème de la limite de 15 chiffres dans Excel... ;-)




"Jacquouille" a écrit dans le message de
news: eCggc%
Bonjour
S'il n'y a vraiment que des chiffres, pourquoi ne pas les multiplier par 1
dans une autre cellule, puis effectuer la comparaison des résultats ?


--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"Joël" a écrit dans le message de news:
443cb5f6$0$18316$
Merci AV pour t'être penché sur ma question...

Malheureusement, il semble que je n'ait pas été explicite suffisamment,
car ta proposition ne fonctionne pas sur des nombre à 18 chiffres.

Mais ne te fatigue pas plus, j'ai une une réponse d'impossibilité sur le
forum Access.
dixit Raymond :
================================================ >> tu dépasses les limites maxi d'un double :
aide access:
Les variables de type Double (à virgule flottante en double précision)
sont
stockées sous la forme de nombres à virgule flottante de 64 bits (8
octets)
IEEE dont la valeur est comprise entre -1,79769313486231E308
et -4,94065645841247E-324 pour les nombres négatifs et entre
4,94065645841247E-324 et 1,79769313486231E308 pour les positifs. Le
caractère de déclaration de type Double est le signe #.

j'espère que ce n'est pas le solde de ton compte en suisse ? tu fais quoi
avec ce montant ?

================================================= >>
auquel j'ai répondu :
================================================= >> Merci Raymond pour cette réponse.

Pour information, il ne s'agit pas de montants (ce n'est pas le solde de
mon
compte en Suisse hélas... quoi que), mais 2 numéros de téléphone au
format
international que je dois comparer.

Dans la mesure où ces numéros me sont envoyés par l'application au format
texte, je me suis résigné à écrire une procédure comparant un à un les
différents chiffres composant ces numéros, me donnant le plus grand des
deux.

Encore merci, et bon courage...
================================================== >>
merci à toi ...
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"AV" a écrit dans le message de news:
Or%
MsgBox [N1] > [N2]

AV












Avatar
Clément Marcotte
Bonjour,
Pas testé. (Je le ferai plus tard, si j'ai le temps)

avec, en en-tête de module:

Option compare text

puis:

Sub cesttupareil()
N1 = 5434567890123456700
N2 = 5434567890123456799
if N1 >= N2 then
endif
end sub


"Joël" a écrit dans le message de news:
443cabc9$0$19699$
Bonjour,

Dans VBA, 2 nombres étudiés sous forme de texte contenant 18 chiffres dont
les 2 derniers sont différents sont considérés comme égaux !

ex :
5434567890123456700 (N1 sous forme de texte)
et
5434567890123456799 (N2 sous forme de texte)

par quelle méthode pourrais-je déterminer le plus grand des 2 ?

La procédure suivante considère que N1 = N2, ce qui n'est pas vrai.

if cdbl(N1) >= cdbl(N2) then
msgbox erreur
endif

Voius remerciant de vos lumières...

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr



Avatar
Joël
Merci à tous,

Je m'en suis sorti en créant une fonction personnalisée, sachant qu'il y
avait diverses solutions.

notamment, celle-ci par exemple :

MsgBox (Space(18 - Len(N1)) & N1) > (Space(18 - Len(N2)) & N2)

Encore merci
--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Joël" a écrit dans le message de news:
443cabc9$0$19699$
Bonjour,

Dans VBA, 2 nombres étudiés sous forme de texte contenant 18 chiffres dont
les 2 derniers sont différents sont considérés comme égaux !

ex :
5434567890123456700 (N1 sous forme de texte)
et
5434567890123456799 (N2 sous forme de texte)

par quelle méthode pourrais-je déterminer le plus grand des 2 ?

La procédure suivante considère que N1 = N2, ce qui n'est pas vrai.

if cdbl(N1) >= cdbl(N2) then
msgbox erreur
endif

Voius remerciant de vos lumières...

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr



Avatar
Clément Marcotte
Oups!!! manque le msgbox dans le IF


"Clément Marcotte" a écrit dans le message
de news:
Bonjour,
Pas testé. (Je le ferai plus tard, si j'ai le temps)

avec, en en-tête de module:

Option compare text

puis:

Sub cesttupareil()
N1 = 5434567890123456700
N2 = 5434567890123456799
if N1 >= N2 then
endif
end sub


"Joël" a écrit dans le message de news:
443cabc9$0$19699$
Bonjour,

Dans VBA, 2 nombres étudiés sous forme de texte contenant 18 chiffres
dont les 2 derniers sont différents sont considérés comme égaux !

ex :
5434567890123456700 (N1 sous forme de texte)
et
5434567890123456799 (N2 sous forme de texte)

par quelle méthode pourrais-je déterminer le plus grand des 2 ?

La procédure suivante considère que N1 = N2, ce qui n'est pas vrai.

if cdbl(N1) >= cdbl(N2) then
msgbox erreur
endif

Voius remerciant de vos lumières...

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr







Avatar
Patrick BASTARD
Bonjour, *Joël*

Un début de solution, sans VBA, et si on ne compare que les 16 premiers
chiffres de 2 nombres situés en A1 et A2:
=SI(GAUCHE(A1;16)>=GAUCHE(A2;16);A1;A2)
Si c'est le résultat souhaité, facile à adapter avec l'enregistreur de macro
--
Bien amicordialement,
P. Bastard



Bonjour,

Dans VBA, 2 nombres étudiés sous forme de texte contenant 18 chiffres
dont les 2 derniers sont différents sont considérés comme égaux !

ex :
5434567890123456700 (N1 sous forme de texte)
et
5434567890123456799 (N2 sous forme de texte)

par quelle méthode pourrais-je déterminer le plus grand des 2 ?

La procédure suivante considère que N1 = N2, ce qui n'est pas vrai.

if cdbl(N1) >= cdbl(N2) then
msgbox erreur
endif

Voius remerciant de vos lumières...


Avatar
AV
| Malheureusement, il semble que je n'ait pas été explicite suffisamment, car
| ta proposition ne fonctionne pas sur des nombre à 18 chiffres.
| Mais ne te fatigue pas plus, j'ai une une réponse d'impossibilité sur le
| forum Access.

Avec des cellules au format texte, chez moi il n y'a aucun souci dans le nombre
de chiffres !

Voir là :
http://cjoint.com/?emtAAb3FgV

AV