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

Variable locale dans une formule

9 réponses
Avatar
GL
Bonjour,

J'aimerais pouvoir utiliser une variable locale dans une
formule : par exemple :

A B C D E
1 2 3 4 5
=SI(VARDEF(A1:E1)>2;VARGET())

De sorte que je ne suis pas obligé de reprendre A1:E1 dans la formule
lors de sa deuxième occurrence.

Ici l'exemple est simple, mais VARDEF pourrait être par exemple:
RECHERCHEV(...;....;...;FAUX)*RECHERCHEH(...;...;...;FAUX)
et là, c'est pénible de taper deux fois l'argument.

Est-ce que quelqu'un a une solution ?
Merci d'avance.

9 réponses

Avatar
MichD
Bonjour,

Une suggestion, tu peux utiliser des "NOMS" avec des
formules dans la section fait référence à : La formule.

Dans la formule, il faut faire attention aux adresses relatives,
absolues ou mixes, des cellules ou plages de cellules référencées.

Par la suite, dans la feuille de calcul, tu peux utiliser ces "NOMS".


MichD
---------------------------------------------------------------
Avatar
GL
Le 30/04/2013 15:18, MichD a écrit :
Bonjour,

Une suggestion, tu peux utiliser des "NOMS" avec des
formules dans la section fait référence à : La formule.

Dans la formule, il faut faire attention aux adresses relatives,
absolues ou mixes, des cellules ou plages de cellules référencées.



Oui c'est bien pour cela que je n'utilise pas des "NOMS" qui sont,
sauf erreur, liés à des références absolues de plages.

L'idée c'est d'alléger la formule (et peut-être le calcul) si par
exemple j'ai :

Dans la colonne A un numéro correspondant une colonne
Dans les colonnes B à H une matrice numérique
Dans la colonne suivante I un nombre

Et je veux diviser le nombre de la dernière colonne J par
le nombre qui se situe sur la colonne numéro "A<ligne>"
de la matrice :

SI( INDEX(B1:H1;1;$A1)<>0 ; J1/INDEX( la même chose ); 0 )

(je ne divise que si le dénominateur est non nul).

J'aimerais écrire:

SI ( VARDEF ( INDEX(B1:H1;1;$A1) )<>0 ; J1/VARGET() ; 0 )

Comme ça je peux recopier vers le bas.

Je m'en suis finalement sorti avec une fonction VBA et une
variable statique, mais ça à l'air de ramer un peu...

Merci si vous avez une autre idée (une sorte de "NOMS" mais
en références relatives sur les lignes pour cet exemple...)
Avatar
MichD
Ce que je voulais signifier :

A ) D'abord, tu dois d'abord apprendre ce qu'est un NOM.
Cela peut être aussi une formule plutôt qu'une référence à une plage de
cellules

Exemple :

Je crée un NOM que je nomme "Ind"
et dans la ligne du bas de la fenêtre de la création du nom
j'insère la formule suivante :

=INDEX(Feuil1!$B1:$H1;1;Feuil1!$A1)

Dans la cellule, je peux simplement écrire : =SI(Ind<>0; J1/Ind; 0 )
Cela facilite la saisie.

Tu peux même aller plus loin : Dans fait référence au "NOM" -> Ind
Tu peux inscrire ta formule complète :
SI (INDEX(Feuil1!$B1:$H1;1;Feuil1!$A1)<>0 ;
J1/INDEX(Feuil1!$B1:$H1;1;Feuil1!$A1); 0 )

Et dans la cellule, tu inscris : =Ind et tu recopies sur l'ensemble de la
colonne.
Évidemment, tu peux trouver un nom plus représentatif que "Ind" afin que le
nom soit plus représentatif de ce que signifie le résultat de cette formule
dans ton
application.


MichD
---------------------------------------------------------------
Avatar
GL
Le 30/04/2013 19:46, MichD a écrit :
Ce que je voulais signifier :

A ) D'abord, tu dois d'abord apprendre ce qu'est un NOM.
Cela peut être aussi une formule plutôt qu'une référence à une
plage de cellules

Exemple :

Je crée un NOM que je nomme "Ind"
et dans la ligne du bas de la fenêtre de la création du nom
j'insère la formule suivante :

=INDEX(Feuil1!$B1:$H1;1;Feuil1!$A1)

Dans la cellule, je peux simplement écrire : =SI(Ind<>0; J1/Ind; 0 )
Cela facilite la saisie.

Tu peux même aller plus loin : Dans fait référence au "NOM" -> Ind
Tu peux inscrire ta formule complète :
SI (INDEX(Feuil1!$B1:$H1;1;Feuil1!$A1)<>0 ;
J1/INDEX(Feuil1!$B1:$H1;1;Feuil1!$A1); 0 )

Et dans la cellule, tu inscris : =Ind et tu recopies sur l'ensemble
de la colonne.
Évidemment, tu peux trouver un nom plus représentatif que "Ind" afin que le
nom soit plus représentatif de ce que signifie le résultat de cette
formule dans ton
application.



D'accord merci !
J'avais oublié en effet qu'un NOM peut aussi être une formule.

Ca marche effectivement très bien. Mais l'intérêt de VARDEF / VARGET
c'est que je vois dans ma formule la définition du "NOM" -- donc plus
facile pour modifier ou repérer une erreur.

Par exemple si le "NOM" `TheNumber` est défini comme "=L[-1]C"
(la cellule du dessus), utiliser la formule "=TheNumber" n'est
franchement pas éclairant...

Et puisque les "NOMS" peuvent stocker des formules, on aimerait
qu'ils acceptent aussi des paramètres...

Bonne soirée, et merci pour ce rappel sur les "NOMS"
Avatar
MichD
À part les "NOMS", je ne vois pas ce qui peut servir comme variable!
Dans certains cas, il est possible de définir certaines cellules comme
expression de certaines valeurs pour des formules...


| TheNumber` est défini comme "=L[-1]C"

Faut être vraiment mal pris pour utiliser ce type de syntaxe!


MichD
---------------------------------------------------------------
Avatar
GL
Le 30/04/2013 21:45, MichD a écrit :
À part les "NOMS", je ne vois pas ce qui peut servir comme variable!
Dans certains cas, il est possible de définir certaines cellules comme
expression de certaines valeurs pour des formules...


| TheNumber` est défini comme "=L[-1]C"

Faut être vraiment mal pris pour utiliser ce type de syntaxe!



Oui et non : par exemple j'ai un vecteur colonne de mettons 4 élements
et je cherche le plus petit qui soit positif :

=EQUIV(VRAI;VARDEF(SI(plage<0;"neg";plage))=MIN(VARGET());0)

Où la plage est le vecteur : ensemble relatif à la cellule constitué
des 4 cellules au dessus dans cet exemple...

On peut aussi définir un "NOM" relatif :
=SI(L[-5]C:L[-1]C<0;"neg";L[-5]C:L[-1]C)

et alors: EQUIV(VRAI;NOM=MIN(NOM);0)
mais finalement c'est moins lisible...

Bonne journée.
Avatar
MichD
Je n'ai nulle envie de modifie ta façon de travailler !
;-)

MichD
---------------------------------------------------------------
Avatar
GL
Le 01/05/2013 14:34, MichD a écrit :
Je n'ai nulle envie de modifie ta façon de travailler !
;-)



Oui en fait avant j'utilisais l'extension morefunc de Laurent Longres
qui fournissait les DVAR / LVAR et fonctionnait très bien (un addins
compilé en .xll) mais je suis passé à XL 64 bits et le .xll ne marche
pas et malheureusement l'auteur n'a pas publié ses sources.

En VBA ça passe, mais ça reste super lent... une misère !

Bonne journée du 1er mai.
Avatar
MichD
| mais je suis passé à XL 64 bits et le .xll ne marche pas

Sur le site de Misange : Excelabo.Net , tu peux lui envoyer
un message. Son site héberger celui de Laurent Longre.
Si tu veux savoir si la difficulté que tu rencontres est
normale ou non pour Excel 64 bits, elle est peut-être
en mesure de t'apporter une réponse.
Laurent Longre n'est plus un participant sur les forums Excel.




MichD
---------------------------------------------------------------
"GL" a écrit dans le message de groupe de discussion :
5181397a$0$2227$

Le 01/05/2013 14:34, MichD a écrit :
Je n'ai nulle envie de modifie ta façon de travailler !
;-)



Oui en fait avant j'utilisais l'extension morefunc de Laurent Longres
qui fournissait les DVAR / LVAR et fonctionnait très bien (un addins
compilé en .xll) mais je suis passé à XL 64 bits et le .xll ne marche
pas et malheureusement l'auteur n'a pas publié ses sources.

En VBA ça passe, mais ça reste super lent... une misère !

Bonne journée du 1er mai.