OVH Cloud OVH Cloud

Ecrire Forumle Excel en Macro

11 réponses
Avatar
Vader
Bonjour,

Voilà mon dilemme j'ai un tableur qui cherche des données dans une base de
données ... ça représente un tableau de 3500 lignes et 27 colonnes ...

Problèmes :
1) 30 Mo le fichier excel c'est chaud !
2) Excel plante quant je fais la copie de la forumle suivante sur les
3500*27 cellules.

=IF($AH36=0;0;IF(ISERROR(VLOOKUP(CONCATENATE(LEFT($AG36;6);" -
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0));0;IF(RIGHT(LEFT($AG36;20);11)="Val.
Allow.";VLOOKUP(CONCATENATE(LEFT($AG36;6);" -
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0)*-1;VLOOKUP(CONCATENATE(LEFT($AG36;6);" -
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0

En gros elle recherche le croisement de 3 données (2 en ligne + 1 en colonne).

La question est la suivante :

Est-il possible de faire une macro qui ai la même fonction de calcul ?
Est-ce plus léger ?
Est-ce plus rapide ?

Merci d'avance,

Antoine

1 réponse

1 2
Avatar
Vader
La ver 2000 (9.0)

En fait je peux la taper a mano mais la fonction ne s'actualise pas (elle
refuse de faire varier les cellules de référence, qui restent les mêmes que
la fonction entrée a mano).

A priori tu peux définir un nom de forumle mais sur une formule en "dur"

Cdlt,

Antoine


Bonjour, *Vader*

Surprenant...
Quelle version ?
Sur 2002, pas de problème.
Par contre, il faut entrer ta formule "à la mimine".
Le copier/coller n'est pas accepté.

--
Bien amicordialement,
P. Bastard

Marche pas ... excel refuse de prendre une forumle en référence


Bonjour, *Vader*

Et si tu affecte un nom à ta formule :

Insertion, Nom, Définir, MaF
Fait référence à :
=IF($AH36=0;0;IF(ISERROR(VLOOKUP(CONCATENATE(LEFT($AG36;6);"
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0));0;IF(RIGHT(LEFT($AG36;20);11)="Val.Allow.";VLOOKUP(CONCATENATE(LEFT($AG36;6);"
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0)*-1;VLOOKUP(CONCATENATE(LEFT($AG36;6);"
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0

Au lieu de copier 94500 fois cette formule, tu copieras 94500 fois
MaF. Qu'en penses-tu ?

--
Bien amicordialement,
P. Bastard


Bonjour,

Voilà mon dilemme j'ai un tableur qui cherche des données dans une
base de données ... ça représente un tableau de 3500 lignes et 27
colonnes ...

Problèmes :
1) 30 Mo le fichier excel c'est chaud !
2) Excel plante quant je fais la copie de la forumle suivante sur
les 3500*27 cellules.

=IF($AH36=0;0;IF(ISERROR(VLOOKUP(CONCATENATE(LEFT($AG36;6);" -
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0));0;IF(RIGHT(LEFT($AG36;20);11)="Val.
Allow.";VLOOKUP(CONCATENATE(LEFT($AG36;6);" -
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0)*-1;VLOOKUP(CONCATENATE(LEFT($AG36;6);"
-
";RIGHT(LEFT($AH36;14);6));DATA_FLOW!$A$1:$M$350;MATCH(LEFT(AI$35;FIND("
";AI$35)-1);DATA_FLOW!$1:$1;0);0

En gros elle recherche le croisement de 3 données (2 en ligne + 1 en
colonne).

La question est la suivante :

Est-il possible de faire une macro qui ai la même fonction de
calcul ? Est-ce plus léger ?
Est-ce plus rapide ?

Merci d'avance,

Antoine











1 2