Transformer un nombre décimale en quotient

  • Initiateur de la discussion Initiateur de la discussion MJ13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MJ13

XLDnaute Barbatruc
Bonjour à tous

J'ai des chiffres comme 0,001 pour 1/1000, 0,00625 pour 1/160...

Comment trouver ce N du quotient 1/N en macro ou formule ?

Merci d'avance 🙂.
 
Dernière édition:
Re : Transformer un nombre décimale en quotient

Bonjour Michel,

Peut-être

Code:
=DROITE(TEXTE(A1;"?/??????????");NBCAR(TEXTE(A1;"?/??????????"))-CHERCHE("/";TEXTE(A1;"?/??????????")))*1

En Macro ça serait surement intéressant, si quelqu'un a une piste pour l'analyse
 
Re : Transformer un nombre décimale en quotient

Bonjour Tototiti, Hoerwind.

Après test, vos 2 solutions semblent focntionner. Merci beaucoup. Il faut maintenant que je le transforme en VBA 😕.

PS: Autant pour moi, 1/160 et non 1/60 (erreur de frappe 😱).
 
Re : Transformer un nombre décimale en quotient

Re

Bon, j'ai fait ceci et cela à l'air de fonctionner.

Code:
ActiveCell.FormulaR1C1 = "'1/" & (1 / ActiveCell.Value)

Ou en sélectionnant les cellules:

Code:
Sub Photo_Transforme_Vitesse_en_1_sur()
    For Each cell In Selection
    cell.Select
    If IsNumeric(ActiveCell) And ActiveCell <> "" Then ActiveCell.FormulaR1C1 = "'1/" & (1 / ActiveCell.Value)
    Next
End Sub

Encore merci à vous 2 🙂.
 
Dernière édition:
Re : Transformer un nombre décimale en quotient

Bonjour MJ, Tototiti, Hoerwind,

Pour des fractions de la forme 1/x avec x appartenant à N, les solutions précédentes sont suffisantes. Mais pour 1,01875 (=163/160) ?

Une solution pour les décimaux (jusqu'à 9 chiffres après la virgules pour rester dans les Longs). La fonction à utiliser est la première (voir classeur). Cette fonction ne reconnaitra pas que 0,333333333 = 1/3 mais affichera bien 163/160 dans l'exemple précédent.

VB:
Function DcToQt$(x#)
Dim xt$, p%, n&, d&, c%, y&, z1, z2
    xt = x
    p = InStr(1, xt, ",")
    If p = 0 Then
        DcToQt = x
        Exit Function
    End If
    If Len(xt) > 9 + p Then
        DcToQt = "Non Décimal"
        Exit Function
    End If
    n = Left(xt, p - 1)
    c = Len(xt) - p
    d = Right(xt, c)
    y = (1 & String(c, "0"))
    z1 = Smp(d, y, 1)
    z2 = Smp(d, y, 2)
    DcToQt = (n * z2 + z1) & "/" & z2
End Function

Private Function Smp&(x&, y&, Arg%)
'(1) x/pgcd(x,y),(2) y/pgcd(x,y)
Dim a&, b&, c&
    a = x: b = y
    Do While a Mod b <> 0
        c = a: a = b: b = c Mod b
    Loop
    Select Case Arg
        Case 1
            Smp = Int(x / b)
        Case 2
            Smp = Int(y / b)
    End Select
End Function

Pour aller plus loin, les fonctions du classeur GNQ (https://www.excel-downloads.com/threads/gnq.160833/) vous intéresseront peut-être (opérations exactes sur les grands nombres dans l'ensemble Q). Cordialement

KD
 

Pièces jointes

Re : Transformer un nombre décimale en quotient

Bonjour Kendev, à tous

Merci Kendev pour cette fonction miraculeuse qui montre tes talents de mathématicien (cela me rappelle un certain Roger 😱).

Par contre pour le fichier GNQ, cela paraît bien, mais comme souvent, avec ce type de fichier, sans exemple de ce qu'on peut faire, j'ai bien peur que tu ne sois le seul à pouvoir l'utiliser 😕. Si tu pouvais nous mettre un petit exemple, ce serait un plus 🙂.
 
Re : Transformer un nombre décimale en quotient

Salut

Si... tu ne veux pas de complications, essaie cela
Code:
Sub Photo_Transforme_Vitesse_en_1_sur()
    For Each Cell In Selection
      If IsNumeric(Cell) And Cell <> "" Then Cell.Value = "'1/" & 1 / Cell
    Next
End Sub
 
Dernière édition:
Re : Transformer un nombre décimale en quotient

Bonjour le fil 🙂,
Pour le fun, une solution en formule 😉...
Désolé pour la version 2007 😱, mais je ne suis pas sûr que le format personnalisé "fraction" existait déjà en 2003, sinon, il suffit juste de remplacer le SiErreur par un Si(EstErreur), mais je n'ai pas eu envie de dupliquer une partie de la formule, vu qu'elle est déjà (un peu 😛) longue 🙄
Code:
=SIERREUR(GAUCHE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));TROUVE(" ";TEXTE(A2;"#""  ""???/???")))*DROITE(DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???"))));NBCAR(DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))))-TROUVE("/";DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???"))))))+GAUCHE(DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???"))));TROUVE("/";DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))))-1)&"/"&DROITE(DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???"))));NBCAR(DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))))-TROUVE("/";DROITE(SUPPRESPACE(TEXTE(A2;"#""  ""???/???"));NBCAR(SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))-TROUVE(" ";SUPPRESPACE(TEXTE(A2;"#""  ""???/???"))))));SUPPRESPACE(TEXTE(A2;"#""  ""???/???")))
Bon WE 😎
Ajout : A noter qu'il trouve bien 7/3 pour 2,3333333333333 😛, mais le résultat en ligne 16 est légèrement erronné 😱
 

Pièces jointes

Dernière édition:
Re : Transformer un nombre décimale en quotient

Bonjour à Tous,

@MJ : Ci-joint GNQ_plus (j'ai ajouté les exposants q^n, l'aléatoire Q, et somme et produit sur range).
Les deux premières lignes sont aléatoire, chaque ligne de 3 à 9 illustre une fonction, la ligne 10 illustre la possibilité d'imbriquer ces fonctions. F9 pour changer les 2 lignes de départ.
La ligne 12 est le résultat de l'opération 237^237. Pour le coup j'ai copié spécial valeur à cause du temps de calcul, (à vu de nez une grosse minute). Obtenu avec l'entrée = =xpqn(237;237)) (563 chiffres)

Ah Roger ! Pour l'instant tout ce que j'ai réussi à lui piquer c'est l'utilisation des &,$,%...

@JNP : oh la jolie formule !!

Cordialement

KenDev
 

Pièces jointes

Dernière édition:
Re : Transformer un nombre décimale en quotient

Re 🙂,
@JNP : oh la jolie formule !!
Surtout que j'ai été très loin pour pas forcément grand chose 😱...
J'aurais du d'abord bidouiller sur les formats personnalisés 🙄...
La voici (un peu 😛) raccourcie
Code:
=SI(DROITE(TEXTE(A2;"??????/??????");2)="/1";GAUCHE(TEXTE(A2;"??????/??????");NBCAR(TEXTE(A2;"??????/??????"))-2);TEXTE(A2;"??????/??????"))
@ Michel : Si tu veux que de l'obturation, tu peux appliquer directement le format personnalisé
Code:
?/????
sur tes cellules et tu n'auras même pas de formules à utiliser 😛...
Bon WE 😎
 
Re : Transformer un nombre décimale en quotient

Re KenDev, Bonjour Jean-Noël, Si (pas vu 😱)

Merci pour vos compléments 🙂.

J'étudierai cela plus tard, Week-end Obblige, mais je vais acheter 1 camion de Dolicrane avant 😱.

Bon Week-end 🙂.

Pour Si..., c'est marant, j'avais remplacer le active par rien dans mon code for each, et cela me donnait ton code. (bien sur en commentant cell.select). Merci aussi 🙂.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
284
Réponses
2
Affichages
379
Réponses
23
Affichages
682
Retour