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.
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
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+
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.
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
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.
(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+
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.
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).