OVH Cloud OVH Cloud

formule trop lourde

8 réponses
Avatar
Nico
Bonjour,
J'ai demandé il y a peu ceci :

J'ai en Col A des ref, en col B des montants. Je souhaiterais mettre en col
C le mot "augmenté" lorsque dans la col A il y des ref identiques mais que
le cout de la col B soit + cher.

Et AV m'a donné cela :
{=SI((NB.SI($A$2:$A$40000;A2)>1)*(B2=MAX(SI($A$2:$A$40000=A2;$B$2:$B$40000))
);"Augmenté";"")}

Et ca fonctionne impec, mais le soucis est que je dois tester sur 40000
lignes, et là excel plante, c'est trop lourd pour lui. Alors à votre avis
est t'il possible d'alleger cette formule ?

Merci

Nico

8 réponses

Avatar
bourby
bonjour,
as-tu vraiment 40000 lignes de données?
Si oui, je n'ai pas de solution;
Si non, il faut te restreindre à un nb de lignes plus raisonnable.

On peut ajuster le nb de lignes au nb de données:
p.ex. mettre les titres (Ref et montants) en ligne 2, et
en A1: =max(si(non(estvide(A2:A40000);ligne(A2:A40000);0)))
matricielle à valider par ctrl+alt+suppr.Idem en B1.
Puis définir des noms de plage:
RefÞcaler($A$2;1;0;$A$1;1)
montantÞcaler($B$2;1;0;$B$1;1)
et la formule devient, à partir de la ligne 3:
{=SI((NB.SI(Ref;A3)>1)*(B3=MAX(SI(Ref£;montant))
);"Augmenté";"")}


Je n'ai pas eu le temps de tester; j'espère que c'est juste....

Cordialement

Bourby


Nico wrote:
Bonjour,
J'ai demandé il y a peu ceci :

J'ai en Col A des ref, en col B des montants. Je souhaiterais mettre en col
C le mot "augmenté" lorsque dans la col A il y des ref identiques mais que
le cout de la col B soit + cher.

Et AV m'a donné cela :
{=SI((NB.SI($A$2:$A$40000;A2)>1)*(B2=MAX(SI($A$2:$A$40000¢;$B$2:$B$40000))
);"Augmenté";"")}

Et ca fonctionne impec, mais le soucis est que je dois tester sur 40000
lignes, et là excel plante, c'est trop lourd pour lui. Alors à votre avis
est t'il possible d'alleger cette formule ?

Merci

Nico





Avatar
Nico
Bonsoir et merci Bourby mais la :
=max(si(non(estvide(A2:A40000);ligne(A2:A40000);0))) ne fonctionne pas et
d'ailleurs je ne comprend pas pourquoi.
Ton idée est excellente...
Nico


"bourby" a écrit dans le message de news:

bonjour,
as-tu vraiment 40000 lignes de données?
Si oui, je n'ai pas de solution;
Si non, il faut te restreindre à un nb de lignes plus raisonnable.

On peut ajuster le nb de lignes au nb de données:
p.ex. mettre les titres (Ref et montants) en ligne 2, et
en A1: =max(si(non(estvide(A2:A40000);ligne(A2:A40000);0)))
matricielle à valider par ctrl+alt+suppr.Idem en B1.
Puis définir des noms de plage:
RefÞcaler($A$2;1;0;$A$1;1)
montantÞcaler($B$2;1;0;$B$1;1)
et la formule devient, à partir de la ligne 3:
{=SI((NB.SI(Ref;A3)>1)*(B3=MAX(SI(Ref£;montant))
);"Augmenté";"")}


Je n'ai pas eu le temps de tester; j'espère que c'est juste....

Cordialement

Bourby


Nico wrote:
Bonjour,
J'ai demandé il y a peu ceci :

J'ai en Col A des ref, en col B des montants. Je souhaiterais mettre en
col


C le mot "augmenté" lorsque dans la col A il y des ref identiques mais
que


le cout de la col B soit + cher.

Et AV m'a donné cela :

{=SI((NB.SI($A$2:$A$40000;A2)>1)*(B2=MAX(SI($A$2:$A$40000¢;$B$2:$B$40000))


);"Augmenté";"")}

Et ca fonctionne impec, mais le soucis est que je dois tester sur 40000
lignes, et là excel plante, c'est trop lourd pour lui. Alors à votre
avis


est t'il possible d'alleger cette formule ?

Merci

Nico







Avatar
Nico
j'ai trouvé pour =max(si(non(estvide(A2:A40000);ligne(A2:A40000);0))), la
parenthese etait mal placé, je continu de tester pour la suite.

Nico

"Nico" a écrit dans le message de news:

Bonsoir et merci Bourby mais la :
=max(si(non(estvide(A2:A40000);ligne(A2:A40000);0))) ne fonctionne pas et
d'ailleurs je ne comprend pas pourquoi.
Ton idée est excellente...
Nico


"bourby" a écrit dans le message de news:

bonjour,
as-tu vraiment 40000 lignes de données?
Si oui, je n'ai pas de solution;
Si non, il faut te restreindre à un nb de lignes plus raisonnable.

On peut ajuster le nb de lignes au nb de données:
p.ex. mettre les titres (Ref et montants) en ligne 2, et
en A1: =max(si(non(estvide(A2:A40000);ligne(A2:A40000);0)))
matricielle à valider par ctrl+alt+suppr.Idem en B1.
Puis définir des noms de plage:
RefÞcaler($A$2;1;0;$A$1;1)
montantÞcaler($B$2;1;0;$B$1;1)
et la formule devient, à partir de la ligne 3:
{=SI((NB.SI(Ref;A3)>1)*(B3=MAX(SI(Ref£;montant))
);"Augmenté";"")}


Je n'ai pas eu le temps de tester; j'espère que c'est juste....

Cordialement

Bourby


Nico wrote:
Bonjour,
J'ai demandé il y a peu ceci :

J'ai en Col A des ref, en col B des montants. Je souhaiterais mettre
en



col
C le mot "augmenté" lorsque dans la col A il y des ref identiques
mais



que
le cout de la col B soit + cher.

Et AV m'a donné cela :




{=SI((NB.SI($A$2:$A$40000;A2)>1)*(B2=MAX(SI($A$2:$A$40000¢;$B$2:$B$40000))

);"Augmenté";"")}

Et ca fonctionne impec, mais le soucis est que je dois tester sur
40000



lignes, et là excel plante, c'est trop lourd pour lui. Alors à votre
avis


est t'il possible d'alleger cette formule ?

Merci

Nico











Avatar
Nico
Le dernier soucis est que je ne sais pas comment mettre une formule comme
nom.
Comment fait -on ????

RefÞcaler($A$2;1;0;$A$1;1)
montantÞcaler($B$2;1;0;$B$1;1)

j'ai essayé tout simplement de faire dans insertion/nom , donner le nom et
en bas mettre la formule, mais ca ne fonctionne tjrs pas

Merci

Nico


j'ai trouvé pour =max(si(non(estvide(A2:A40000);ligne(A2:A40000);0))), la
parenthese etait mal placé, je continu de tester pour la suite.

Nico

"Nico" a écrit dans le message de news:

Bonsoir et merci Bourby mais la :
=max(si(non(estvide(A2:A40000);ligne(A2:A40000);0))) ne fonctionne pas
et


d'ailleurs je ne comprend pas pourquoi.
Ton idée est excellente...
Nico


"bourby" a écrit dans le message de news:

bonjour,
as-tu vraiment 40000 lignes de données?
Si oui, je n'ai pas de solution;
Si non, il faut te restreindre à un nb de lignes plus raisonnable.

On peut ajuster le nb de lignes au nb de données:
p.ex. mettre les titres (Ref et montants) en ligne 2, et
en A1: =max(si(non(estvide(A2:A40000);ligne(A2:A40000);0)))
matricielle à valider par ctrl+alt+suppr.Idem en B1.
Puis définir des noms de plage:
RefÞcaler($A$2;1;0;$A$1;1)
montantÞcaler($B$2;1;0;$B$1;1)
et la formule devient, à partir de la ligne 3:
{=SI((NB.SI(Ref;A3)>1)*(B3=MAX(SI(Ref£;montant))
);"Augmenté";"")}


Je n'ai pas eu le temps de tester; j'espère que c'est juste....

Cordialement

Bourby


Nico wrote:
Bonjour,
J'ai demandé il y a peu ceci :

J'ai en Col A des ref, en col B des montants. Je souhaiterais mettre
en



col
C le mot "augmenté" lorsque dans la col A il y des ref identiques
mais



que
le cout de la col B soit + cher.

Et AV m'a donné cela :






{=SI((NB.SI($A$2:$A$40000;A2)>1)*(B2=MAX(SI($A$2:$A$40000¢;$B$2:$B$40000))

);"Augmenté";"")}

Et ca fonctionne impec, mais le soucis est que je dois tester sur
40000



lignes, et là excel plante, c'est trop lourd pour lui. Alors à votre
avis


est t'il possible d'alleger cette formule ?

Merci

Nico















Avatar
AV
40000 formules matricielles.... c'est, au moins, 39000 de trop !
Faut laisser tomber les formules et passer par vba
Un exemple joint, réduit à 1000 lignes pour cause "d'insuffisance de capacité"
de cjoint.com mais qui a été testé avec 40000 lignes (temps d'exécution environ
2s)

http://cjoint.com/?dvjFTqPq2A

AV
Avatar
Nico
Ouahhh,

Vraiment extra, encore merci alain !!! c'est super.

Merci également bourby, ca fonctionnait impec mais evidemment encore trop
lourd, ce sont les matrices

Nico

"AV" a écrit dans le message de news:

40000 formules matricielles.... c'est, au moins, 39000 de trop !
Faut laisser tomber les formules et passer par vba
Un exemple joint, réduit à 1000 lignes pour cause "d'insuffisance de
capacité"

de cjoint.com mais qui a été testé avec 40000 lignes (temps d'exécution
environ

2s)

http://cjoint.com/?dvjFTqPq2A

AV




Avatar
Nico
Ce qui est tout de meme etrange c'est que quand je met des dates à la place
des valeurs, la macro ne fonctionne pas ! pourquoi ? une date n'est ni plus
ni moins qu'un nombre.

Nico

"AV" a écrit dans le message de news:

40000 formules matricielles.... c'est, au moins, 39000 de trop !
Faut laisser tomber les formules et passer par vba
Un exemple joint, réduit à 1000 lignes pour cause "d'insuffisance de
capacité"

de cjoint.com mais qui a été testé avec 40000 lignes (temps d'exécution
environ

2s)

http://cjoint.com/?dvjFTqPq2A

AV




Avatar
Nico
Ceci dit rien ne m'empeche en amont de transformer les dates en nombre puis
à la fin de les remettre en date.

Nico

"Nico" a écrit dans le message de news:
#
Ce qui est tout de meme etrange c'est que quand je met des dates à la
place

des valeurs, la macro ne fonctionne pas ! pourquoi ? une date n'est ni
plus

ni moins qu'un nombre.

Nico

"AV" a écrit dans le message de news:

40000 formules matricielles.... c'est, au moins, 39000 de trop !
Faut laisser tomber les formules et passer par vba
Un exemple joint, réduit à 1000 lignes pour cause "d'insuffisance de
capacité"

de cjoint.com mais qui a été testé avec 40000 lignes (temps d'exécution
environ

2s)

http://cjoint.com/?dvjFTqPq2A

AV