Définition de variables locales dans une formule

SkyCorp

XLDnaute Junior
Bonjour à tous,

Je cherche un moyen de définir des variables locales au sein même d'une formule, donc sans passer par une cellule intermédiaire (cachée ou non) ou par une macro.
Voici un exemple de ce que je cherche à réaliser :
SI(a:=Formule;f(a);g(a))
avec 'a' la variable locale, f et g étant des fonctions de a.

Cela est-il faisable ?
 

abcd

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Bonjour,

Peux-tu donner un exemple concret en pièce jointe, avec les données de départ et le résultat à obtenir ?
Ce sera plus facile pour essayer de t'aider car j'ai difficile de comprendre ce que tu souhaites réaliser.

abcd
 

SkyCorp

XLDnaute Junior
Re : Définition de variables locales dans une formule

J'ai glissé un rapide exemple en pièce jointe.

En colonne D, j'ai une formule que je souhaiterai simplifié en quelque chose du style :
=SI(ESTNUM(A2+B2):=a;a;"")
avec a la variable locale, pour éviter à recopier la formule ESTNUM(A2+B2)

J'espère que ça t'aide à comprendre mon problème
 

Pièces jointes

  • test.xls
    14 KB · Affichages: 141
  • test.xls
    14 KB · Affichages: 115
  • test.xls
    14 KB · Affichages: 115

abcd

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Re,

Je n'ai toujours pas compris.
Qu'entends-tu par "variable locale" ?
Tu donnes quatre lignes avec quatre exemples identiques, que veux-tu comme résultat ?
Donne quelques autres cas de figure, avec leurs résultats souhaités.

=ESTNUM(A2+B2) te renverra toujours soit VRAI, soit FAUX, donc pas besoin de SI ni de répétition ni de "".

abcd
 

CISCO

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Bonjour SkyCorp, abcd, et le fil

Bonne question SkyCorp... mais malheureusement je n'ai pas la solution...

Trop souvent, on a besoin d'écrire deux ou trois fois la même formule inclue dans une autre formule, du style :
SI(ESTNA(XXXXXXXXXXXXX);"";XXXXXXXXXXX), avec XXXXXXXXXX des fois parfois très long.
au lieu de plus simplement
SIIII(a=XXXXXXXXXXX;ESTNA(a);"";a)

Ca ressemble trop à de la programmation : a reçoit telle valeur, et après, à la place d'écrire la formule qui donne cette valeur, on écrit a.

Si quelqu'un a une solution, ça serait vraiment pratique...

@ plus
 

abcd

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Re, salut Cisco,

Toujours pas certain d'avoir compris, mais vois la pièce jointe.

La formule ESTNUM(A2+B2) a été nommée (menu Insertion / Nom / Définir)

abcd
 

Pièces jointes

  • SkyCorp.xls
    14 KB · Affichages: 92
  • SkyCorp.xls
    14 KB · Affichages: 88
  • SkyCorp.xls
    14 KB · Affichages: 90

nolich

XLDnaute Occasionnel
Re : Définition de variables locales dans une formule

Bonjour SkyCorp, abcd et CISCO, bonjour à toutes et à tous :)

Je n'ai pas très bien compris non plus, mais tu parles de formules nommées, voici ton fichier modifié.

@+

EDIT : Oups ! Boum adcd ;) Désolé, je n'avais pas rafraîchi
 

Pièces jointes

  • SkyCorp_test.xls
    15.5 KB · Affichages: 82
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Rebonjour

Oui, abcd et nolich, effectivement, cela revient à une formule nommée...

Ca a bien dû vous arriver, de faire une formule hyperlongue que je symbolise ici par XXXXXXXXXXX.
Vous écrivez = XXXXXXXXXXX, et vous obtenez les résultats attendus, et une fois de temps en temps, tout à fait logiquement, un message d'erreur, ou un cas à éliminer.
Il vous faut donc écrire par exemple =SI(ESTERREUR(XXXXXXXXXXX); "";XXXXXXXXXXX).

Ca peut bien sûr être fait avec une colonne intermédiaire, contenant =XXXXXXXXXXX, cachée ou non, ou avec une formule nommée. Mais si on utilise cette formule nommée que là... n'est-ce pas utiliser un marteau pour écraser une mouche ?

Si j'ai bien compris la demande de SkyCorp, c'est "Est-il possible de faire cela simplement, directement dans la formule ?"

@ plus
 

abcd

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Re Cisco,

Il y a moyen de recopier la première formule par un simple copier/coller.
Pour ne pas devoir sélectionner une partie de formule dans la barre de formule (pas toujours facile), en cliquant sur l'icône fx à gauche de la barre de formule, il est plus facile de copier (par un Ctrl+C) la partie de formule concernée dans la fenêtre de dialogue qui s'est ouverte.

En ce qui me concerne je n'écris jamais :
=SI(ESTERREUR(la formule);"";la formule)
mais je cherche l'origine de l'erreur et c'est celle-là que j'emploie comme condition, par exemple :
=SI(NB.SI(A:A;B2);la formule;"")

abcd
 

CISCO

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Re Cisco,

Il y a moyen de recopier la première formule par un simple copier/coller.

abcd

C'est aussi ce que je fais d'habitude, mais alors, parfois, tu te retrouves avec une formule qui fait 5 lignes dans la barre de formule.
De plus, quand tu réouvres ce fichier 3 mois plus tard, ce n'est pas très facile de tout comprendre si tu n'as pas le réflexe d'augmenter suffisament la hauteur de cette barre ...

@ plus
 

tbft

XLDnaute Accro
Re : Définition de variables locales dans une formule

Bonjour

Perso lorsque je suis confronté à des formules superlongues ou utilisés de nombreuses fois dans un fichier, je crée la fonction avec vba....
Cela permet d'avoir qqche de plus lisible et lorsque l'on utilise plusieurs fois cette formule on n'est pas obligé de toutes les modifier on ne modifie que le code vba..
Mais cela demande d'utiliser du vba ce que SkyCorp ne souhaite pas faire..
 

SkyCorp

XLDnaute Junior
Re : Définition de variables locales dans une formule

Bonsoir à tous, je viens tout juste de rentrer du boulot.

C'est aussi ce que je fais d'habitude, mais alors, parfois, tu te retrouves avec une formule qui fait 5 lignes dans la barre de formule.
De plus, quand tu réouvres ce fichier 3 mois plus tard, ce n'est pas très facile de tout comprendre si tu n'as pas le réflexe d'augmenter suffisament la hauteur de cette barre ...

@ plus

C'est exactement ce qu'il m'arrive, et celà pour plusieurs formules différentes sur plusieurs colonnes. Et tout comme vous, j'utilise en général des copier/coller, mais la formule devient plutôt difficile à lire à présent (je n'ose pas imagine ce que ce sera dans 3 mois). C'est la raison pour laquelle j'ai fourni un exemple très simple (et plutôt stupide, je sais, mais le but était de faire quelque chose de simple).

Concernant VBA, il me semblait bien que c'était possible, mais je préfère tout de même pouvoir lire la formule directement sur la cellule. (Par ailleurs, je ne suis pas trop familier avec VBA, ce qui n'arrange rien).
 

GCFRG

XLDnaute Occasionnel
Re : Définition de variables locales dans une formule

Bonsoir à tous, peut être suis-je hors sujet,

un ptit test en VBA

Code:
Sub test()
With Sheets("Feuil1")
    Dim i As Integer, Fin1 As Integer, Fin2 As Integer
    Fin1 = .Range("a" & .Rows.Count).End(xlUp).Row
    Fin2 = .Range("b" & .Rows.Count).End(xlUp).Row
    If Fin1 > Fin2 Or Fin1 = Fin2 Then
        For i = 1 To .Range("a" & .Rows.Count).End(xlUp).Row
            If IsNumeric(.Cells(i, 1)) And IsNumeric(.Cells(i, 2)) Then
                .Cells(i, 3).Value = "Vrai"
            Else
                .Cells(i, 3).Value = "Faux"
            End If
        Next i
        Else
        For i = 1 To .Range("b" & .Rows.Count).End(xlUp).Row
            If IsNumeric(.Cells(i, 1)) And IsNumeric(.Cells(i, 2)) Then
                .Cells(i, 3).Value = "Vrai"
            Else
                .Cells(i, 3).Value = "Faux"
            End If
        Next i
    End If
End With
End Sub

@ +
Gilbert
 

SkyCorp

XLDnaute Junior
Re : Définition de variables locales dans une formule

Merci beaucoup pour cet effort, mais je cherche justement à éviter VBA.

Pour donner un exemple peut-être un peu plus parlant, j'ai une colonne qui indique une durée en année et en anglais du style "12.4 yrs." et je cherche à en extraire la valeur numérique uniquement, soit 12,4

De plus, dans certains cas, je dispose d'un intervalle de dates, les 2 dates étant séparées par "-", du style "3-6 yrs.". Dans ce cas, je ne prends pas en compte la valeur (une autre colonne s'en chargeant).


Ma méthode consiste tout d'abord à rechercher " yr" et conserver la partie à gauche de cette recherche. Il me reste donc dans les 2 exemples ci-dessus "12.4" et "3-6".
Dans un second temps, je cherche les points et les remplace par des virgules, ce qui me donne ici "12,4" et "3-6".
Puis je détecte le caractère "-" pour ne prendre en compte que 12,4.
Puis je convertis la chaîne de caractères "12,4" en valeur numérique.


J'ai joint un nouveau fichier Excel qui montre ces étapes et je cherche ne faire qu'une seule colonne par valeur recherchée avec une formule explicite (donc rien de caché dans une autre cellule ou par du code VBA) et des variables pour alléger la formule et faciliter la compréhension.

Donc si quelqu'un a une idée à ce sujet, je suis preneur!
 

Pièces jointes

  • Tests.xls
    24.5 KB · Affichages: 66
  • Tests.xls
    24.5 KB · Affichages: 68
  • Tests.xls
    24.5 KB · Affichages: 69

chris

XLDnaute Barbatruc
Re : Définition de variables locales dans une formule

Bonjour

My two cents :

Je résout aussi cela par formule nommée.

Ce n'est pas plus lourd que VBA et plus directement accessible pour tout un chacun si je ne suis pas seule à utiliser le classeur.

Bon week end ensoleillé à tous
 

Discussions similaires

Statistiques des forums

Discussions
312 506
Messages
2 089 127
Membres
104 041
dernier inscrit
jcourtei