[calc] affichage des formules

Bonjour,

Dans un onglet d'une feuille de calcul, je reprends certaines colonnes de l'onglet principal (=Complet.A2 … =Complet.BP2 …), de façon à imprimer seulement certaines données (pas gérable avec la zone d'impression). Pour les premières colonnes, pas de problème. À partir d'un moment, les colonnes affichent la formule et non le résultat. À force de copier/coller et de tripatouillages, j'ai réussi à modifier l'affichage de la première colonne fautive mais pas les suivantes. Je connais l'option permettant de basculer l'affichage entre résultats et formules mais c'est normalement pour l'ensemble, pas pour une partie de feuille.
J'ai le même problème pour cette feuille avec une 3.6 XP et une 3.5 Ubuntu donc ça vient de la feuille elle-même. Des idées ?

Merci,

Henri

Bonjour

Les cellules sont sans doute au format texte. Le problème et ses solutions
sont évoqués dans les FAQs:
http://wiki.documentfoundation.org/FR/FAQ/Calc/127
http://wiki.documentfoundation.org/FR/FAQ/Calc/120

Cordialement
Pierre-Yves

Bonjour et merci à Pierre-Yves,

Effectivement, c'était bien un problème dû au format texte. Mais je ne comprends toujours pas. Étant donné que mes cellules à copier contiennent du texte, j'avais volontairement préparé mes cellules de destination au format texte, ce qui provoquait le problème quand je tapais ma formule de copie. Maintenant, je formate les cellules de destination comme nombres et la copie se fait bien. Mais quelle est la nature de ce que j'obtiens ? Du texte comme les cellules de départ ou des nombres comme le proclame le format ? D'ailleurs, si je modifie le format pour demander du texte, le résultat reste affiché (et non la formule) ! Autre essai : si au lieu de =Complet.AA2 je mets la formule =GAUCHE(Complet.AA2;1), ça fonctionne sans erreur, ce qui semble prouver que le résultat est bien du texte même si le format demandé est nombre.
Je suis content que ça fonctionne mais j'aimerais bien comprendre ce mystère.

Bonne journée,

Henri

=2300Bonjour

Henri Boyet wrote

Je suis content que ça fonctionne mais j'aimerais bien comprendre ce
mystère.

Peut-être plus simple en raisonnant sur une cellule.
On souhaite saisir un code postal en A1. On tape 02000

La reconnaissance automatique fait que la saisie est considérée
comme un nombre et le résultat 2000 est cadré à droite et perd
le zéro initial.

Si, avant de saisir, on formate en texte le résultat est celui escompté :
02000 (cadré à gauche avec le zéro initial).

Maintenant en A2 si on saisit :
=2300+10

Le = fait que Calc considère la suite comme une formule et affiche le
résultat, qui, en l'occurrence est un nombre.

Si, avant de saisir, on formate en texte, ce qui est saisi est considéré...
comme un texte et donc il n'y a pas de calcul mais affichage de ce qui
a été saisi :

=2300+10

Cordialement
Pierre-Yves

Bonjour,

Désolé, mais ce n'est toujours pas clair.

Peut-être plus simple en raisonnant sur une cellule.
On souhaite saisir un code postal en A1. On tape 02000

La reconnaissance automatique fait que la saisie est considérée
comme un nombre et le résultat 2000 est cadré à droite et perd
le zéro initial.

Si, avant de saisir, on formate en texte le résultat est celui escompté :
02000 (cadré à gauche avec le zéro initial).

Je repars du dernier exemple.
Si je mets en B1 la formule =A1+10, j'obtiens 2010, ce qui montre que le contenu de A1, bien que formaté en texte, est quand même reconnu comme un nombre. J'aurais attendu une erreur en ajoutant le texte 02000 avec le nombre 10.
Mais si en B1, je mets la formule =A1&"abc", j'obtiens comme résultat 02000abc donc le contenu de A1 est bien reconnu comme du texte !
Si A1 est formatée comme nombre, cette même dernière formule donne le résultat 2000abc alors que j'aurais attendu une erreur.

La question de savoir quel est le format de telle ou telle cellule n'est pas anecdotique.
N'ayant pas réussi à finir la base de données que je préparais, je continue à travailler avec mon fichier Calc mais avec l'objectif de le coller dans la base quand la structure sera prête. Je fais des essais au fur et à mesure que je progresse dans la construction de la base en collant une partie de la feuille de calcul. Mais j'ai régulièrement des erreurs car les formats ne correspondent pas : beaucoup de mes cellules à coller sont des résultats de formules et je ne sais jamais si je dois préparer un champ Integer ou Varchar. Pour pouvoir copier-coller facilement sans faire défiler à chaque fois tous les titres de colonnes, je pensais faire un onglet reprenant tous les champs dans l'ordre nécessaire. Donc, les cellules de cet onglet contiendront toutes des formules reprenant des cellules de la feuille principale, certaines d'entre elles contenant elles-mêmes des formules du genre =(SI(K2="M";1;SI(K2="F";2;0))) : au final, je voudrais obtenir les caractères 1 ou 2 et non les nombres 1 ou 2 (d'où l'idée de forcer le format texte mais c'est la formule qui s'affiche).
Je ne sais pas si je suis assez clair…

Merci de me débloquer !

Bonne journée,

Henri

Bonjour

Ma première réponse visait à expliquer pourquoi préformater en
texte avait pour effet d'afficher la formule au lieu de l'interpréter
(même principe que pour le "code postal" qui n'est plus affiché
comme un nombre, la formule est considérée comme un texte).

Ta nouvelle question est légèrement différente.

Henri Boyet wrote

Je repars du dernier exemple.
Si je mets en B1 la formule =A1+10, j'obtiens 2010...
si en B1, je mets la formule =A1&"abc", j'obtiens comme résultat 02000abc

1. Pour "enfoncer le clou" sur la question précédente, si tu préformatais
B1 en texte la formule serait affichée et non interprétée

2. Sinon (B1 en format standard) le résultat de B1 est un calcul.
Le type sera fonction du résultat du calcul, pas du préformatage, ce que tu
peux prévoir, tester et gérer :

Henri Boyet wrote

des formules du genre
=(SI(K2="M";1;SI(K2="F";2;0))) : au final, je voudrais obtenir les
caractères 1 ou 2 et non les nombres 1 ou 2 (d'où l'idée de forcer le
format texte mais c'est la formule qui s'affiche).

Dans ce cas aucun problème il te suffit de faire :
=(SI(K2="M";"1";SI(K2="F";"2";"0")))

Par parenthèse attention au cas où l'utilisateur a saisi en minuscules :slight_smile:

J'ajoute que tu disposes également de fonctions ESTTEXTE, ESTNUM, etc.

Cordialement
Pierre-Yves

Bonjour,

J'ai maintenant compris que la cellule contenant une formule doit obligatoirement être au format nombre, même si on traite du texte. Je ne sais pas si c'est logique mais ça me permet d'avancer.

2. Sinon (B1 en format standard) le résultat de B1 est un calcul.
Le type sera fonction du résultat du calcul, pas du préformatage, ce que tu
peux prévoir, tester et gérer :

Tester oui (TYPE, ESTTEXTE, ESTNUM). Gérer oui (TEXTE, CNUM). Prévoir non. Je n'arrive toujours pas à savoir si le résultat d'une formule va donner un texte ou un nombre. C'est pourtant ce qui permettrait d'éviter de tester et de convertir.

Henri Boyet wrote

des formules du genre
=(SI(K2="M";1;SI(K2="F";2;0))) : au final, je voudrais obtenir les
caractères 1 ou 2 et non les nombres 1 ou 2 (d'où l'idée de forcer le
format texte mais c'est la formule qui s'affiche).

Dans ce cas aucun problème il te suffit de faire :
=(SI(K2="M";"1";SI(K2="F";"2";"0")))

Bizarre, j'avais déjà essayé mais j'obtenais une erreur, sans doute encore une question de format. Effectivement, ça résout la difficulté dans ce cas.

Par parenthèse attention au cas où l'utilisateur a saisi en minuscules :slight_smile:

L'utilisateur (moi !) n'a pas le choix, grâce à la validité des données.

Merci Pierre-Yves, tu es un nouveau Christian.

Bonne journée,

Henri

J'ai maintenant compris que la cellule contenant une formule doit obligatoirement être au format nombre, même si on traite du texte. Je ne sais pas si c'est logique mais ça me permet d'avancer.

J'exprimerais les choses autrement : si la cellule a déjà un format, ce qui y sera saisi sera au format indiqué, si c'est possible. Si le format est pourcentage, seuls les nombres seront affichés en pourcentage; c'est impossible pour le texte. Si le format est texte, tout pouvant être converti en texte, tout sera affiché tel que saisi, même une formule. Voilà pourquoi une cellule contenant une formule ne doit pas être au format texte (mais pas obligatoirement au format nombre).

Par contre, en l'absence de format préalable (ou si le format est incompatible avec le résultat), Calc essaiera de déduire dans quelle catégorie se situe la saisie ou le résultat du calcul et attribuera un format en fonction de la déduction. Donc pour un autre format que texte, la formule affichera le contenu selon le type du résultat.

Je n'arrive toujours pas à savoir si le résultat d'une formule va donner un texte ou un nombre.

Tout dépend de la formule, des arguments éventuels des fonctions qui y figurent, des conversions possibles effectuées par Calc :
=2+0,05 donnera obligatoirement un nombre ;
=CODE("A") aussi, à cause de la nature même de la fonction CODE ;
=AUJOURDHUI() renvoie une date
="2" et = "7" renvoient chacune un caractère (à cause des "), ce qui se voit au cadrage à gauche automatique. Cependant, ="2" + "7" renvoie 9 car Calc a converti les caractères en nombres. Dans ce cas, la fonction =TEXTE("2") renvoie bien du texte et l'écriture =TEXTE("2") + TEXTE("7") génère une erreur car on ne fait pas d'addition sur du texte.

Bref, à toi de savoir quelles données manipule ta formule et ce qu'elle en fait pour déduire le type du résultat.

Bonjour et merci pour les précisions.

J'ai maintenant compris que la cellule contenant une formule doit obligatoirement être au format nombre, même si on traite du texte. Je ne sais pas si c'est logique mais ça me permet d'avancer.

J'exprimerais les choses autrement : si la cellule a déjà un format, ce qui y sera saisi sera au format indiqué, si c'est possible. Si le format est pourcentage, seuls les nombres seront affichés en pourcentage; c'est impossible pour le texte. Si le format est texte, tout pouvant être converti en texte, tout sera affiché tel que saisi, même une formule. Voilà pourquoi une cellule contenant une formule ne doit pas être au format texte (mais pas obligatoirement au format nombre).

Effectivement, je viens de vérifier que pour tout choix de format autre que texte, la formule fonctionne. Ça me paraît plus compréhensible maintenant.

Par contre, en l'absence de format préalable (ou si le format est incompatible avec le résultat), Calc essaiera de déduire dans quelle catégorie se situe la saisie ou le résultat du calcul et attribuera un format en fonction de la déduction. Donc pour un autre format que texte, la formule affichera le contenu selon le type du résultat.

Vérifié également. Si j'impose le format valeur logique, un texte est affiché tel quel alors qu'une date affiche VRAI.

Je n'arrive toujours pas à savoir si le résultat d'une formule va donner un texte ou un nombre.

Tout dépend de la formule, des arguments éventuels des fonctions qui y figurent, des conversions possibles effectuées par Calc :
=2+0,05 donnera obligatoirement un nombre ;
=CODE("A") aussi, à cause de la nature même de la fonction CODE ;
=AUJOURDHUI() renvoie une date
="2" et = "7" renvoient chacune un caractère (à cause des "), ce qui se voit au cadrage à gauche automatique. Cependant, ="2" + "7" renvoie 9 car Calc a converti les caractères en nombres. Dans ce cas, la fonction =TEXTE("2") renvoie bien du texte et l'écriture =TEXTE("2") + TEXTE("7") génère une erreur car on ne fait pas d'addition sur du texte.

Bref, à toi de savoir quelles données manipule ta formule et ce qu'elle en fait pour déduire le type du résultat.

Il me semblait que le signe + permettait de concaténer des textes, comme &. Mais visiblement, ça ne marche pas. Ça devait être dans un autre logiciel.

Bonne journée,

Henri

Ça a été et c'est toujours le cas dans les langages Basic de Microsoft. Personnellement, je préfère l'esperluette (&) qui joue le même rôle que le symbole d'addition. C'est aussi le cas du Basic LibreOffice, bien que l'aide ne soit pas explicite sur ce point.
Mais ce n'est pas le cas pour les formules des tableurs, qui relèvent d'un autre langage.

Par contre, + sert à concaténer des chaines de caractères dans des langages comme Java, Javascript ou Python, par exemple.

Bonjour

Rafael Laville wrote

je préfère l'esperluette (&) qui joue le même rôle que
le symbole d'addition. C'est aussi le cas du Basic LibreOffice, bien que
l'aide ne soit pas explicite sur ce point.

Juste une précision pour le basic LibreOffice : là non plus
les opérateurs ne sont pas équivalents.

Exécuter la procédure suivante... :slight_smile:

Sub Main
dim VarA as variant, VarB as variant

VarA = 2300
VarB = 10

print VarA + VarB
print VarA & VarB

print 2310 + 10
print 2310 & 10

End Sub

Cordialement
Pierre-Yves

Tu as tout à fait raison mais je ne voulais pas entrer dans les détails.