XL 2021 Pourquoi EXCEL affiche les formules en texte ?

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

je repete donc pour @Dudu2 string excel connait
par vba tu envoie cellule.formula="....." donc string mais en type anonyme (une chaine de caractere pour la formule c'est tou))donc variant
ca tombe bien comme excel lui pas connaître variant lui va dire a excel "ho paulo tu calcule ou je t'explose"

Maintenant
dim formule(1) as string
formule(1)="=......"
cellule.formula=formule(1)
la excel envoie du string explicitement et la formule va dire a excel "ho paulo si tu calcule je t'explose"

La seule chose qui devrait faire comprendre à Excel que c'est une formule, c'est le caractère "=" qui débute le String passé.
Eh bien on serait bien ennuyé avec ce caractère voir d'autres aussi +-*/>< etc....

c'est plus clair? Je peux mimer aussi
 
Bonjour @patricktoulon,
Je préfèrerais que tu le chantes, mais merci pour tes explications que je ne suis pas sûr de comprendre (type anonyme ?, "....." est Variant ?)
Tu dis ce que j'ai diagnostiqué, String en String Excel ne prend pas la formule, String en Variant il la prend. OK.
Je vois toujours pas ce qui l'empêche de prendre le String en String (commençant par "=") car pour moi String en String ou String en Variant c'est toujours un VarType de 8, mais comme je l'ai dit avant, je veux pas savoir les raisons internes d'Excel, juste contourner ses petits caprices et résoudre le problème.

J'ajoute que dans mon application, après transformation du tableau en Variant (Range.Formula = TabFormules) , y a des fois où Excel place le texte de la formule en formule et parfois en pur texte. Alors va comprendre. J'ai dû placer les formules cellule par cellule pour qu'il les prenne en formules. C'est pas un caprice ça ?
 
Dernière édition:
J'ajoute que dans mon application, après transformation du tableau en Variant (Range.Formula = TabFormules) , y a des fois où Excel place le texte de la formule en formule et parfois en pur texte. Alors va comprendre. J'ai dû placer les formules cellule par cellule pour qu'il les prenne en formules. C'est pas un caprice ça ?
Ce qui prouve bien que tu lis en diagonale les réponses qu'on te donne
 
Bonjour @Dan
Je l'espère moi aussi
Mais je ne pense pas que ce soit vraiment son problème

en fait il pense (comme beaucoup d'ailleurs) que mettre une formule dans une cellule va forcement afficher le résultat dans la cellule
pour la simple et bonne raison qui est que la plus part du temps on va faire cellule.formula="=texte de la formule"
qui est ni plus ni moins que l'injection du string de formule dans le formula
et non un injection d'une variable string dans le .formula


Excel n'a jamais déclenché un calculate tout seul sur une formule injecté en vba
c'est le variant(inconnu de excel) qui déclenche le calculate puisqu'il est obligé d'évaluer.

L'injection d'une formule par une variable string ou l'item string d'un tableau est considérée comme volontaire par Excel
Donc Excel n'évaluera pas

En fait c'est simplement une méprise des utilisateurs comme @Dudu2 dans le contexte d'injection de formule
Qui pensait que c'était automatique puisque la plupart du temps c'est comme ca que tout le monde utilise ".Forrmula" en vba

peut être arrivera t il a mieux comprendre ce qu'il injecte dans le ".formula avec ceci
1764154202299.png
 
Dernière édition:
Bonjour à tous😀,

On peut un peu complexifier le problème pour le fun. Et saisir une formule avec une variable string🤪.
VB:
Sub Test()
Dim textFormule As String        ' variable de type string
Dim varFormule As Variant        ' variable de type variant

   textFormule = "=1+1"          ' même valeur dans les deux variables
   varFormule = "=1+1"
 
   [a1].NumberFormat = "@"       ' format cellule: Texte
   [a1].Formula = textFormule    ' résultat: un texte dans la cellule
 
   [a2].NumberFormat = "@"       ' format cellule: Texte
   [a2].Formula = varFormule     ' résultat: un texte dans la cellule
 
   [a5].NumberFormat = "general" ' format cellule: Standard
   [a5].Formula = textFormule    ' résultat: une formule dans la cellule
 
   [a6].NumberFormat = "general" ' format cellule: Standard
   [a6].Formula = varFormule     ' résultat une formule dans la cellule
End Sub
 

Pièces jointes

Les tableaux étant toujours à considérer en Variant ou éventuellement en Collection.
Pourquoi un tableau doit-il toujours être considéré comme Variant ?
Y a-t-il une explication logique connue, ou est-ce une chose qui doit simplement être admise parce que Microsoft l'a dit ?


Par exemple, quand on déclare un tableau comme ceci :
VB:
Dim Tablo(9, 9) As Integer
pourquoi doit-on considérer que c'est un Variant alors qu'on a déclaré que c'était un tableau de 100 Integer ?


Et surtout, pour moi (mais peut-être me trompé-je), un tableau n'a pas vraiment de type puisque ce n'est pas une variable mais un ensemble de variables (qui, elles, sont typées).
 
Dernière édition:
Bien sûr je connais la différence entre la déclaration d'un Variant et la déclaration d'un tableau de Variant.
La dernière explication de @patricktoulon est plus claire que les précédentes.
Je reste cependant très étonné que
1 - ça passe:
VB:
[A1].formula="=12+13"
2 - ça passe:
Code:
Dim S as String
S = "=12+13"
[A1].formula = S
3 - ça passe:
Code:
Dim TabS(1 To 1) As String
TabS(1) = "=12+13"
[A1].Formula = TabS(1)
4 - ça passe:
Code:
Dim TabS(1 To 1, 1 To 1) As String
TabS(1, 1) = "=12+13"
[A1].Formula = TabS(1, 1)
5 - ça ne passe pas !
Code:
Dim TabS(1 To 2, 1 to 1) As String
TabS(1, 1) = "=12+13"
TabS(2, 1) = "=22+33"
[A1].Resize(2).Formula = TabS
Le problème semble se poser non pas sur le type mais sur le type en chargement de plusieurs cellules !
Est-ce que c'est conforme aux théories précédemment exposées ?
 

Pièces jointes

Dernière édition:
Bonjour @Dudu2😉,
En testant ce fichier voilà encore un autre caprice d'Excel que je ne m'explique pas.
Peut-être ai-je fait une erreur ?
Non ni erreur ni caprice. C'est le comportement 'normal' des tableaux structurés.
Vous pouvez d'ailleurs reproduire ce comportement 'à la main'.

Dans le TS vide, saisir =1+2 (cellule B5). La cellule affiche 3 puis le TS propage la formule sur toute la colonne et la même formule se retrouve en B6 et la cellule affiche aussi 3.

Puis dans la cellule B6, saisir =10+20. la cellule affiche 30 (à la place de 3) puis le TS propage la formule sur toute la colonne et la même formule se retrouve en B5 et la cellule affiche aussi 30.
 
pourquoi doit-on considérer que c'est un Variant alors qu'on a déclaré que c'était un tableau de 100 Integer ?
Une variable tableau sera toujours un variant
Pourquoi?
parce qu'il serait difficile a mon avis de typer une variable tableau
Sachant qu'il peut avoir 1 à x dimensions et que chaque dimension peut avoir un type différent.

donc MS gobalise
Le tableau est un variant
le/ les contenus sont de type(variant,string,long,integer,curency,boolean,double)
je trouve au contraire que c'est limpide perso

@Dudu2 que crois-tu faire quand tu dis
[A1].formula="=12+13"
d'après toi qu'injectes-tu dans la cellule
réponse A un variant?
réponse B un string?

Heureusement que la notion de variant est bien ancrée dans le vb (6/7/S/a) sinon beaucoup d’entre vous auraient des soucis.

Pour résumer pour que excel fasse le calcul il faut a tout prix que ce soit un variant ou variant/quelquechose si non Excel n'excitera pas le calculate

Pour le ts c'est la règle de base la formule est propagée sur toute la colonne
 
Y a-t-il une explication logique connue, ou est-ce une chose qui doit simplement être admise parce que Microsoft l'a dit ?

Par exemple, quand on déclare un tableau comme ceci :
VB:
Dim Tablo(9, 9) As Integer
pourquoi doit-on considérer que c'est un Variant alors qu'on a déclaré que c'était un tableau de 100 Integer ?

Et surtout, pour moi (mais peut-être me trompé-je), un tableau n'a pas vraiment de type puisque ce n'est pas une variable mais un ensemble de variables (qui, elles, sont typées).
Pour ma pensée :
Dim tablo() As Integer -->Tableau qui ne peut contenir que des entiers
Dim tablo() As Variant ou Dim Tablo() --> C'est toujours variant et concerne un tableau pouvant contenir différents types de données (chaînes texte, nombres...)
Dim tablo() As String --> variable tableau qui ne peut contenir que des chaines texte

Tout dépend du type de données et le résultat attendu

comme vous l'écrivez Dim tablo(9,9) dimensionne le tableau et rien n'empêche de mettre Integer mais si vous mettez Variant cela vous évite aussi d'avoir le souci que dudu2 a décrit

Quand j'écrivais "toujours à considérer comme Variant" c'était plutôt dans un sens pratique car on peut stocker n'importe quel type de données et donc plus flexible.
Mais bon Variant c'est aussi la moins bonne déclaration de variable dans le sens où l'allocation de mémoire est plus importante.
In fine, le "toujours" aurait mérité d'avoir une explication supplémentaire
 
Re,

@Dan 😉 m'a devancé...

Un tableau (array) n'est pas une variable de base ordinaire. C'est une variable dont les éléments sont stockés avec une organisation particulière en mémoire vive qui permet l'adressage "direct" donc très rapide. Souvent, une structure tableau 'occupe' des 'cellules mémoire' contigües. Un index suffit à retrouver directement l'élément avec son indice (ou ses indices).

Il me semble que :

1 - Quand on déclare un tableau typé, l'ensemble des éléments de ce tableau sont du type du tableau et par extension le tableau aussi (c'est ce que montre la copie d'écran de @patricktoulon). On ne peut pas affecter à un élément du tableau une valeur différente du type du tableau. Si on essaye d'affecter une valeur d'un type différent de celui du tableau, VBA essaiera, sans qu'on lui ai demandé quoi que ce soit, de transformer cette valeur dans le type déclaré du tableau (VBA est un langage très très peu typé).


2 - Quand on déclare un tableau sans type (variant), l'ensemble des éléments est de type variant jusqu'à ce qu'on affecte à un élément du tableau une valeur particulière. Cet élément prend donc temporairement le type de l'élément qu'on lui a affecté (comme tout bon variant). On ne perdra pas la possibilité d'affecter à tout moment à cet élément du tableau n'importe quel type puisque son type originel est le type variant.
 
Dernière édition:
Bonjour @mapomme,
Dans le TS vide, saisir =1+2 (cellule B5). La cellule affiche 3 puis le TS propage la formule sur toute la colonne et la même formule se retrouve en B6 et la cellule affiche aussi 3.

Puis dans la cellule B6, saisir =10+20. la cellule affiche 30 (à la place de 3) puis le TS propage la formule sur toute la colonne et la même formule se retrouve en B5 et la cellule affiche aussi 30.
Dans ce cas alors pourquoi ai-je 70 en B5 & B6 et pas 120 ? C'est la dernière formule affectée qui devrait prendre le dessus non ?

C'est le comportement 'normal' des tableaux structurés.
Pour le ts c'est la règle de base la formule est propagée sur toute la colonne
Ce n'est pas le comportement normal ou de base, c'est le comportement par défaut (Application.AutoCorrect.AutoFillFormulasInLists = True).
En l'occurrence j'ai essayé avec Application.AutoCorrect.AutoFillFormulasInLists = False qui fonctionne "à la main" ou en affectation unitaire de cellule, mais en l'occurrence, en affectation tableau, ça ne change rien.
C'est donc bien un caprice d'Excel. Moins cool que celui de la discussion !
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
430
  • Question Question
XL 2016 liste
Réponses
10
Affichages
282
  • Question Question
XL 2021 planning
Réponses
5
Affichages
303
Réponses
3
Affichages
249
Réponses
2
Affichages
170
Retour