XL 2013 Résultat de formule sans la calculer

benabou

XLDnaute Nouveau
Bonsoir, après plusieurs heures d'essai et de recherche sur le net sans résultat, je met ma question entre vos mains en espérant avoir une réponse pertinente.
Bon voilà, je cherche à avoir le résultat d'une formule sans le calcul comme suit:
A1=12 ; A2= 23 ; A3=A1+A2=35 et A4=A3*20%
C'est à dire avoir en A4=35*20% sans exécuter le calcul, comme ça on montre sur l'imprimé la manière dont est calculée la valeur dans A4.
Merci.
 

david84

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Bonjour Gérard,
une question concernant l'affichage des erreurs dues à un nom défini supprimé : pourquoi veux-tu récupérer l'erreur alors que celle-ci est le produit du calcul de la fonction et non la chaîne textuelle contenue dans la cellule ?
Si je rentre dans une cellule
Code:
='C:\Users\david\Desktop\Test_nom_defini.xls'!cellule_test
le résultat du calcul est #NOM? mais si j'affiche les formules j'ai bien dans ma cellule
Code:
='C:\Users\david\Desktop\Test_nom_defini.xls'!cellule_test
Dans tous les autres cas tu cherches bien à afficher la chaîne textuelle contenue dans la cellule (et si elle est vide tu préfères remplacer 0 par <vide> pour information mais le principe est le même) donc pourquoi renvoyer dans ce cas le résultat du calcul ? Pour signaler pour information que ce nom défini engendre une erreur ?
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re,

Au temps pour moi, si l'on supprime un nom défini sur une cellule "normale" le nom n'est pas converti car on ne peut pas savoir qu'il s'agissait d'un "Range".

Avec "ExecuteExcel4Macro" on peut déterminer toute erreur, alors autant les afficher toutes.

Mais bof, chacun peut faire ce qu'il veut dans cette affaire.

A+
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Ok c'est ton avis.
A priori j'aurais tendance à ne pas différencier les 2 cas et ne pas traiter l'erreur dans les 2 cas mais c'est effectivement un choix.
Sinon teste chez toi
Code:
="C:\aaa"&A1+Test_nom_defini.xls!cel_3
avec le classeur Test_nom_defini ouvert.
A+
 

job75

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re,

Il faut vraiment tout prévoir :rolleyes:

La parade :

Code:
For k = j - 1 To 2 Step -1
  If Mid(t, k, 1) = "\" Then 'autre classeur fermé
    If Mid(t, j - 1, 1) = "'" Then k = InStrRev(Left(t, k - 1), "'"): j = k + 1
    If InStr(Mid(t, k, j - k), """") Then Exit For 'sécurité
le guillemet est un caractère interdit dans les noms de fichiers, pas dans les noms de feuilles.

Edit 1 : je viens de découvrir que la conversion de formule doit donner des références absolues :

Code:
cf = Application.ConvertFormula(x, xlA1, xlR1C1, True, c) 'références absolues
Edit 2 : j'ai supprimé les 2 lignes relatives aux "#REF!" et "#REF'!" elles ne servaient à rien.

Fichiers joints.

Bonne nuit.
 

Pièces jointes

  • Séparateurs(1-7°).xlsm
    39.6 KB · Affichages: 32
  • Séparateurs(2-7°).xlsm
    43.7 KB · Affichages: 36
Dernière édition:

david84

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Bonsoir Gérard,
Il faut vraiment tout prévoir :rolleyes:
Ah ben ça sert à ça de tester ! :rolleyes:
je viens de découvrir que la conversion de formule doit donner des références absolues
Qu'est ce que cela change au niveau du traitement ? Je ne vois pas de différence au niveau des résultats.
j'ai supprimé les 2 lignes relatives aux "#REF!" et "#REF'!" elles ne servaient à rien
Teste de ton côté
Code:
='C:\Users\david\Desktop\[Test_nom_defini.xls]Feuil4'!#REF!
(classeur Test_nom_defini fermé).
Sinon, si tu ne veux pas faire apparaître les retours à la ligne autant les remplacer par une chaîne vide dès le début de la procédure car le caractère 10 est renvoyé s'il fait partie d'une chaîne de texte.
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re,

Je ne savais pas que ConvertFormula pouvait buguer :

Code:
cf = ""
On Error Resume Next
cf = Application.ConvertFormula(x, xlA1, xlR1C1, True, c) 'références absolues
If cf = "" Then i = j: GoTo 1
Je modifie en conséquence les fichiers précédents.

A+
 

david84

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re

Teste
Code:
='C:\Users\david\Desktop\Test_nom_defini.xls'!cel_3+#REF!
en adaptant bien entendu le chemin du fichier Test_nom_defini.xls.
Cela doit ramener '=70+#REF!
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re,

Il ne fallait pas mettre i = j , je corrige les fichiers du post #52 :

Code:
cf = ""
On Error Resume Next
cf = Application.ConvertFormula(x, xlA1, xlR1C1, True, c) 'références absolues
If cf = "" Then GoTo 1

Edit : pour le 2ème GoTo 1 j'ai mis i = k au lieu de i = j, on gagne du temps.

Bonne nuit
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Bonjour Gérard,

cela me paraît bon cette fois ci.

Sinon, concernant le fait de devoir repasser par la feuille de calcul pour récupérer l'erreur :
à la place de
Code:
Set celaux = Cells(1, Columns.Count).End(xlToLeft)(1, 2)Application.EnableEvents = False
celaux = y: z = celaux.Text: celaux = ""
Application.EnableEvents = True
teste pour voir
Code:
Dim N As Name
Set N = Names.Add(Name:="test", RefersTo:=y)
z = N.RefersToLocal
z = Right(z, Len(z) - 1)
N.Delete: Set N = Nothing

A+
 

job75

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Bonjour David,

Ceci est meilleur car il n'est alors plus nécessire de contrôler cf et c'est plus rapide :

Code:
If Mid(t, k, 1) = "\" Then 'autre classeur fermé
 If Mid(t, i, 1) = "!" Then i = InStrRev(Left(t, i), "#"): GoTo 1
On peut effectivement stocker l'erreur y dans un nom défini plutôt que dans la feuille :

Code:
If IsError(y) Then
  Application.EnableEvents = False
  With ThisWorkbook.Names.Add("µµµ", y)
    z = Mid(.RefersToLocal, 2)
    .Delete
  End With
  Application.EnableEvents = True
End If
Les Application.EnableEvents sont nécessaires pour ne pas créer l'évènement Calculate.

Fichiers joints.

A+
 

Pièces jointes

  • Séparateurs(1-8°).xlsm
    39.1 KB · Affichages: 30
  • Séparateurs(2-8°).xlsm
    34.2 KB · Affichages: 34

david84

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re

Teste la chaîne
Code:
='C:\Users\david\Desktop\[Test_nom_defini.xls]Feuil4'!#REF!
en adaptant le chemin du fichier : la procédure ramène la chaîne entière et non #REF! comme cela devrait être le cas.

A+
 

job75

XLDnaute Barbatruc
Re : Résultat de formule sans la calculer

Re,

Pas d'accord David, 'C:\Users\david\Desktop\[Test_nom_defini.xls]Feuil4'!#REF! n'est pas une référence c'est donc la chaîne entière qu'il faut renvoyer.

Idem pour =Page!#REF! (qui est évaluée par Evaluate et pas par ExecuteExcel4Macro).

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin