Un code vb pour simplifier

gilou -  
 gilou -
Bonjour,
je suis confronté à un probleme de valeurs negatives qui me faussent une addition ,ma question est la suivante:
dans la plage de cellules (f4: k30) toute valeur <0 = 0 je vous remercie en esperant que l'en mettant ce code
dans une procedure selection_change je puisse arriver a mes fins
A voir également:

4 réponses

m@rina Messages postés 23936 Date d'inscription   Statut Contributeur Dernière intervention   11 466
 
Bonjour,

Je suppose que tes cellules contiennent des formules. Dans ce cas, la cellule peut changer sans pour autant être modifiée. Il me semble donc que ce n'est pas un événement SelectionChange dont tu as besoin, mais plutôt d'un Calculate.
Par exemple :

Private Sub Worksheet_Calculate()
For Each cellule In Range("F4:K30")
If cellule.Value < 0 Then
cellule.Value = 0
End If
Next
End Sub


Cela étant dit, s'il s'agit bien de formules, tu les perdras si la valeur est inférieure à 0. Je pense qu'il serait plus sage d'ajouter le IF x<0 dans la formule même...

m@rina
0
gilou
 
merci
pouvez -vous me donner un modele concret car je n'ai jamais melangé des macros avec des fonctions
si la f(x) est SI(.......;SI(........;SI(.........))))ou doit -on mettre le IF x<0 de plus est-ce vraiment x ou faut-il nommer la cell si :alors je crains une ref circulaire ; s v p expliquez moi cela dans le detail afin d'eviter qu'en voulant simplifier ,jen'aille "scratcher" des fonctions qui m'ont deja pris la tete en tout cas merci de m'avoir prevenu
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
bonjour Gilou,M@rina

tiens, pour 1 fois j'ai mis l'arobase... :-#

syntaxe VBA:
Set plage = Range("F4:F30")
total = Application.SumIf(plage, ">=0", plage)

mais + simplement par formule
=SOMME.SI(F4:F30;">=0";F4:F30)
0
gilou
 
re
c'est ca de doublonner ........ je crains d'avoir l'air c.... mais votre solution SOMME SI (.... je la met ou: à chaque f(x) ? avant ou apres les SI(....; si(.... encore merci
0
m@rina Messages postés 23936 Date d'inscription   Statut Contributeur Dernière intervention   11 466
 
Hello Michel_m (du coup j'ai ajouté le m aussi ! ;)

Pourquoi un somme.si ? Je n'ai pas vu que Gilou parlait de la somme de cette plage.. Mais bon, j'ai peut être pas tout lu !! :D Ou je n'ai peut être pas tout compris, ça c'est possible aussi !

Donc, Gilou, tu nous réexplique avec un peu plus de détails ?

m@rina
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
Coucou M@rin@

et 2 arobases, 2!

bin ch'ais pas, c'est le mot "addition" qui m'a aiguillé

"qui me faussent une addition ,ma question est la suivante:
dans la plage de cellules (f4: k30) toute valeur <0 = 0 "


Alors attendons Gilou
bonne soirée
0
gilou
 
bonjour
merci d'attendre . Alors voila le sujet . Dans une feuille j'ai crée un tableau qui me calcule des temps passés dans des tranches horaires : il suffit de saisir l'heure de debut et l'heure de fin pour savoir combien de temps
à ete passé de telle à telle heure : exemple : de 3 à 14 hr cela donne : de 0 à5 =2; de5à7 =2 ; de7à8 =1 ;de8à17= 5 ces resultats sont obtenus par une "armee" de f(x) SI mais parfois selon la saisie j'obtiens des valeurs negatives malgre la complexite des fonctions (probablement une mauvaise gestion des conditions) neanmoins si je n'avais pas eu envie de totaliser chaque colonne tout irai bien donc les valeurs negatives me genent ,c 'est là qu'aimablement vous m' aidez à convertir ces valeurs en 0
nb)1 j'ai 3 "etudes" de ce tableau 1) avec vba +/- potable ; 2) fonction si(et + recherche : pas mal mais dure à tirer dans le tableau ; 3) f(x) si: ma preferée ormis les val negatives
je vous ai tout dit le sujet principal est : comment convertir des valeurs negatives en 0 sans perturber l'action d'une fonction
merci d'avance
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
bo,jour,

rien, mais alors rien compris à tes explications...

a tout zazar si tu veux que la formule soit égale à zéro si le résultat est négatif:
=MAX(0;taformule)

Edit 14:03h: Au besoin met un extrait de ton classeur en pièce jointe, ce sera le mieux...
0
gilou
 
re
merci pour votre conseil, je l'archive, il servira; quant au tableau ;apres avoir remanié les formules ;il a l'air de fonctionner au cas ou vous voudrez ; je vous le joint (pour correction et commentaires)
au plaisir









http://www.cijoint.fr/cjlink.php?file=cj200903/cijqTazGqJ.xls
0