Excel et les grands nombres

Bonjour,

Certains d'entre-vous m'ont déjà aidé dans mon problème, mais les solutions n'étaient pas satisfaisantes. Je les en remercie tout de même car ils m'ont permis d'avancer.

Mes soucis sont qu'au delà de 15 chiffres Excel ne sait plus calculer (ou donne des résultats faux).

J'ai réussi à avoir un résultat sur un nombre à 15 chiffres multiplié par 2 grâce à une macro qui transforme le résultat en texte (je ne fais que des multiplications par 2).

Jusque là tout va bien, mais je voudrais maintenant inclure une manip qui peut sembler facile mais qui me bloque car je ne suis pas un expert en VBA.

Je voudrais :

  • Me positionner sur la cellule à multiplier
  • Lancer ma macro (donc j'aurais un résultat)
  • Et qu'en cliquant sur la cellule de destination du résultat, ce résultat s'affiche dans la cellule en question

Ou si vous pensez qu'une autre solution serait plus rapide ... je suis preneur ! (sachant que la cellule de destination n'est jamais au même endroit par rapport à la cellule source)

Merci d'avance à tous ceux qui me permettront d'avancer

Cordialement

Bonjour,

Et où se trouve ta cellule de destination par rapport à la cellule source ? C'est une position aléatoire ? Si ce n'est pas le cas, quelle est la règle ? Peux tu nous joindre un fichier exemple avec ta macro actuelle ?

Bonjour, Salut Pedro !

Essaie ce code :

Sub Test()
    Dim cS As Range, cC As Range
    Set cS = ActiveCell
    On Error GoTo Erreur
    Set cC = Application.InputBox("Votre cellule source est " & cS.Address(0, 0) _
     & "." & Chr(10) & "Sélectionnez maintenant la cellule cible.", "Sélection cible", _
     Type:=8)
    If cC.Cells.Count > 1 Then GoTo Erreur
    Exit Sub
Erreur:
    MsgBox "Vous n'avez pas sélectionné une cellule !", vbCritical, "Erreur"
End Sub

Au terme de l'exécution, tu disposeras de 2 variables Range : cS, la cellule source, et cC, la cellule cible. Tu les fournis en arguments à ta procédure de calcul, qui pourra ainsi calculer à partir de la valeur de la cellule source, et affecter le résultat à ta cellule cible.

(Ou si c'est une Function qui opère le calcul, tu l'appelles en lui fournissant la valeur source, et tu affectes le résultat qu'elle renvoie à la cible.)

Cordialement.

Bonjour,

tu te fous du monde ou quoi ?

https://forum.excel-pratique.com/viewtopic.php?p=688968#p688968 faisait ça et même beaucoup plus.

J'ai donc supprimé le fichier puisque ça ne t’intéresse pas.

eric

Bonjour,

tu te fous du monde ou quoi ?

https://forum.excel-pratique.com/viewtopic.php?p=688968#p688968 faisait ça et même beaucoup plus.

J'ai donc supprimé le fichier puisque ça ne t’intéresse pas.

eric

Bonjour Eriiic,

Je te prie sincèrement de m'excuser !

Je n'avais tout simplement pas vu ton message ! Je ne comprends pas bien les manips sur ce forum. Quand je l'ouvre je vois quelques messages et quand je réponds ... d'autres messages apparaissent, c'est ce qui vient de se passer.

Je te présente encore toutes mes excuses ... car tu penses bien que si j'avais vu une solution fournie j'aurais sauté dessus !

Cette bévue m'a permis tout de même d'avancer, mais je reste toujours très intéressé par ta solution si tu as la gentillesse de me la renvoyer.

Je te propose même de me la renvoyer sur patrick.haro AT gmail.com où je serais plus à l'aise.

Toutes mes excuses encore pour ce message que je n'avais pas vu ! Et merci pour le mal que tu te donnes !

Cordialement

Lorsque le nombre de messages dépasse une certaine taille, l'ajout de nouveaux messages se fait sur de nouvelles pages. Si tu n'utilises pas le raccourci pour voir le dernier post, il faut se rendre sur la dernière page en cliquant sur la zone concernée au dessus du premier post de la page ou en dessous du dernier.

Bonjour, Salut Pedro !

Essaie ce code :

Sub Test()
    Dim cS As Range, cC As Range
    Set cS = ActiveCell
    On Error GoTo Erreur
    Set cC = Application.InputBox("Votre cellule source est " & cS.Address(0, 0) _
     & "." & Chr(10) & "Sélectionnez maintenant la cellule cible.", "Sélection cible", _
     Type:=8)
    If cC.Cells.Count > 1 Then GoTo Erreur
    Exit Sub
Erreur:
    MsgBox "Vous n'avez pas sélectionné une cellule !", vbCritical, "Erreur"
End Sub

Au terme de l'exécution, tu disposeras de 2 variables Range : cS, la cellule source, et cC, la cellule cible. Tu les fournis en arguments à ta procédure de calcul, qui pourra ainsi calculer à partir de la valeur de la cellule source, et affecter le résultat à ta cellule cible.

(Ou si c'est une Function qui opère le calcul, tu l'appelles en lui fournissant la valeur source, et tu affectes le résultat qu'elle renvoie à la cible.)

Cordialement.

Merci MFerrad pour ce message,

J'ai essayé ta procédure qui m'a l'air bien mais je n'ai pas de résultat ... quand j'interroge cC j'ai un blanc !

Pour faire plus simple, dis-moi quoi faire :

J'ai fait une procédure qui me donne un variable appelée "Resultat" qui contient bien le nombre que je veux (au format texte)

Où dois-je placer ta procédure ? Avant la mienne ? Après la mienne ? Dans la mienne ? Quelle interaction entre ta procédure et la mienne ?

Mes questions doivent te paraître puériles ... mais je suis loin d'être un crack !

Cordialement

Bonjour,

quand j'interroge cC j'ai un blanc !

Tu interroges comment ?

Ta procédure de calcul est de quel type ?

Bonjour,

quand j'interroge cC j'ai un blanc !

Tu interroges comment ?

Ta procédure de calcul est de quel type ?

J'ai mis ta procédure après la mienne et j'ai mis un "MsgBox cC" avant le End Sub ... ça me donne une fenêtre blanche !

Quant à ma procédure la voici ... ne te moques pas de moi !

Sub Essai_pour_15_chiffres()

Orig = ActiveCell.Value 'Orig = cellule d'Origine

Orig1 = Left(Orig, 3) 'Orig1 = les 3 premiers chiffres de Orig

Orig2 = Mid(Orig, 4, 3) 'etc ...

Orig3 = Mid(Orig, 7, 3)

Orig4 = Mid(Orig, 10, 3)

Orig5 = Right(Orig, 3)

Dest5 = Val(Orig5) * 2 'Multiplication des 3 derniers chiffres de la cellule d'origine

Retenue = IIf(Dest5 > 999, 1, 0) 'Au cas où il y ait une retenue après la multiplication

Dest5 = Right(Dest5, 3) 'Les 3 derniers chiffres du résultat

'etc ...

Dest4 = Val(Orig4) * 2 + Retenue

Retenue = IIf(Dest4 > 999, 1, 0)

Dest4 = Right(Dest4, 3)

Dest3 = Val(Orig3) * 2 + Retenue

Retenue = IIf(Dest3 > 999, 1, 0)

Dest3 = Right(Dest3, 3)

Dest2 = Val(Orig2) * 2 + Retenue

Retenue = IIf(Dest2 > 999, 1, 0)

Dest2 = Right(Dest2, 3)

Dest1 = Val(Orig1) * 2 + Retenue

Dest1 = IIf(Dest1 > 999, "1 " & Dest1 - 1000, Dest1)

Resultat = "'" & Dest1 & " " & Dest2 & " " & Dest3 & " " & Dest4 & " " & Dest5

End Sub

Avec :

    MsgBox cC

il est normal que tu aies un blanc si ta cellule ne contient rien !

   MsgBox cC.Address

Pour avoir confirmation de la cellule que tu as sélectionnée.

Je ne vérifie pas ta procédure !

En l'état, tu peux la doter d'arguments :

Sub Essai_pour_15_chiffres(ByVal Orig As String, cDest As Range)

Tu supprimes la première ligne, puisque Orig sera fourni en argument.

Tu traites comme texte, je suppose donc qu'il s'agit d'une donnée String, le cas échéant il sera sage de la convertir pour la passer...

(NB- Il serait bon aussi de déclarer tes variables en tête de procédure...)

Et tu modifies la dernière ligne :

    cDest.Value = "'" & Dest1 & " " & Dest2 & " " & Dest3 & " " & Dest4 & " " & Dest5

qui affectera le résultat.

La procédure que j'ai fournie est alors à compléter ainsi :

Sub Test()
    Dim cS As Range, cC As Range
    Set cS = ActiveCell
    On Error GoTo Erreur
    Set cC = Application.InputBox("Votre cellule source est " & cS.Address(0, 0) _
     & "." & Chr(10) & "Sélectionnez maintenant la cellule cible.", "Sélection cible", _
     Type:=8)
    If cC.Cells.Count > 1 Then GoTo Erreur
    Essai_pour_15_chiffres CStr(cS.Value), cC
    Exit Sub
Erreur:
    MsgBox "Vous n'avez pas sélectionné une cellule !", vbCritical, "Erreur"
End Sub

Ou bien tu transformes ta Sub en Function (tu ne lui passes lors que la valeur à traiter :

Function Essai_pour_15_chiffres(ByVal Orig As String)
    '...
    Essai_pour_15_chiffres = "'" & Dest1 & " " & Dest2 & " " & Dest3 & " " & Dest4 & " " & Dest5
End Function

Et l'autre procédure devient alors :

Sub Test()
    Dim cS As Range, cC As Range
    Set cS = ActiveCell
    On Error GoTo Erreur
    Set cC = Application.InputBox("Votre cellule source est " & cS.Address(0, 0) _
     & "." & Chr(10) & "Sélectionnez maintenant la cellule cible.", "Sélection cible", _
     Type:=8)
    If cC.Cells.Count > 1 Then GoTo Erreur
    cC.Value = Essai_pour_15_chiffre(CStr(cS.Value))
    Exit Sub
Erreur:
    MsgBox "Vous n'avez pas sélectionné une cellule !", vbCritical, "Erreur"
End Sub

C'est elle qui appelle la fonction, et affecte le résultat à la cible.

Cordialement.

Merci MFerrand pour toutes ces explications !

J'ai du grain à moudre, et je vais m'y mettre dans quelques jours (car demain je suis hospitalisé).

Mille fois merci encore !

Cordialement

Bon séjour... (ça va si c'est court ! je connais...) et reviens en forme.

Sur l'autre topic tu trouves non satisfaisantes des propositions de fonctions qui tiennent en 3 lignes, pour en prendre une de 20 lignes ?

Et encore, avec 15 chiffres tu es encore loin des 25 minimum nécessaires.

Bon courage...

Eric

Un grand Merci à tous,

Avec tous vos posts j'ai de quoi fignoler et terminer mes macros. A moi maintenant de me mettre au travail pour tirer toute la quintessence de vos messages.

Si quelqu'un peut me dire comment faire pour mettre la discussion à "résolu" ... j'ai pas trouvé !

Merci encore !

Cordialement

Bonjour Landry,

tu a écrit :

Si quelqu'un peut me dire comment faire pour mettre la discussion à "résolu" ... j'ai pas trouvé !

pour passer le sujet en résolu, il suffit de cliquer sur le bouton près de (regarde dans le coin haut droit du post) ; ça permet aussi de clôturer le fil de la discussion ; tu sauras que tu as réussi quand tu verras un petit rond vert avec une coche, comme ceci :

sujet

(toi seul peut le faire, car c'est toi qui a créé ce sujet)


mais bien sûr, rien ne presse : ça peut attendre ton retour d'hospitalisation, quand tu seras complètement guéri.

dhany

Merci dhany !

Entre 2 soins j'ai quand même mon portable pour travailler un peu.

Je vais mettre le sujet en résolu.

Cordialement

Rechercher des sujets similaires à "grands nombres"