OVH Cloud OVH Cloud

Fonction dans Range par macro

12 réponses
Avatar
Céline
Bonjour,
voilà ma cellule qu'il faut que je copie dans plusieurs classeurs:
=SI(ET(Y70>0;Z71=12);$AU$6*$E$9;0)+SI(ET(Y73>0;Z74=12);$AU$9*$E$9;0)+SI(ET(Y76>0;Z77=12);$AU$12*$E$9;0)+SI(ET(Y79>0;Z80=12);$AU$15*$E$9;0)+SI(ET(Y82>0;Z83=12);$AU$18*$E$9;0)+SI(ET(Y85>0;Z86=12);$AU$21*$E$9;0)+SI(ET(Y88>0;Z89=12);$AU$24*$E$9;0)+SI(ET(Y91>0;Z92=12);$AU$27*$E$9;0)+SI(ET(Y94>0;Z95=12);$AU$30*$E$9;0)+SI(ET(Y97>0;Z98=12);$AU$33*$E$9;0)+SI(ET(Y100>0;Z101=12);$AU$36*$E$9;0)+SI(ET(Y103>0;Z104=12);$AU$39*$E$9;0)+SI(ET(Y106>0;Z107=12);$AU$42*$E$9;0)+SI(ET(Y109>0;Z110=12);$AU$45*$E$9;0)+SI(ET($V$45>0;Y108>0;Y108<12);$AU$45*$E$9;"0")

j'ai essayé pleins de trucs mais impossible,
comment puis-je écrire une fonction dans range ???
Merci

2 réponses

1 2
Avatar
Céline
j'ai fait le tout avec l'enregistreur !! ok je vais scinder


Surprenant
Si tu respectes pas plus de 4 "SI" chez moi mon enregistreur est docile et
de faire aprés ma composition

Si le tiens en véritable mutin se rebelle envoies moi tes besoins je me
ferai une joie de te concocter les codes et toi aprés de les utiliser
Profites en en ce moment c'est ma période de bonté, c'est gratuit !!!!
A tantôt peut être !!!




Oui c'est ce que j'avais fait la première fois, mais l'enregistreur ne me
l'enregistre pas !!!!!


Je pense que tu aurais plutôt intéret de passer par la création manuelle avec
l'enregistreur de macro pour ne pas te tromper et rapatrier tous les petits
codes en une seule macro tel que je te l'ai proposé
Ta formule et si longue que de changer à la main au grés des nouvelles
cellules devient perilleux

Ne croix tu pas

Si je peux t'aider !!!


C'est encore moi !!!
Je viens de repasser la tienne et tout fonctionne bien, et oui même le FAUX
plus de souci.
Seulement le problème est que les cellules ne correspondent pas, c'est
pourquoi j'ai changé les numéros, et juste en faisant ça ça ne marche plus
???? c'est fou


Re bonjours Celine
Tout d'abord j'ai laissé passer une coquille dans mon code qui a pour
inconvénient de mettre FAUX au lieu de 0
Le code rectifié ext celui ci :

ActiveCell.FormulaR1C1 = _

"=IF(AND(R[69]C[19]>0,R[70]C[20]),R6C47*R9C5,0)+IF(AND(R[72]C[19]>0,R[73]C[20]),R9C47*R9C5,0)+IF(AND(R[75]C[19]>0,R[76]C[20]),R12C47*R9C5,0)+IF(AND(R[78]C[19]>0,R[79]C[20]),R15C47*R9C5,0)"
A = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"+IF(AND(R[81]C[19]>0,R[82]C[20]),R18C47*R9C5,0)+IF(AND(R[84]C[19]>0,R[85]C[20]),R21C47*R9C5,0)+IF(AND(R[87]C[19]>0,R[88]C[20]),R24C47*R9C5,0)+IF(AND(R[90]C[19]>0,R[91]C[20]),R27C47*R9C5,0)"
B = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"+IF(AND(R[93]C[19]>0,R[94]C[20]),R30C47*R9C5,0)+IF(AND(R[96]C[19]>0,R[97]C[20]),R33C47*R9C5,0)+IF(AND(R[99]C[19]>0,R[100]C[20]),R36C47*R9C5,0)+IF(AND(R[102]C[19]>0,R[103]C[20]),R39C47*R9C5,0)"
c = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"+IF(AND(R[105]C[19]>0,R[106]C[20]),R42C47*R9C5,0)+IF(AND(R[108]C[19]>0,R[109]C[20]),R45C47*R9C5,0)+IF(AND(R45C22>0,R[107]C[19]>0,R[107]C[19]<12),R45C47*R9C5,""0"")"
D = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = A & B & c & D

J'attire ton attention sur le résultat de cette macro trés lié à la position
de la cellule active
Il est différent d'une cellule à l'autre car la macro détermine les données
à mettre dans la formule en fonction de la cellule de départ
Les chiffres que tu as à côté des R et des C correspondent au décalage à
opérer entre la cellule de départ (cellule active ici) et celle de destination
Ce qui explique les résultats différents obtenus en fonction de la position
de la cellule active

Pour construire A B C D tu créer 4 macros en enregistrement manuel et à
chacune d'elle tu insères une partie de la formule finale à obtenir par
exemple pour A tu insere dans la formule de la cellule active :
=SI(ET(Y70>0;Z71);$AU$6*$E$9;0)+SI(ET(Y73>0;Z74);$AU$9*$E$9;0)+SI(ET(Y76>0;Z77);$AU$12*$E$9;0)+SI(ET(Y79>0;Z80);$AU$15*$E$9;0)

Pour B :

+SI(ET(Y82>0;Z83);$AU$18*$E$9;0)+SI(ET(Y85>0;Z86);$AU$21*$E$9;0)+SI(ET(Y88>0;Z89);$AU$24*$E$9;0)+SI(ET(Y91>0;Z92);$AU$27*$E$9;0)

Ainsi de suite

Ce qui correspond à 4 "SI" maximum
Ensuite dans une seule et même macro tu rapatries tous les codes créés par
toutes les petites macros
Puis à la fin de ce nouveau code tu insères l'instruction qui concaténe
toutes les parties représentées par les lettres
ce qui devient la formule de la cellule active ici :
ActiveCell.FormulaR1C1 = A & B & c & D

Reste à trouver un code judicieux à associer pour traiter toutes tes feuilles

As tu tout compris ???
Celà te convient-il ???
As tu encore besoin d'aide pour finaliser ???
A ton service !!!


Ah oui OK j'avais pas vu tu as scindé l'ensemble du calcul en 4 parties, bon
annule ma question !!! par contre retient toujours pour m'expliquer comment
tu trouves la correspondance de la cellule, t'inquiètes je vois bien que R
c'est row et C column mais j'ai absolument besoin de comprendre la
correspondance parce qu'en plus je n'ai pas que lui à faire et je ne vais
tout de même tout te faire traduire !!!

Merci beaucoup
Céline


Salut Céline
Solution macro :

ActiveCell.FormulaR1C1 = _

"=IF(AND(R[69]C[19]>0,R[70]C[20]),R6C47*R9C5,0)+IF(AND(R[72]C[19]>0,R[73]C[20]),R9C47*R9C5,0)+IF(AND(R[75]C[19]>0,R[76]C[20]),R12C47*R9C5,0)+IF(AND(R[78]C[19]>0,R[79]C[20]),R15C47*R9C5,0)"
A = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"=IF(AND(R[81]C[19]>0,R[82]C[20]),R18C47*R9C5,0)+IF(AND(R[84]C[19]>0,R[85]C[20]),R21C47*R9C5,0)+IF(AND(R[87]C[19]>0,R[88]C[20]),R24C47*R9C5,0)+IF(AND(R[90]C[19]>0,R[91]C[20]),R27C47*R9C5,0)"
B = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"=IF(AND(R[93]C[19]>0,R[94]C[20]),R30C47*R9C5,0)+IF(AND(R[96]C[19]>0,R[97]C[20]),R33C47*R9C5,0)+IF(AND(R[99]C[19]>0,R[100]C[20]),R36C47*R9C5,0)+IF(AND(R[102]C[19]>0,R[103]C[20]),R39C47*R9C5,0)"
C = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"=IF(AND(R[105]C[19]>0,R[106]C[20]),R42C47*R9C5,0)+IF(AND(R[108]C[19]>0,R[109]C[20]),R45C47*R9C5,0)+IF(AND(R45C22>0,R[107]C[19]>0,R[107]C[19]<12),R45C47*R9C5,""0"")"
D = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = A + B + C + D

Reste à rajouter dans ce code l'instruction pour mettre la cellule active
dans chaque classeur à traiter comme par exemple :

Workbooks("Classeur1").Activate
Sheets("Feuil2").Select
Range("A1").Select
et tout le code ci-dessus

Celà te convient-il ???
Dis moi !!!


Bonjour,
voilà ma cellule qu'il faut que je copie dans plusieurs classeurs:
=SI(ET(Y70>0;Z71);$AU$6*$E$9;0)+SI(ET(Y73>0;Z74);$AU$9*$E$9;0)+SI(ET(Y76>0;Z77);$AU$12*$E$9;0)+SI(ET(Y79>0;Z80);$AU$15*$E$9;0)+SI(ET(Y82>0;Z83);$AU$18*$E$9;0)+SI(ET(Y85>0;Z86);$AU$21*$E$9;0)+SI(ET(Y88>0;Z89);$AU$24*$E$9;0)+SI(ET(Y91>0;Z92);$AU$27*$E$9;0)+SI(ET(Y94>0;Z95);$AU$30*$E$9;0)+SI(ET(Y97>0;Z98);$AU$33*$E$9;0)+SI(ET(Y100>0;Z101);$AU$36*$E$9;0)+SI(ET(Y103>0;Z104);$AU$39*$E$9;0)+SI(ET(Y106>0;Z107);$AU$42*$E$9;0)+SI(ET(Y109>0;Z110);$AU$45*$E$9;0)+SI(ET($V$45>0;Y108>0;Y108<12);$AU$45*$E$9;"0")

j'ai essayé pleins de trucs mais impossible,
comment puis-je écrire une fonction dans range ???
Merci


















Avatar
Céline
so you know what ........ I'm happy !!!!!!

bon effectivement en décomposant l'enregistreur est bien plus manianime !!!

là c'est bon ça marche.

Mais il y a une chose que je ne comprendrais jamais, c'est que j'ai donc
changé ton code à la main, c'est exactement le même que celui de
l'enregistreur mais du mien il n'en veut pas, je me demande si Bill ne serait
pas un chouille mysogine !!!!!

Bonne fin de journée, et encore grand merci, sans toi j'y serais encore
Céline


Surprenant
Si tu respectes pas plus de 4 "SI" chez moi mon enregistreur est docile et
de faire aprés ma composition

Si le tiens en véritable mutin se rebelle envoies moi tes besoins je me
ferai une joie de te concocter les codes et toi aprés de les utiliser
Profites en en ce moment c'est ma période de bonté, c'est gratuit !!!!
A tantôt peut être !!!




Oui c'est ce que j'avais fait la première fois, mais l'enregistreur ne me
l'enregistre pas !!!!!


Je pense que tu aurais plutôt intéret de passer par la création manuelle avec
l'enregistreur de macro pour ne pas te tromper et rapatrier tous les petits
codes en une seule macro tel que je te l'ai proposé
Ta formule et si longue que de changer à la main au grés des nouvelles
cellules devient perilleux

Ne croix tu pas

Si je peux t'aider !!!


C'est encore moi !!!
Je viens de repasser la tienne et tout fonctionne bien, et oui même le FAUX
plus de souci.
Seulement le problème est que les cellules ne correspondent pas, c'est
pourquoi j'ai changé les numéros, et juste en faisant ça ça ne marche plus
???? c'est fou


Re bonjours Celine
Tout d'abord j'ai laissé passer une coquille dans mon code qui a pour
inconvénient de mettre FAUX au lieu de 0
Le code rectifié ext celui ci :

ActiveCell.FormulaR1C1 = _

"=IF(AND(R[69]C[19]>0,R[70]C[20]),R6C47*R9C5,0)+IF(AND(R[72]C[19]>0,R[73]C[20]),R9C47*R9C5,0)+IF(AND(R[75]C[19]>0,R[76]C[20]),R12C47*R9C5,0)+IF(AND(R[78]C[19]>0,R[79]C[20]),R15C47*R9C5,0)"
A = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"+IF(AND(R[81]C[19]>0,R[82]C[20]),R18C47*R9C5,0)+IF(AND(R[84]C[19]>0,R[85]C[20]),R21C47*R9C5,0)+IF(AND(R[87]C[19]>0,R[88]C[20]),R24C47*R9C5,0)+IF(AND(R[90]C[19]>0,R[91]C[20]),R27C47*R9C5,0)"
B = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"+IF(AND(R[93]C[19]>0,R[94]C[20]),R30C47*R9C5,0)+IF(AND(R[96]C[19]>0,R[97]C[20]),R33C47*R9C5,0)+IF(AND(R[99]C[19]>0,R[100]C[20]),R36C47*R9C5,0)+IF(AND(R[102]C[19]>0,R[103]C[20]),R39C47*R9C5,0)"
c = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"+IF(AND(R[105]C[19]>0,R[106]C[20]),R42C47*R9C5,0)+IF(AND(R[108]C[19]>0,R[109]C[20]),R45C47*R9C5,0)+IF(AND(R45C22>0,R[107]C[19]>0,R[107]C[19]<12),R45C47*R9C5,""0"")"
D = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = A & B & c & D

J'attire ton attention sur le résultat de cette macro trés lié à la position
de la cellule active
Il est différent d'une cellule à l'autre car la macro détermine les données
à mettre dans la formule en fonction de la cellule de départ
Les chiffres que tu as à côté des R et des C correspondent au décalage à
opérer entre la cellule de départ (cellule active ici) et celle de destination
Ce qui explique les résultats différents obtenus en fonction de la position
de la cellule active

Pour construire A B C D tu créer 4 macros en enregistrement manuel et à
chacune d'elle tu insères une partie de la formule finale à obtenir par
exemple pour A tu insere dans la formule de la cellule active :
=SI(ET(Y70>0;Z71);$AU$6*$E$9;0)+SI(ET(Y73>0;Z74);$AU$9*$E$9;0)+SI(ET(Y76>0;Z77);$AU$12*$E$9;0)+SI(ET(Y79>0;Z80);$AU$15*$E$9;0)

Pour B :

+SI(ET(Y82>0;Z83);$AU$18*$E$9;0)+SI(ET(Y85>0;Z86);$AU$21*$E$9;0)+SI(ET(Y88>0;Z89);$AU$24*$E$9;0)+SI(ET(Y91>0;Z92);$AU$27*$E$9;0)

Ainsi de suite

Ce qui correspond à 4 "SI" maximum
Ensuite dans une seule et même macro tu rapatries tous les codes créés par
toutes les petites macros
Puis à la fin de ce nouveau code tu insères l'instruction qui concaténe
toutes les parties représentées par les lettres
ce qui devient la formule de la cellule active ici :
ActiveCell.FormulaR1C1 = A & B & c & D

Reste à trouver un code judicieux à associer pour traiter toutes tes feuilles

As tu tout compris ???
Celà te convient-il ???
As tu encore besoin d'aide pour finaliser ???
A ton service !!!


Ah oui OK j'avais pas vu tu as scindé l'ensemble du calcul en 4 parties, bon
annule ma question !!! par contre retient toujours pour m'expliquer comment
tu trouves la correspondance de la cellule, t'inquiètes je vois bien que R
c'est row et C column mais j'ai absolument besoin de comprendre la
correspondance parce qu'en plus je n'ai pas que lui à faire et je ne vais
tout de même tout te faire traduire !!!

Merci beaucoup
Céline


Salut Céline
Solution macro :

ActiveCell.FormulaR1C1 = _

"=IF(AND(R[69]C[19]>0,R[70]C[20]),R6C47*R9C5,0)+IF(AND(R[72]C[19]>0,R[73]C[20]),R9C47*R9C5,0)+IF(AND(R[75]C[19]>0,R[76]C[20]),R12C47*R9C5,0)+IF(AND(R[78]C[19]>0,R[79]C[20]),R15C47*R9C5,0)"
A = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"=IF(AND(R[81]C[19]>0,R[82]C[20]),R18C47*R9C5,0)+IF(AND(R[84]C[19]>0,R[85]C[20]),R21C47*R9C5,0)+IF(AND(R[87]C[19]>0,R[88]C[20]),R24C47*R9C5,0)+IF(AND(R[90]C[19]>0,R[91]C[20]),R27C47*R9C5,0)"
B = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"=IF(AND(R[93]C[19]>0,R[94]C[20]),R30C47*R9C5,0)+IF(AND(R[96]C[19]>0,R[97]C[20]),R33C47*R9C5,0)+IF(AND(R[99]C[19]>0,R[100]C[20]),R36C47*R9C5,0)+IF(AND(R[102]C[19]>0,R[103]C[20]),R39C47*R9C5,0)"
C = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = _

"=IF(AND(R[105]C[19]>0,R[106]C[20]),R42C47*R9C5,0)+IF(AND(R[108]C[19]>0,R[109]C[20]),R45C47*R9C5,0)+IF(AND(R45C22>0,R[107]C[19]>0,R[107]C[19]<12),R45C47*R9C5,""0"")"
D = ActiveCell.FormulaR1C1
ActiveCell.FormulaR1C1 = A + B + C + D

Reste à rajouter dans ce code l'instruction pour mettre la cellule active
dans chaque classeur à traiter comme par exemple :

Workbooks("Classeur1").Activate
Sheets("Feuil2").Select
Range("A1").Select
et tout le code ci-dessus

Celà te convient-il ???
Dis moi !!!


Bonjour,
voilà ma cellule qu'il faut que je copie dans plusieurs classeurs:
=SI(ET(Y70>0;Z71);$AU$6*$E$9;0)+SI(ET(Y73>0;Z74);$AU$9*$E$9;0)+SI(ET(Y76>0;Z77);$AU$12*$E$9;0)+SI(ET(Y79>0;Z80);$AU$15*$E$9;0)+SI(ET(Y82>0;Z83);$AU$18*$E$9;0)+SI(ET(Y85>0;Z86);$AU$21*$E$9;0)+SI(ET(Y88>0;Z89);$AU$24*$E$9;0)+SI(ET(Y91>0;Z92);$AU$27*$E$9;0)+SI(ET(Y94>0;Z95);$AU$30*$E$9;0)+SI(ET(Y97>0;Z98);$AU$33*$E$9;0)+SI(ET(Y100>0;Z101);$AU$36*$E$9;0)+SI(ET(Y103>0;Z104);$AU$39*$E$9;0)+SI(ET(Y106>0;Z107);$AU$42*$E$9;0)+SI(ET(Y109>0;Z110);$AU$45*$E$9;0)+SI(ET($V$45>0;Y108>0;Y108<12);$AU$45*$E$9;"0")

j'ai essayé pleins de trucs mais impossible,
comment puis-je écrire une fonction dans range ???
Merci


















1 2