lancement macro sur valeur ds cell

Phillip

XLDnaute Occasionnel
Bonjour,

J'essaye de faire des calculs dans un tableau, mais je ne peux pas imbriquer plus de 7 SI, dans ma cellule, alors je vais me résoudre à faire une macro. Voilà ce que je voudrais faire :


A1 se calcule une fois que j'ai rentré des valeurs en A2 et B2, mais aussi dans certains cas de la valeur de D2 et D2, mais aussi parfois de la valeur de E2, en fonction de cette valeur d'A2. Pour éclairer ce que je veux, voici la formule (incomplète, puisque je ne peux pas rajouter de si, mais pas loin de la vérité) que j'ai collé en A1 :

=IF(AND(A2='x';C2='x';E2='x');'30';
IF(AND(A2='x';C2='x';OR(E2<>'x';E2<>''));SUM(20;E2);
IF(AND(A2='x';SUM(C2;D2)=10);'20';
IF(AND(SUM(A2;B2)=10;C2='');;
IF(AND(SUM(A2;B2)=10;C2<>'');SUM(10;C2);
IF(AND(A2='x';C2='';D2='');;
IF(AND(A2='x';C2+D2<10;C2<>'';D2<>'');SUM(20;C2;D2);SUM(A2;B2))))))))

Après, je voudrais que ma macro calcule B1 en fonction des valeurs de c2, d2, mais aussi e2, f2 et g2.....

Si ça n'est pas clair, je pense pouvoir me débrouiller avec le corps de la macro si quelqu'un m'indique comment la lancer 'au remplissage' d'une cellule donnée....

Merci beaucoup
 

Simons

XLDnaute Occasionnel
Phillip,

Tu peux imbriquer plus de 7 conditions.
Voici un exemple que j'avais utilisé dans un tableau avec des types d'emballage. A toi de l'adapter pour tes besoins eventuellement.

=SI($D17<=6;SI($D17=1;'Chassis';SI($D17=2;'Caisse IV C';SI($D17=3;'1/2 Caisse + Housse TS';SI($D17=4;'Chassis + Housse TS';SI($D17=5;'Caisse Bois Traité Fum.';SI($D17=6;'Caisse Bois Traité NIMP15';''))))));SI($D17=7;'Caisse Claire-voie';SI($D17=8;'Autres';'ERREUR')))

Byebye.
 

Phillip

XLDnaute Occasionnel
merci Simons,

mais je ne sais pas comment tu as fait.. Lorsque j'imbrique
=IF(AND(A2='x';C2='x';E2='x');'30';
IF(AND(A2='x';C2='x';E2='');;
IF(AND(A2='x';C2='x';e2<>'x');SUM(20;E2);
IF(AND(A2='x';SUM(C2;D2)=10);'20';
IF(AND(SUM(A2;B2)=10;C2='');;
IF(AND(SUM(A2;B2)=10;C2<>'');SUM(10;C2);
IF(AND(A2='x';C2='';D2='');;
IF(AND(A2='x';SUM(c2;d2)<>10;C2<>'';D2<>'');SUM(20;C2;D2);SUM(A2;B2)))))))))

Donc 8 si, j'ai une erreeur sur le dernier AND que je n'arrive pas à résoudre...Mon EXCEL est un excel 2000 en anglais, et l'aide précise bine que les si ne peuvent pas s'imbriquer plus de 7 fois...

PS : Si je prends la dernière partie de ma condition c-à-dire
=IF(AND(A2='x';SUM(C2;D2)<>10;C2<>'';D2<>'');SUM(20;C2;D2);SUM(A2;B2)), je n'ai pas d'erreur, donc j'en déduis que ma syntaxe est bonne, et qu'il n'aime pas mes 8 SI....

Des idées quelqu'un ?

Merci
 

popof

XLDnaute Occasionnel
Bonjour le fil

Une petite idée à Dvpé

En macro, tu cible ta feuille et l'ensemble de tes cellules à remplir
sheets('jjj').select
if 'case pas vide' then
range ' case ou le calcul doit se faire'
if 1er condition then
1er action
else
end if

et ainsi de suite

Désolé pas le temps de donné l'exemple précis mais idée à creuser, je verais cela demain mais si tu peux joindre un fichier pour l'exemple .

Voili voilou

Bonsoir à tous :whistle:
 

Phillip

XLDnaute Occasionnel
Merci popof pour ta réflexion, mais ça n'est pas tout à fait ça que je veux....Cette idée de macro doit marcher si elle s'execute à la fin du remplissage de mon tableau. Moi, ce que je voudrais, c'est que la macro s'éxécute à chaque fois que cela est 'nécessaire'...Pour être plus clair je joins un fichier exemple avec des explications et la formule avec des 'si' que j'ai collé en A...

Merci !!
 

Phillip

XLDnaute Occasionnel
Phillip écrit:
Merci popof pour ta réflexion, mais ça n'est pas tout à fait ça que je veux....Cette idée de macro doit marcher si elle s'execute à la fin du remplissage de mon tableau. Moi, ce que je voudrais, c'est que la macro s'éxécute à chaque fois que cela est 'nécessaire'...Pour être plus clair je joins un fichier exemple avec des explications et la formule avec des 'si' que j'ai collé en A...

Merci !!

Désolé...mal joint le fichier
 

Phillip

XLDnaute Occasionnel
Bonjour,

En fait j'ai trouvé ça sur le forum, et qui semble correspondre à ce que je cherche en adaptant :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim vI As Variant
Set vI = Application.Intersect(Target, Range([A20], [I21]))
If Not vI Is Nothing Then
ActiveWorkbook.SaveCopyAs 'c:Mes documents' & Day(Date) & Month(Date) & Year(Date) & '.xls'
End If
End Sub

Questions :

1) Faut il toujours cette syntaxe ?
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

2) Comment puis-je lancer cette private sub à partir de ma sub ? OU la lancer tout court ?

3) Comment la débugger ? Pas à pas ne focntionne pas..

1000 mercis
 

Phillip

XLDnaute Occasionnel
Bonjour,

En fait j'ai trouvé ça sur le forum, et qui semble correspondre à ce que je cherche en adaptant :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim vI As Variant
Set vI = Application.Intersect(Target, Range([A20], [I21]))
If Not vI Is Nothing Then
ActiveWorkbook.SaveCopyAs 'c:Mes documents' & Day(Date) & Month(Date) & Year(Date) & '.xls'
End If
End Sub

Questions :

1) Faut il toujours cette syntaxe ?
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

2) Comment puis-je lancer cette private sub à partir de ma sub ? OU la lancer tout court ?

3) Comment la débugger ? Pas à pas ne focntionne pas..

1000 mercis
 

Simons

XLDnaute Occasionnel
Re Phillip, le Forum,

Je ne suis pas hyper costaud en VBA. (je ne suis qu'un tout piti junior..:eek:
En tout cas pas assez pour décortiquer le code.. En entier.

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Signifie que ta macro se lance à chaque événement dans la ou les cellules séléctionées.

Sinon dis moi combien tu as de conditions à remplir et je vais essayer de te pondre une formule..

Bye.
 

ong alain

XLDnaute Nouveau
Bonjour à toutes & à tous

Notre ami veriland a dit:

ben moi j'ai découvert qu'on pouvait largement dépasser les 7 conditions 'SI' grâce au symbole &

ici je place un exemple de formule où je me suis volontairement arrêté à 18 ...


=SI(A1=1;'oui c'est 1';'')&SI(A1=2;'oui c'est 2';'')&SI(A1=3;'oui c'est 3';'')&SI(A1=4;'oui c'est 4';'')&SI(A1=5;'oui c'est 5';'')&SI(A1=6;'oui c'est 6';'')&SI(A1=7;'oui c'est 7';'')&SI(A1=8;'oui c'est 8';'')&SI(A1=9;'oui c'est 9';'')&SI(A1=10;'oui c'est 10';'')&SI(A1=11;'oui c'est 11';'')&SI(A1=12;'oui c'est 12';'')&SI(A1=13;'oui c'est 13';'')&SI(A1=14;'oui c'est 14';'')&SI(A1=15;'oui c'est 15';'')&SI(A1=16;'oui c'est 16';'')&SI(A1=17;'oui c'est 17';'')&SI(A1=18;'oui c'est 18';'')



Comme elle est assez longue je ne sais pas comment elle va s'afficher dans le forum, m'enfin normalement elle devrait passer vu qu'il y a des espaces dans la formule

et là je ne vous parle pas des 'SI' imbriqués dans un seul 'SI' du genre :


=SI(A1=1;'oui c'est 1';SI(A1=2;'non c'est 2';SI(A1=3;'là c'est 3';'faux'))) & bla bla bla ...



en fait on pourrait aller encore plus loin ... la seule limite je pense sera le nombre de caractère dans une cellule qui doit avoir une limite pour une formule (512 je crois) ... et encore j'en suis pas sur ...

par contre avec ce genre de formule une simple erreur ne pardonne pas ... il faudra par après une semaine et quelques cheveux en moins avant de voir qu'il manque une apostrophe ou une virgule à la place d'un point-virgule ... lol

Bonne programmation

A+ Vériland

http://vlohr.free.fr/Forum_VeriTi/forum_1.php?msg=4523&return=1#top Ong alain
 

Phillip

XLDnaute Occasionnel
ong alain écrit:
Bonjour à toutes & à tous

Notre ami veriland a dit:

ben moi j'ai découvert qu'on pouvait largement dépasser les 7 conditions 'SI' grâce au symbole &

ici je place un exemple de formule où je me suis volontairement arrêté à 18 ...


=SI(A1=1;'oui c'est 1';'')&SI(A1=2;'oui c'est 2';'')&SI(A1=3;'oui c'est 3';'')&SI(A1=4;'oui c'est 4';'')&SI(A1=5;'oui c'est 5';'')&SI(A1=6;'oui c'est 6';'')&SI(A1=7;'oui c'est 7';'')&SI(A1=8;'oui c'est 8';'')&SI(A1=9;'oui c'est 9';'')&SI(A1=10;'oui c'est 10';'')&SI(A1=11;'oui c'est 11';'')&SI(A1=12;'oui c'est 12';'')&SI(A1=13;'oui c'est 13';'')&SI(A1=14;'oui c'est 14';'')&SI(A1=15;'oui c'est 15';'')&SI(A1=16;'oui c'est 16';'')&SI(A1=17;'oui c'est 17';'')&SI(A1=18;'oui c'est 18';'')



Comme elle est assez longue je ne sais pas comment elle va s'afficher dans le forum, m'enfin normalement elle devrait passer vu qu'il y a des espaces dans la formule

et là je ne vous parle pas des 'SI' imbriqués dans un seul 'SI' du genre :


=SI(A1=1;'oui c'est 1';SI(A1=2;'non c'est 2';SI(A1=3;'là c'est 3';'faux'))) & bla bla bla ...



en fait on pourrait aller encore plus loin ... la seule limite je pense sera le nombre de caractère dans une cellule qui doit avoir une limite pour une formule (512 je crois) ... et encore j'en suis pas sur ...

par contre avec ce genre de formule une simple erreur ne pardonne pas ... il faudra par après une semaine et quelques cheveux en moins avant de voir qu'il manque une apostrophe ou une virgule à la place d'un point-virgule ... lol

Bonne programmation

A+ Vériland

http://vlohr.free.fr/Forum_VeriTi/f...>10;C2<>'';D2<>'');SUM(20;C2;D2);SUM(A2;B2)))
 

Discussions similaires

Réponses
10
Affichages
237
Réponses
2
Affichages
147

Statistiques des forums

Discussions
312 198
Messages
2 086 132
Membres
103 127
dernier inscrit
willwebdesign