bonjour,
j'ai une formule (ouais!!!), particulièrement longue (bof), que voici:
=SI(LC(-1)="";"";SI(LC(-6)="";SI(LC(-5)="";SI(LC(-3)="";"";
SI((LC(-8)-LC(-1))<1;SI((LC(-8)-LC(-1))<-1;(LC(-8)-LC(-1));"");
(LC(-8)-LC(-1))));"");LC(-8)-LC(-1)))
mon soucis, est que cette formule est recopié environ 25000 fois dans un mm
classeur, je voudrais savoir si l'on peut la nommée pour n'avoir que (par
exemple: c8=formuletoto.
je pense que mon classeur sera dans ce cas là, moins lourd,
si d'autres solution encore mieux, n'hésitez pas
.
merci de m'expliquer la démarche
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FxM
Bonjour,
Il serait possible de remplacer ta formule par une fonction perso du genre : alt-F1 pour ouvrir l'éditeur VBA insertion | module Y taper ce qui suit : Public Function formuletoto() With Application.Caller 'cellule contenant la formule c1 = IsEmpty(.Offset(0, -1)) 'si vide If c1 Then formuletoto = "": Exit Function Else 'sinon 'à suivre ... end if End With end function
Le "à suivre" est fonction de ce qu'il y a à mettre. En effet : D'une part, j j'ai été un peu retardé par le découpage ta formule dans laquelle deux valeurs manquent. Ainsi, pour retrouver la structure classique : (avec cx = condition n°x, vx = valeur si vrai, fx = valeur si faux) =si(c1;v1;si(c2;si(c3;si(c4;v4;si(c5;si(c6;v6;f6);f5);f4);f3);f2);f1) En reprenant ta formule, je suis arrivé à : =si(c1;"";si(c2;si(c3;si(c4;"";si(c5;si(c6;v6;"");f5) );"");f2) ) Les deux 'trous' indiquent des valeurs manquantes.
D'autre part, et en y regardant de plus près, il est probable de pouvoir simplifier ta formule et donc accélérer le calcul à faire. - il semble que les colonnes à gauche (-1, -6, -5 ou -8) sont vides, le résultat soit "". - (LC(-8)-LC(-1))<1 et LC(-8)-LC(-1))<-1 sont très similaires, il devrait y avoir moyen de combiner tout cela.
Aussi, souhaites-tu nous confier quelques exemples exemple de calcul et de résultat t'ayant mené à cette formule ? Au besoin, utilise cjoint.com
@+ FxM
bonjour, j'ai une formule (ouais!!!), particulièrement longue (bof), que voici: =SI(LC(-1)="";"";SI(LC(-6)="";SI(LC(-5)="";SI(LC(-3)="";""; SI((LC(-8)-LC(-1))<1;SI((LC(-8)-LC(-1))<-1;(LC(-8)-LC(-1));""); (LC(-8)-LC(-1))));"");LC(-8)-LC(-1)))
mon soucis, est que cette formule est recopié environ 25000 fois dans un mm classeur, je voudrais savoir si l'on peut la nommée pour n'avoir que (par exemple: c8=formuletoto. je pense que mon classeur sera dans ce cas là, moins lourd, si d'autres solution encore mieux, n'hésitez pas .. merci de m'expliquer la démarche
Bonjour,
Il serait possible de remplacer ta formule par une fonction perso du genre :
alt-F1 pour ouvrir l'éditeur VBA
insertion | module
Y taper ce qui suit :
Public Function formuletoto()
With Application.Caller 'cellule contenant la formule
c1 = IsEmpty(.Offset(0, -1)) 'si vide
If c1 Then
formuletoto = "": Exit Function
Else 'sinon
'à suivre ...
end if
End With
end function
Le "à suivre" est fonction de ce qu'il y a à mettre. En effet :
D'une part, j j'ai été un peu retardé par le découpage ta formule dans
laquelle deux valeurs manquent.
Ainsi, pour retrouver la structure classique : (avec cx = condition n°x,
vx = valeur si vrai, fx = valeur si faux)
=si(c1;v1;si(c2;si(c3;si(c4;v4;si(c5;si(c6;v6;f6);f5);f4);f3);f2);f1)
En reprenant ta formule, je suis arrivé à :
=si(c1;"";si(c2;si(c3;si(c4;"";si(c5;si(c6;v6;"");f5) );"");f2) )
Les deux 'trous' indiquent des valeurs manquantes.
D'autre part, et en y regardant de plus près, il est probable de pouvoir
simplifier ta formule et donc accélérer le calcul à faire.
- il semble que les colonnes à gauche (-1, -6, -5 ou -8) sont vides, le
résultat soit "".
- (LC(-8)-LC(-1))<1 et LC(-8)-LC(-1))<-1 sont très similaires, il
devrait y avoir moyen de combiner tout cela.
Aussi, souhaites-tu nous confier quelques exemples exemple de calcul et
de résultat t'ayant mené à cette formule ? Au besoin, utilise cjoint.com
@+
FxM
bonjour,
j'ai une formule (ouais!!!), particulièrement longue (bof), que voici:
=SI(LC(-1)="";"";SI(LC(-6)="";SI(LC(-5)="";SI(LC(-3)="";"";
SI((LC(-8)-LC(-1))<1;SI((LC(-8)-LC(-1))<-1;(LC(-8)-LC(-1));"");
(LC(-8)-LC(-1))));"");LC(-8)-LC(-1)))
mon soucis, est que cette formule est recopié environ 25000 fois dans un mm
classeur, je voudrais savoir si l'on peut la nommée pour n'avoir que (par
exemple: c8=formuletoto.
je pense que mon classeur sera dans ce cas là, moins lourd,
si d'autres solution encore mieux, n'hésitez pas
..
merci de m'expliquer la démarche
Il serait possible de remplacer ta formule par une fonction perso du genre : alt-F1 pour ouvrir l'éditeur VBA insertion | module Y taper ce qui suit : Public Function formuletoto() With Application.Caller 'cellule contenant la formule c1 = IsEmpty(.Offset(0, -1)) 'si vide If c1 Then formuletoto = "": Exit Function Else 'sinon 'à suivre ... end if End With end function
Le "à suivre" est fonction de ce qu'il y a à mettre. En effet : D'une part, j j'ai été un peu retardé par le découpage ta formule dans laquelle deux valeurs manquent. Ainsi, pour retrouver la structure classique : (avec cx = condition n°x, vx = valeur si vrai, fx = valeur si faux) =si(c1;v1;si(c2;si(c3;si(c4;v4;si(c5;si(c6;v6;f6);f5);f4);f3);f2);f1) En reprenant ta formule, je suis arrivé à : =si(c1;"";si(c2;si(c3;si(c4;"";si(c5;si(c6;v6;"");f5) );"");f2) ) Les deux 'trous' indiquent des valeurs manquantes.
D'autre part, et en y regardant de plus près, il est probable de pouvoir simplifier ta formule et donc accélérer le calcul à faire. - il semble que les colonnes à gauche (-1, -6, -5 ou -8) sont vides, le résultat soit "". - (LC(-8)-LC(-1))<1 et LC(-8)-LC(-1))<-1 sont très similaires, il devrait y avoir moyen de combiner tout cela.
Aussi, souhaites-tu nous confier quelques exemples exemple de calcul et de résultat t'ayant mené à cette formule ? Au besoin, utilise cjoint.com
@+ FxM
bonjour, j'ai une formule (ouais!!!), particulièrement longue (bof), que voici: =SI(LC(-1)="";"";SI(LC(-6)="";SI(LC(-5)="";SI(LC(-3)="";""; SI((LC(-8)-LC(-1))<1;SI((LC(-8)-LC(-1))<-1;(LC(-8)-LC(-1));""); (LC(-8)-LC(-1))));"");LC(-8)-LC(-1)))
mon soucis, est que cette formule est recopié environ 25000 fois dans un mm classeur, je voudrais savoir si l'on peut la nommée pour n'avoir que (par exemple: c8=formuletoto. je pense que mon classeur sera dans ce cas là, moins lourd, si d'autres solution encore mieux, n'hésitez pas .. merci de m'expliquer la démarche
jps
et F11 pour ouvrir l'aide, missié FxM? jps
"FxM" a écrit dans le message de news:
Bonjour,
alt-F1 pour ouvrir l'éditeur VBA
et F11 pour ouvrir l'aide, missié FxM?
jps
"FxM" <nullos@greuchmeu.ici> a écrit dans le message de news:
uB5JqENsGHA.1196@TK2MSFTNGP04.phx.gbl...
Je m'a trompé ? Mettons cela sur le compte de la chaleur et de la faim. Voui, c'est Alt-F11 pour VBE.
@+ FxM
et F11 pour ouvrir l'aide, missié FxM? jps
"FxM" a écrit dans le message de news:
Bonjour,
alt-F1 pour ouvrir l'éditeur VBA
carlostropico
alors, par contre, je ne comprends rien à la prog vb, je suis mm une grosse quiche pour ça, mais je vais essayé, y a t'il une petite aide qui puisse m'aiguiller, sinon en gros pour la fonction, je veux que dans cette cellule s'affiche le résultat apparaissant dans une autre cellule, si les cellules 3,4 et 6 ne sont pas vide, et si le résultat de la soustraction entre les cellules 1 et 8 soit compris entre 1 et - 1 ( en effet, les décimales, n'étant pas mais amis pour cette cellule et n'aimant pas les zéros, je veux que cette cellules reste vierge si le résultat arrondi est 0. cela ferait donc, tu as raison 4 variables , mais je ne sais pas écrire "compris entre 1 et -1 dans la fonction if. si tu peux m'aiguiller pour tout ça, merci en tout cas pour ce début de réponse.
alors, par contre, je ne comprends rien à la prog vb, je suis mm une grosse
quiche pour ça, mais je vais essayé, y a t'il une petite aide qui puisse
m'aiguiller, sinon en gros pour la fonction, je veux que dans cette cellule
s'affiche le résultat apparaissant dans une autre cellule, si les cellules
3,4 et 6 ne sont pas vide, et si le résultat de la soustraction entre les
cellules 1 et 8 soit compris entre 1 et - 1 ( en effet, les décimales,
n'étant pas mais amis pour cette cellule et n'aimant pas les zéros, je veux
que cette cellules reste vierge si le résultat arrondi est 0.
cela ferait donc, tu as raison 4 variables , mais je ne sais pas écrire
"compris entre 1 et -1 dans la fonction if. si tu peux m'aiguiller pour tout
ça,
merci en tout cas pour ce début de réponse.
alors, par contre, je ne comprends rien à la prog vb, je suis mm une grosse quiche pour ça, mais je vais essayé, y a t'il une petite aide qui puisse m'aiguiller, sinon en gros pour la fonction, je veux que dans cette cellule s'affiche le résultat apparaissant dans une autre cellule, si les cellules 3,4 et 6 ne sont pas vide, et si le résultat de la soustraction entre les cellules 1 et 8 soit compris entre 1 et - 1 ( en effet, les décimales, n'étant pas mais amis pour cette cellule et n'aimant pas les zéros, je veux que cette cellules reste vierge si le résultat arrondi est 0. cela ferait donc, tu as raison 4 variables , mais je ne sais pas écrire "compris entre 1 et -1 dans la fonction if. si tu peux m'aiguiller pour tout ça, merci en tout cas pour ce début de réponse.
FxM
alors, par contre, je ne comprends rien à la prog vb, je suis mm une grosse quiche pour ça, mais je vais essayé, y a t'il une petite aide qui puisse m'aiguiller, sinon en gros pour la fonction, je veux que dans cette cellule s'affiche le résultat apparaissant dans une autre cellule, si les cellules 3,4 et 6 ne sont pas vide, et si le résultat de la soustraction entre les cellules 1 et 8 soit compris entre 1 et - 1 ( en effet, les décimales, n'étant pas mais amis pour cette cellule et n'aimant pas les zéros, je veux que cette cellules reste vierge si le résultat arrondi est 0. cela ferait donc, tu as raison 4 variables , mais je ne sais pas écrire "compris entre 1 et -1 dans la fonction if. si tu peux m'aiguiller pour tout ça, merci en tout cas pour ce début de réponse.
Hello,
Pourrais-tu préciser quelques points :
- cellules 3, 4 et 6 non vides a) Ta formule étant en mode LC, j'en déduis qu'elle est en colonne 9. b) Entrevois-tu de rester en mode 'LC' qui est assez illisible pour passer en mode 'A1' est possible (outils - options | ...)
- Qu'entends-tu par "résultat arrondi" différent de 0 ? Dans ta formule, il n'y a rien qui arrondisse quoi que ce soit.
- Si l'on considère les valeurs suivantes pour les colonnes LC(-1) et LC(-8), quel serait le résultat attendu ?
En première approche (avec un doute sur l'arrondi), je tends vers : =si(et(A3<>"";A4<>"";A6<>"";A1<>"";A1<>A8);si(abs(A1-A8)>1;A1-A8;"");"") =si(et(LC(-6)<>"";LC(-5)<>"";LC(-3)<>"";LC(-8)<>"";LC(-8)<>LC(-1));si(abs(LC(-8)-LC(-1))>1;LC(-8)-LC(-1);"");"")
@+ FxM
alors, par contre, je ne comprends rien à la prog vb, je suis mm une grosse
quiche pour ça, mais je vais essayé, y a t'il une petite aide qui puisse
m'aiguiller, sinon en gros pour la fonction, je veux que dans cette cellule
s'affiche le résultat apparaissant dans une autre cellule, si les cellules
3,4 et 6 ne sont pas vide, et si le résultat de la soustraction entre les
cellules 1 et 8 soit compris entre 1 et - 1 ( en effet, les décimales,
n'étant pas mais amis pour cette cellule et n'aimant pas les zéros, je veux
que cette cellules reste vierge si le résultat arrondi est 0.
cela ferait donc, tu as raison 4 variables , mais je ne sais pas écrire
"compris entre 1 et -1 dans la fonction if. si tu peux m'aiguiller pour tout
ça,
merci en tout cas pour ce début de réponse.
Hello,
Pourrais-tu préciser quelques points :
- cellules 3, 4 et 6 non vides
a) Ta formule étant en mode LC, j'en déduis qu'elle est en colonne 9.
b) Entrevois-tu de rester en mode 'LC' qui est assez illisible pour
passer en mode 'A1' est possible (outils - options | ...)
- Qu'entends-tu par "résultat arrondi" différent de 0 ?
Dans ta formule, il n'y a rien qui arrondisse quoi que ce soit.
- Si l'on considère les valeurs suivantes pour les colonnes LC(-1) et
LC(-8), quel serait le résultat attendu ?
En première approche (avec un doute sur l'arrondi), je tends vers :
=si(et(A3<>"";A4<>"";A6<>"";A1<>"";A1<>A8);si(abs(A1-A8)>1;A1-A8;"");"")
=si(et(LC(-6)<>"";LC(-5)<>"";LC(-3)<>"";LC(-8)<>"";LC(-8)<>LC(-1));si(abs(LC(-8)-LC(-1))>1;LC(-8)-LC(-1);"");"")
alors, par contre, je ne comprends rien à la prog vb, je suis mm une grosse quiche pour ça, mais je vais essayé, y a t'il une petite aide qui puisse m'aiguiller, sinon en gros pour la fonction, je veux que dans cette cellule s'affiche le résultat apparaissant dans une autre cellule, si les cellules 3,4 et 6 ne sont pas vide, et si le résultat de la soustraction entre les cellules 1 et 8 soit compris entre 1 et - 1 ( en effet, les décimales, n'étant pas mais amis pour cette cellule et n'aimant pas les zéros, je veux que cette cellules reste vierge si le résultat arrondi est 0. cela ferait donc, tu as raison 4 variables , mais je ne sais pas écrire "compris entre 1 et -1 dans la fonction if. si tu peux m'aiguiller pour tout ça, merci en tout cas pour ce début de réponse.
Hello,
Pourrais-tu préciser quelques points :
- cellules 3, 4 et 6 non vides a) Ta formule étant en mode LC, j'en déduis qu'elle est en colonne 9. b) Entrevois-tu de rester en mode 'LC' qui est assez illisible pour passer en mode 'A1' est possible (outils - options | ...)
- Qu'entends-tu par "résultat arrondi" différent de 0 ? Dans ta formule, il n'y a rien qui arrondisse quoi que ce soit.
- Si l'on considère les valeurs suivantes pour les colonnes LC(-1) et LC(-8), quel serait le résultat attendu ?
En première approche (avec un doute sur l'arrondi), je tends vers : =si(et(A3<>"";A4<>"";A6<>"";A1<>"";A1<>A8);si(abs(A1-A8)>1;A1-A8;"");"") =si(et(LC(-6)<>"";LC(-5)<>"";LC(-3)<>"";LC(-8)<>"";LC(-8)<>LC(-1));si(abs(LC(-8)-LC(-1))>1;LC(-8)-LC(-1);"");"")
@+ FxM
carlostropico
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25)) voila la formule. pour l'arrondi, le format de la cellule est un nombre sans décimal, donc tout résultat compris entre -1 et 1 ou plus précisement entre -0.5 et 0.5, donne 0 dans le cellule, et comme précisé précédemment je n'aime pas les zéros, donc je ne veux pas qu'ils apparaissent, merci pour ces réponses en tout cas, n'hésites pas (bien sur, si tu en as le temps ) à approfondir la solution vb, cela me permettra de faire mes premières armes en la question. merci en tout cas
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25))
voila la formule.
pour l'arrondi, le format de la cellule est un nombre sans décimal,
donc tout résultat compris entre -1 et 1 ou plus précisement entre -0.5 et
0.5, donne 0 dans le cellule, et comme précisé précédemment je n'aime pas les
zéros, donc je ne veux pas qu'ils apparaissent,
merci pour ces réponses en tout cas,
n'hésites pas (bien sur, si tu en as le temps ) à approfondir la solution
vb, cela me permettra de faire mes premières armes en la question.
merci en tout cas
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25)) voila la formule. pour l'arrondi, le format de la cellule est un nombre sans décimal, donc tout résultat compris entre -1 et 1 ou plus précisement entre -0.5 et 0.5, donne 0 dans le cellule, et comme précisé précédemment je n'aime pas les zéros, donc je ne veux pas qu'ils apparaissent, merci pour ces réponses en tout cas, n'hésites pas (bien sur, si tu en as le temps ) à approfondir la solution vb, cela me permettra de faire mes premières armes en la question. merci en tout cas
carlostropico
bonjour, alors pour la partie masquer si le résultat et compris entre 1 et -1, je vais passer par le format conditionel et donc le retirer de la formule, ça allégera un peu déja pour le reste, je cherche encore bonne jkournée
bonjour,
alors pour la partie masquer si le résultat et compris entre 1 et -1, je
vais passer par le format conditionel et donc le retirer de la formule, ça
allégera un peu déja
pour le reste, je cherche encore
bonne jkournée
bonjour, alors pour la partie masquer si le résultat et compris entre 1 et -1, je vais passer par le format conditionel et donc le retirer de la formule, ça allégera un peu déja pour le reste, je cherche encore bonne jkournée
FxM
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25)) voila la formule. pour l'arrondi, le format de la cellule est un nombre sans décimal, donc tout résultat compris entre -1 et 1 ou plus précisement entre -0.5 et 0.5, donne 0 dans le cellule, et comme précisé précédemment je n'aime pas les zéros, donc je ne veux pas qu'ils apparaissent, merci pour ces réponses en tout cas, n'hésites pas (bien sur, si tu en as le temps ) à approfondir la solution vb, cela me permettra de faire mes premières armes en la question. merci en tout cas
Bonjour,
En reprenant ta formule, voici comment je l'ai convertie en VBA basique et non optimisé :o)
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25)) =SI(c1;v1;SI(c2;SI(c3;SI(c4;v4;SI(c5;SI(c6;v6;f6);f5));f3);f2)) dans laquelle la convention est celle définie précédemment,à savoir c1 est la condition 1 v1 est la valeur su vraie pour cette condition 1 f1 est la valeur si faux
En la transférant directement en VBA : If c1 Then v1 Else If c2 Then If c3 Then If c4 Then v4 Else If c5 Then If c6 Then v6 Else f6 End If Else f5 End If f4 End If else f3 End If Else f2 End If f1 End If
puis en la mettant dans une fonction perso après inscription des condtions et valeurs réelles. Rappels : - pour créer la fonction -> alt-f11 pour VBA puis insertion - module) - pour l'utiliser -> dans la feuille de calcul =teste()
Public Function teste() 'r est la numéro de la ligne de la fonction appelante r = Application.Caller.Row
'condition 1 If Range("Q" & r) = "" Then 'valeur si vrai 1 teste = "" Else 'valeur si faux 1 'condition 2 If Range("L" & r) = "" Then 'condition 3 If Range("M" & r) = "" Then If Range("O" & r) = "" Then teste = "" Else If (Range("J" & r) - Range("Q" & r)) < 1 Then If (Range("J" & r) - Range("Q" & r)) < -1 Then teste = Range("J" & r) - Range("Q" & r) Else teste = "" End If Else teste = Range("J" & r) - Range("Q" & r) End If End If Else teste = "" End If Else teste = Range("J" & r) - Range("Q" & r) End If teste = "" End If End Function
On pourrait également la présenter sous la forme :
Pour tester la condition1, si remplie -> valeur puis sortir If Range("Q" & r) = "" Then teste = "":exit function
passer à la suivante ...
Pour avancer plus avant, il faudrait des données plus concrètes :o)
@+ FxM
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25))
voila la formule.
pour l'arrondi, le format de la cellule est un nombre sans décimal,
donc tout résultat compris entre -1 et 1 ou plus précisement entre -0.5 et
0.5, donne 0 dans le cellule, et comme précisé précédemment je n'aime pas les
zéros, donc je ne veux pas qu'ils apparaissent,
merci pour ces réponses en tout cas,
n'hésites pas (bien sur, si tu en as le temps ) à approfondir la solution
vb, cela me permettra de faire mes premières armes en la question.
merci en tout cas
Bonjour,
En reprenant ta formule, voici comment je l'ai convertie en VBA basique
et non optimisé :o)
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25))
=SI(c1;v1;SI(c2;SI(c3;SI(c4;v4;SI(c5;SI(c6;v6;f6);f5));f3);f2))
dans laquelle la convention est celle définie précédemment,à savoir
c1 est la condition 1
v1 est la valeur su vraie pour cette condition 1
f1 est la valeur si faux
En la transférant directement en VBA :
If c1 Then
v1
Else
If c2 Then
If c3 Then
If c4 Then
v4
Else
If c5 Then
If c6 Then
v6
Else
f6
End If
Else
f5
End If
f4
End If
else
f3
End If
Else
f2
End If
f1
End If
puis en la mettant dans une fonction perso après inscription des
condtions et valeurs réelles. Rappels :
- pour créer la fonction -> alt-f11 pour VBA puis insertion - module)
- pour l'utiliser -> dans la feuille de calcul =teste()
Public Function teste()
'r est la numéro de la ligne de la fonction appelante
r = Application.Caller.Row
'condition 1
If Range("Q" & r) = "" Then
'valeur si vrai 1
teste = ""
Else
'valeur si faux 1
'condition 2
If Range("L" & r) = "" Then
'condition 3
If Range("M" & r) = "" Then
If Range("O" & r) = "" Then
teste = ""
Else
If (Range("J" & r) - Range("Q" & r)) < 1 Then
If (Range("J" & r) - Range("Q" & r)) < -1 Then
teste = Range("J" & r) - Range("Q" & r)
Else
teste = ""
End If
Else
teste = Range("J" & r) - Range("Q" & r)
End If
End If
Else
teste = ""
End If
Else
teste = Range("J" & r) - Range("Q" & r)
End If
teste = ""
End If
End Function
On pourrait également la présenter sous la forme :
Pour tester la condition1, si remplie -> valeur puis sortir
If Range("Q" & r) = "" Then teste = "":exit function
passer à la suivante ...
Pour avancer plus avant, il faudrait des données plus concrètes :o)
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25)) voila la formule. pour l'arrondi, le format de la cellule est un nombre sans décimal, donc tout résultat compris entre -1 et 1 ou plus précisement entre -0.5 et 0.5, donne 0 dans le cellule, et comme précisé précédemment je n'aime pas les zéros, donc je ne veux pas qu'ils apparaissent, merci pour ces réponses en tout cas, n'hésites pas (bien sur, si tu en as le temps ) à approfondir la solution vb, cela me permettra de faire mes premières armes en la question. merci en tout cas
Bonjour,
En reprenant ta formule, voici comment je l'ai convertie en VBA basique et non optimisé :o)
=SI(Q25="";"";SI(L25="";SI(M25="";SI(O25="";"";SI((J25-Q25)<1;SI((J25-Q25)<-1;(J25-Q25);"");(J25-Q25)));"");J25-Q25)) =SI(c1;v1;SI(c2;SI(c3;SI(c4;v4;SI(c5;SI(c6;v6;f6);f5));f3);f2)) dans laquelle la convention est celle définie précédemment,à savoir c1 est la condition 1 v1 est la valeur su vraie pour cette condition 1 f1 est la valeur si faux
En la transférant directement en VBA : If c1 Then v1 Else If c2 Then If c3 Then If c4 Then v4 Else If c5 Then If c6 Then v6 Else f6 End If Else f5 End If f4 End If else f3 End If Else f2 End If f1 End If
puis en la mettant dans une fonction perso après inscription des condtions et valeurs réelles. Rappels : - pour créer la fonction -> alt-f11 pour VBA puis insertion - module) - pour l'utiliser -> dans la feuille de calcul =teste()
Public Function teste() 'r est la numéro de la ligne de la fonction appelante r = Application.Caller.Row
'condition 1 If Range("Q" & r) = "" Then 'valeur si vrai 1 teste = "" Else 'valeur si faux 1 'condition 2 If Range("L" & r) = "" Then 'condition 3 If Range("M" & r) = "" Then If Range("O" & r) = "" Then teste = "" Else If (Range("J" & r) - Range("Q" & r)) < 1 Then If (Range("J" & r) - Range("Q" & r)) < -1 Then teste = Range("J" & r) - Range("Q" & r) Else teste = "" End If Else teste = Range("J" & r) - Range("Q" & r) End If End If Else teste = "" End If Else teste = Range("J" & r) - Range("Q" & r) End If teste = "" End If End Function
On pourrait également la présenter sous la forme :
Pour tester la condition1, si remplie -> valeur puis sortir If Range("Q" & r) = "" Then teste = "":exit function
passer à la suivante ...
Pour avancer plus avant, il faudrait des données plus concrètes :o)