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

Simplification de formule.

6 réponses
Avatar
Crel
Bonjour, je désire simplifier cette formule qui fonctionne très bien, et qui
gère les tickets, mais comme je dois la recopier sur un grand nombre de
lignes; ça freine un peu.
Merci beaucoup
Patrick

=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C
3-B3+1)))))

6 réponses

Avatar
Nicolas B.
Salut Crel,


=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))


Cette formule n'est pas facile à simplifier. Tu peux la mettre sous une
autre forme dans laquelle aucun ET() n'est utilisé : tu testes une par une
les conditions B3="", ensuite C3="", puis B3>C3. Ca rend la formule plus
compréhensible et tu gagne 17 caractères :-)

=SI(B3="";SI(C3="";0;"ERREUR");SI(C3="";1;SI(B3>C3;"ERREUR";C3-B3+1)))

Le ET n'est ici pas conseillé, car à chaque configuration possible des deux
premières conditions, il te faut une réponse différente (ou presque : 4
configurations possibles et 3 résultats différents).


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Crel wrote:
Bonjour, je désire simplifier cette formule qui fonctionne très bien,
et qui gère les tickets, mais comme je dois la recopier sur un grand
nombre de lignes; ça freine un peu.
Merci beaucoup
Patrick


=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))


Avatar
Crel
Mille merci Nicolas, concernant le ET, tu as raison, mais je n'arrivai pas à
la simplifier, si cela ne te dérange pas peux-tu m'expliquer ce choix dans
l'écriture ?
Patrick


Nicolas B." a écrit dans le message de
news:
Salut Crel,




=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))


Cette formule n'est pas facile à simplifier. Tu peux la mettre sous une
autre forme dans laquelle aucun ET() n'est utilisé : tu testes une par une
les conditions B3="", ensuite C3="", puis B3>C3. Ca rend la formule plus
compréhensible et tu gagne 17 caractères :-)

=SI(B3="";SI(C3="";0;"ERREUR");SI(C3="";1;SI(B3>C3;"ERREUR";C3-B3+1)))

Le ET n'est ici pas conseillé, car à chaque configuration possible des
deux

premières conditions, il te faut une réponse différente (ou presque : 4
configurations possibles et 3 résultats différents).


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Crel wrote:
Bonjour, je désire simplifier cette formule qui fonctionne très bien,
et qui gère les tickets, mais comme je dois la recopier sur un grand
nombre de lignes; ça freine un peu.
Merci beaucoup
Patrick




=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))






Avatar
Pierre Jagut
Bonsoir,

Pas simple, ta formule.

Tout d'abord, une question : si "ça freine un peu", c'est que tu dois
traiter un TRES grand nombre de lignes, et que tu dois le faire
régulièrement. Ne serait-il alors pas plus judicieux d'effectuer ce
traitement avec un autre outil automatisant ce calcul, comme Access ou
l'outil qui te génère ces données.

Ensuite, il possible qu'Excel interprète les formules de manière récursive.
Dans le cas d'un "Si(Condition;Alors;Sinon)", si la première condition est
vérifiée, il ne perd pas de temps à interpréter le Sinon. Je te conseille
donc de tester ta formule en l'adaptant à tes données. Il est à supposer que
les erreurs sont les cas les moins fréquents. Mais dans ta formule actuelle,
avant d'arriver au calcul de différence, il faut passer par 3 "Si". En
mettant la condition "Pas d'erreur" en premier, tu peux donc peut-être
gagner du temps.

Les différents cas possibles sont les suivants (si je ne me suis pas trompé)
:
b3 c3 Résultat
"" "" 0
"" y Erreur
x "" 1
x y si(x<y;y-x+1;"Erreur")
Il faudrait alors adapter la formule en fonction de la fréquence des cas
possibles.

Je te propose deux exemples :

=si(et(b3<>"";c3<>"");si(b3<Ã;c3-b3+1;"Erreur");si(b3<>"";1;si(c3="";0;"Er
reur")))
avec cette formule, on passe 2 "Si" avant d'arriver au calcul, et le cas 0
est supposé moins fréquent que les cas 1.

=si(et(b3<>"";c3<>"";b3<Ã);c3-b3+1;si(et(b3="";c3="");0;si(et(c3="";b3<>""
);0;"Erreur")))
avec cette formule, on ne passe qu'un "Si" avant d'arriver au calcul, et le
cas 1 est supposé plus fréquent que le cas 0.

Mais honnêtement, je ne pense pas que cela fasse gagner des milliers
d'heures au traitement.

Pour finir, si tu n'as pas encore pensé à cela : évite de travailler en
réseau (copie ton fichier sur ton disque dur : les accès disque sont plus
rapides que les accès réseau), pense à augmenter la mémoire vive de ton
ordinateur (les calculs sont plus rapides quand le fichier complet peut être
chargé en mémoire sans swap sur le disque), voir à changer ton ordinateur.

Dis-moi ce qu'il en est.
Pierre.

"Crel" a écrit dans le message
de news:
Bonjour, je désire simplifier cette formule qui fonctionne très bien, et
qui

gère les tickets, mais comme je dois la recopier sur un grand nombre de
lignes; ça freine un peu.
Merci beaucoup
Patrick


=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))




Avatar
Nicolas B.
Si on s'intéresse aux deux premières conditions de la formule, tu veux que :
Si C3="" et B3="" alors 0
Si C3="" et B3<>"" alors 1
Si C3<>"" et B3="" alors Erreur
Si C3<>"" et B3<>"" alors voir l'autre condition (B3>C3)

Soit le tableau suivant :
C3="" B3="" Résultat
VRAI VRAI 0
VRAI FAUX 1
FAUX VRAI Erreur
FAUX FAUX voir l'autre condition

Tu peux t'aperçevoir que toutes les combinaisons de VRAI/FAUX entre les deux
conditions sont présentes (il y en a 2^(nombre de conditions), donc ici
2^2=4), et il faut un résultat différent pour chacune.

Il est difficile de prendre en compte tous les cas possibles en utilisant
des ET(). Un petit exemple :
Si tu commence par =SI(ET(B3="";C3="");..., cela ne t'avance à rien, car il
faudra bien différiencier à un autre endroit de la formule, lorsque cette
première condition est fausse, si c'est B3 ou C3 qui est différent de "".

Si dans le tableau précédent, tu n'avais que deux résultats différents
possibles, tu pourrais par contre forcément simplifier ta formule.

Voilà pour l'explication (j'espère qu'elle est assez claire).


Bonne chance
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Crel wrote:
Mille merci Nicolas, concernant le ET, tu as raison, mais je
n'arrivai pas à la simplifier, si cela ne te dérange pas peux-tu
m'expliquer ce choix dans l'écriture ?
Patrick


Nicolas B." a écrit dans le message
de news:
Salut Crel,






=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))


Cette formule n'est pas facile à simplifier. Tu peux la mettre sous
une autre forme dans laquelle aucun ET() n'est utilisé : tu testes
une par une les conditions B3="", ensuite C3="", puis B3>C3. Ca rend
la formule plus compréhensible et tu gagne 17 caractères :-)

=SI(B3="";SI(C3="";0;"ERREUR");SI(C3="";1;SI(B3>C3;"ERREUR";C3-B3+1)))

Le ET n'est ici pas conseillé, car à chaque configuration possible
des deux premières conditions, il te faut une réponse différente (ou
presque : 4 configurations possibles et 3 résultats différents).


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC





Avatar
Crel
Je ne sais comment te remercier, c'est trop sympa de tomber sur des gens
comme toi, encore un grand merci.
Patrick

"Nicolas B." a écrit dans le message de
news:
Si on s'intéresse aux deux premières conditions de la formule, tu veux que
:

Si C3="" et B3="" alors 0
Si C3="" et B3<>"" alors 1
Si C3<>"" et B3="" alors Erreur
Si C3<>"" et B3<>"" alors voir l'autre condition (B3>C3)

Soit le tableau suivant :
C3="" B3="" Résultat
VRAI VRAI 0
VRAI FAUX 1
FAUX VRAI Erreur
FAUX FAUX voir l'autre condition

Tu peux t'aperçevoir que toutes les combinaisons de VRAI/FAUX entre les
deux

conditions sont présentes (il y en a 2^(nombre de conditions), donc ici
2^2=4), et il faut un résultat différent pour chacune.

Il est difficile de prendre en compte tous les cas possibles en utilisant
des ET(). Un petit exemple :
Si tu commence par =SI(ET(B3="";C3="");..., cela ne t'avance à rien, car
il

faudra bien différiencier à un autre endroit de la formule, lorsque cette
première condition est fausse, si c'est B3 ou C3 qui est différent de "".

Si dans le tableau précédent, tu n'avais que deux résultats différents
possibles, tu pourrais par contre forcément simplifier ta formule.

Voilà pour l'explication (j'espère qu'elle est assez claire).


Bonne chance
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Crel wrote:
Mille merci Nicolas, concernant le ET, tu as raison, mais je
n'arrivai pas à la simplifier, si cela ne te dérange pas peux-tu
m'expliquer ce choix dans l'écriture ?
Patrick


Nicolas B." a écrit dans le message
de news:
Salut Crel,








=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))


Cette formule n'est pas facile à simplifier. Tu peux la mettre sous
une autre forme dans laquelle aucun ET() n'est utilisé : tu testes
une par une les conditions B3="", ensuite C3="", puis B3>C3. Ca rend
la formule plus compréhensible et tu gagne 17 caractères :-)

=SI(B3="";SI(C3="";0;"ERREUR");SI(C3="";1;SI(B3>C3;"ERREUR";C3-B3+1)))

Le ET n'est ici pas conseillé, car à chaque configuration possible
des deux premières conditions, il te faut une réponse différente (ou
presque : 4 configurations possibles et 3 résultats différents).


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC









Avatar
Crel
Merci beaucoup Pierre pour ton aide, mais voilà je travaille dans une grande
administration, et nous sommes sous Excel 97, W95 ou 98, nos PC sont assez
anciens des PII, et cela rame énormément, la soluce consisterait à bloquer
les calculs, puis à les relancer, j'explorerai cette piste ultérieurement.
Nous n'avons pas Acces.
Merci encore pour tes explications.
Patrick



"Pierre Jagut" a écrit dans le message de news:
bmeuc1$1t7$
Bonsoir,

Pas simple, ta formule.

Tout d'abord, une question : si "ça freine un peu", c'est que tu dois
traiter un TRES grand nombre de lignes, et que tu dois le faire
régulièrement. Ne serait-il alors pas plus judicieux d'effectuer ce
traitement avec un autre outil automatisant ce calcul, comme Access ou
l'outil qui te génère ces données.

Ensuite, il possible qu'Excel interprète les formules de manière
récursive.

Dans le cas d'un "Si(Condition;Alors;Sinon)", si la première condition est
vérifiée, il ne perd pas de temps à interpréter le Sinon. Je te conseille
donc de tester ta formule en l'adaptant à tes données. Il est à supposer
que

les erreurs sont les cas les moins fréquents. Mais dans ta formule
actuelle,

avant d'arriver au calcul de différence, il faut passer par 3 "Si". En
mettant la condition "Pas d'erreur" en premier, tu peux donc peut-être
gagner du temps.

Les différents cas possibles sont les suivants (si je ne me suis pas
trompé)

:
b3 c3 Résultat
"" "" 0
"" y Erreur
x "" 1
x y si(x<y;y-x+1;"Erreur")
Il faudrait alors adapter la formule en fonction de la fréquence des cas
possibles.

Je te propose deux exemples :


=si(et(b3<>"";c3<>"");si(b3<Ã;c3-b3+1;"Erreur");si(b3<>"";1;si(c3="";0;"Er

reur")))
avec cette formule, on passe 2 "Si" avant d'arriver au calcul, et le cas 0
est supposé moins fréquent que les cas 1.


=si(et(b3<>"";c3<>"";b3<Ã);c3-b3+1;si(et(b3="";c3="");0;si(et(c3="";b3<>""

);0;"Erreur")))
avec cette formule, on ne passe qu'un "Si" avant d'arriver au calcul, et
le

cas 1 est supposé plus fréquent que le cas 0.

Mais honnêtement, je ne pense pas que cela fasse gagner des milliers
d'heures au traitement.

Pour finir, si tu n'as pas encore pensé à cela : évite de travailler en
réseau (copie ton fichier sur ton disque dur : les accès disque sont plus
rapides que les accès réseau), pense à augmenter la mémoire vive de ton
ordinateur (les calculs sont plus rapides quand le fichier complet peut
être

chargé en mémoire sans swap sur le disque), voir à changer ton ordinateur.

Dis-moi ce qu'il en est.
Pierre.

"Crel" a écrit dans le
message

de news:
Bonjour, je désire simplifier cette formule qui fonctionne très bien, et
qui

gère les tickets, mais comme je dois la recopier sur un grand nombre de
lignes; ça freine un peu.
Merci beaucoup
Patrick




=SI(ET(C3<>"";B3="");"ERREUR";SI(B3="";0;SI(C3="";1;SI(ET(B3>C3);"ERREUR";(C

3-B3+1)))))