Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA - incrire des formules sans sélectionner la feuille

18 réponses
Avatar
twinley
Bonjour,

Mes errements booléens sont causés par un truc assez ennuyeux.

J'ai des sub qui posent différentes formules dans un tas de cellules de
la feuille nommée "Graph1".

ça marche impeccable, quand je suis dans la feuille Graph1.

Mais si une autre feuille est active, les formules ne sont pas écrites
pour certaines et d'autres génèrent des erreurs, d'où mon astuce d'aller
vérifier le contenu des cases, de sélectionner la feuille Graph1 et de
réinscrire les formules. Ce qui contourne le pb.

Mais à la réflexion puisque je met le chemin de la cellule, il doit y
avoir une façon élégante d'inscrire ces formules ou je veux sans
sélectionner la feuille !?

Et comme je me sens pas de retranscrire en VBA ces formules...

Je vous remercie pour l'aide

voici quelques exemples :

Sheets("Graph1").Range("L12").FormulaLocal = _
[=IF(M13=M14,IF(M13,IF(E12<L13,E12,L13),IF(D12>L13,D12,L13)),IF(M13,E12,D12))]

Sheets("Graph1").Range("N12").FormulaLocal = _
[=IF(M13=M14,IF(L13=L12,N13,IF(N13<N$11,N13+M$11,N$11)),L$11)]

Sheets("Graph1").Range("K12").FormulaLocal = _
[=IF(K13=0,F12,IF(M13=M14,+N12*(L12-K13)+K13,N12*(L12-L13)+L13))]


à+twinley

8 réponses

1 2
Avatar
twinley
Bonjour AV

J'ai chaudement remercié docm pour m'avoir mis sur le piste, mais ta
solution était quasi parfaite aussi. Ce dont je te remercie.
J'ai fait un mélange des deux pour que ça tourne parfaitement.


D'autre part, pour écrire une formule, il n'est pas indispensable de
passer par

Formula ou FormulaLocal, tu peux simplement passer par une simple
égalité suivie

de la chaîne de caractères composant la formule (formulation anglaise)


Mais je te confirme que je n'ai pas réussi à faire passer ton code. En
ajoutant le mot formula, ça passe. Je suis sous xp pro et xl2003.
Je ne vois pas ce qui le bloque à part une histoire de version.

à+twinley

AV wrote:
si je suis sur une autre page active, donc autre que Graph1, la formule
n'est pas écrite dans la cellule de la feuille Graph1.



Si tu exécutes le code donné, il n'y a pas de souci : la formule sera écrite en
N12 de la feuille "Graph1"
Pour mémoire : il n'est pas nécessaire de passer par Sheets(X).Range(Y)
Il suffit d'utiliser une référence 3D :
Range("graph1!N12") ou plus court (ce que je t'ai donné) : [graph1!N12]

D'autre part, pour écrire une formule, il n'est pas indispensable de passer par
Formula ou FormulaLocal, tu peux simplement passer par une simple égalité suivie
de la chaîne de caractères composant la formule (formulation anglaise)

En résumé, l'exemple que je t'ai donné, indépendamment du fait que c'est la
formulation la plus courte, n'a aucune raison de ne pas fonctionner !

AV





Avatar
AV
Mais je te confirme que je n'ai pas réussi à faire passer ton code. En
ajoutant le mot formula, ça passe. Je suis sous xp pro et xl2003.
Je ne vois pas ce qui le bloque à part une histoire de version.


Ben moi non plus ...mais comme je me contente de XL2000, je ne peux enb dire
plus...
Très curieux quand même.. si les versions n'ont pas de compatibilité descendante
où va-t-on....?

AV

Avatar
JpPradier
Bonjour Alain, Twinley

Testé sur Xl 2002 et 2003, ça passe sans problème. Peut-etre une histoire de formatage de la cellule
en texte ?

j-p
Avatar
twinley
C'est pas vraiment incompatible, mais plutôt une histoire de rigueur de
syntaxe. XL2003 exige le mot formula dans ce cas.

J'ai déjà eu un cas. Sur une recherche de date dans une col comprenant
plusieurs dates et heures de journée consécutives, la v2000 ne reconnaît
pas la syntaxe qui passe en v2003.

l'exemple le voilà en v2003 pour trouver le jour d'avant :
Cells.Find(What:Úte - 1, After:¬tiveCell, LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate

et bien en v2000 il aime pas le Cells.Find(What:Úte - 1
j'ai contourné en passant par une var.
Dommage et bien pratique car Cells.Find(What:Úte - 2 , trouve deux
jours avant etc.

Une autre fois, avec l'enregistreur 2003, il y a une option
supplémentaire qui n'existait pas dans xl2000, donc il faut l'enlever si
on veut l'utiliser en 2000.

Pas incompatible mais il faut bricoler. Et je n'ai pas encore descendu
mes classeurs en XL97...

à+twinley


AV wrote:
Mais je te confirme que je n'ai pas réussi à faire passer ton code. En
ajoutant le mot formula, ça passe. Je suis sous xp pro et xl2003.
Je ne vois pas ce qui le bloque à part une histoire de version.



Ben moi non plus ...mais comme je me contente de XL2000, je ne peux enb dire
plus...
Très curieux quand même.. si les versions n'ont pas de compatibilité descendante
où va-t-on....?

AV





Avatar
twinley
Bonjour JpP

j'écris des entiers et un booléen. Les cellules sont au format standard.

Le mystère s'épaissit, mais la faute vient probablement de ma façon
d'écrire et de déclarer. Ce qui va rassurer Alain.

à+twinley

JpPradier wrote:
Bonjour Alain, Twinley

Testé sur Xl 2002 et 2003, ça passe sans problème. Peut-etre une histoire de formatage de la cellule
en texte ?

j-p



Avatar
twinley
.../...
ces cellules qui reçoivent les formules sont incluses dans des séries
graphiques qui sont définies avec des DECALER en dynamique.

à par ça, je vois rien de spécial. Mais le pb est résolu pour l'instant,
avant qu'il ne réapparaisse un jour quand je modifierai autre chose. Ce
qui mettra mon code en cause.

à+twinley


JpPradier wrote:
Bonjour Alain, Twinley

Testé sur Xl 2002 et 2003, ça passe sans problème. Peut-etre une histoire de formatage de la cellule
en texte ?

j-p



Avatar
AV
Testé sur Xl 2002 et 2003, ça passe sans problème.


Merci du retour
J'étais quand même très fortement étonné !

AV

Avatar
AV
C'est pas vraiment incompatible, mais plutôt une histoire de rigueur de
syntaxe. XL2003 exige le mot formula dans ce cas.


J'émets encore de très fortes réserves ...

J'ai déjà eu un cas. Sur une recherche de date dans une col comprenant
plusieurs dates et heures ....


La méthode "Find" et les dates c'est un tout autre problème .......

AV

1 2