Calcul scientifique dans l'environnement Excel

Bonjour à tous,

Je souhaite faire du calcul itératif avec une grande précision (quand j’ai une petite erreur sur un nombre, j’ai un artefact/erreur/défaut qui se propage à chaque itération et qui fait trembler le monde de la physique).

Ma question (qui ne doit pas être la première de ce cas) est : Est ce que on peut descendre en dessous de 14 chiffres significatifs sous Excel par des méthodes conventionnelles ou non conventionnelles ?

Pour avoir passé pas mal de temps sur la question, j’ai vu que on pouvait utiliser une fonction qui transforme les nombre en caractère : CDEC. Si j’ai bien compris, cela nécessiterai de transformer à chaque étape des séries de nombres en séries de caractère composés de nombres.
J’ai aussi vu que on pouvait télécharger des modules (mais qui datent un petit peu, année 2005) , de type « xlprecision 3.1b » . Mais j’aimerai en parler avec quelqu’un qui l’a déjà installé avant de le faire.

Est ce que donc quelqu’un a déjà rencontré ce type de problème. Est ce que vous avez pu trouver une solution sur Excel VBA, sans n’avoir besoin de changer d’outil de calcul ? ( Passer à Fortran, Python, Matlab…). Pour la petite histoire, mon vœux est de coupler, l’Excel, le Visual Basic et le solveur, c’est pour cela que j’ai choisis Excel qui a selon moi toutes les cartes en poche (reste à fixer la précision des calculs).

Je me posais aussi la questions de créer un nouveau type (je parle de Int, Double…), avec une précision de chiffres définie (deux fois plus de chiffres significatifs que pour un "double), mais si Excel ne suit pas derrière, ça ne vaut pas la peine de chercher plus dans cette voie (par exemple, lorsque vous faites un calcul de type sinus(x), Excel développe la fonction sinus(x) en série mathématique, plus vous prenez de termes dans le développement en série, plus vous avec de précision, mais comme Excel est limité à 14 chiffres, impossible d’avoir plus de précision, le moteur de la voiture est bridé en quelque sorte).

A la communauté Excel, je vous remercie par avance.

Au plaisir d’échanger,

Cordialement

Franck

Bonjour,

Excel n’est pas l’outil le mieux adapté pour des calculs de grande précision …

Avec le VBA, il est possible en natif d’obtenir une plus grande précision mais ça reste relatif :

  • en standard, les calculs dans les cellules du tableur au format numérique sont effectués en Type Double c.à.d. avec 15 chiffres significatifs
  • en VBA, avec le type Decimal, on a une précision à 28 chiffres, à la condition évidente de ne pas utiliser les cellules du tableur pour y stocker les nombres au format numérique.

Il est possible, en stockant les nombres au format texte, de développer des algorithmes de calcul par macro pour des nombres bien plus grands, mais les temps de calculs en sont très fortement pénalisés.

Ci-joint un exemple des calculs de base sur des grands nombres exprimés sous forme de texte avec VBA:
Calculs (grands) nombres en string.xlsm (54,9 Ko)

Bonjour Patrice,
Merci beaucoup pour votre temps. Je commençait à perdre espoir d’avoir une réponse.

J’ai essayé à de nombreuses reprises d’utilise l’opérateur décimal tel que :
Dim parametre as decimal, mais cela ne fonction pas sur les version d’aujourd’hui, il me semble si je ne dis pas de bêtises que cela fonctionnait auparavant, mais que cette manière de coder n’est plus.
Je sais qu’il existe l’opérateur cdouble quelque chose, est ce que vous savez utiliser l’un des deux ?

Merci pour votre classeur Excel en exemple, je crois qu’il est de vous, c’est de l’art. Très belle manière de coder.

J’ai essayer de faire un test en utilisant par exemple multStr(D11;D12), mais je n’arrive pas trop à faire fonctionner le programme. Même en convertissant (je crois) en chaîne de caractère avec la valeur de la ou des cellules en question : = D12 & «  »
image

Vous vous servez de vos module pour faire un peu de calcul poussé ? Genre un petit peu d’itératif ou bien avec beaucoup de chiffres ?

Cordialement

Franck

Bonjour,

Désolé pour cette réponse tardive…

1. le format décimal en VBA
Le format décimal en VBA est (depuis toujours) un sous-format du format Variant.
Il n’est pas possible de déclarer directement :
Dim x As Decimal
C’est une erreur de syntaxe, il faut écrire :
Dim x As Variant
.
Pour créer une variable au format décimal en VBA, il faut passer par la fonction de conversion CDec().

Mais attention, avec VBA, si les 4 opérations de base ne posent aucun problème, certaines opérations « supérieures » sont calculées simplement en double précision (c’est le cas de la puissance) et donc avec seulement 15 chiffres significatifs.
Je n’ai pas fait d’essai pour voir lesquelles perdent la précision des variables décimales.

J’ai ajouté dans mon classeur un onglet et un module exemples d’utilisation du format décimal en VBA.

2. Utilisation du classeur précédent.

  • Pour convertir un nombre en texte, il ne faut pas ajouter d’espace entre les guillemets de la formule :
    = D12 & ""
  • La meilleur façon de saisir un nombre sous forme de chaine de caractère, c’est de mettre le cellule au format Texte AVANT d’éffectuer la saisie. Et ne pas utiliser le copier / coller à partir d’un nombre (même pas coller valeur) car cela ne transforme pas les nombres en chaine de caractère.
  • Cela n’explique pas l’erreur #NOM? que apparaît sur l’image. Cette erreur est significative d’une erreur de nommage de la fonction. Elle arrive aussi quand les macros ne sont pas activées : les noms des fonctions personnalisées sont alors inconnus.

Cordialement

Patrice
Calculs (grands) nombres en string (2).xlsm (63,7 Ko)

Bonjour Patrice,

Je viens de comprendre mon erreur, c’est que j’ai pris l’habitude d’utilise Excel avec des séparateurs de décimal de type « . » et non « , » et forcément cela faisait des erreurs comme les macros consistent à transformer les nombres en texte. Est ce que vous êtes bien en virgule d’habitude, sinon cela veut dire que cela peut provenir d’autre chose.

J’essayerai d’apporter des modifications dans les fonctions.

Merci beaucoup pour vos cas exemples de Macros.

Cordialement

Franck

Je n’utilise que des versions françaises d’Excel et mes paramètres régionaux sont français & France donc le séparateur décimal est la virgule

Ok, merci pour vos réponses.
Si jamais je peux vous aider en retour ce sera avec plaisir.
Cordialement
Franck REGAL