Des idées, j'en ai des tonnes, mais au vu de tes informations, je ne sais laquelle t'iras le mieux!
Peux-tu nous préciser les points suivant :
quand tu écris Range("B10:B25") <= 0
-> tu parles de la somme de B10 à B25 qui doit être supérieur ou égale à zéro (ou vide)?
-> tu veux que CHAQUE cellule de la zone B10 à B25 soit supérieur ou égale à zéro (ou vide)?
-> tu veux soustraire B8 à chacune des cellules de B10 à B25?
-> que veux tu faire dans le cas où cellule B... (inclus entre 10 et 25) est supérieur AVANT déduction de B8 mais devient négative après???
Bref, pleins de questions importantes qui nous aiderais bcp pour mieux te répondre.
Bonsoir excellent claudusaix JJA le forum,
Je complète les interrogations, juste comme cela, car tu veux retrancher "b8" à quoi une somme? et surtout là ou moi je sais plus c'est on fait quoi de "b9" c'est le résultat peut-être? puisque tu ne veux pas le fausser ?
Le moins que l'on puisse dir c'est que tu es vague JJA !!!!!
a+
Papou
Les cell "B10:B25" ne sont pas forcément toutes remplies, je veux donc éviter les nbrs négatifs pour ne pas fausser le total qui ce trouve en "B9".
je veux soustraire B8 à chacune des cellules de B10 à B25 si celle-ci est superieur à 0
si B10 = 5 soustraire B8
B11 = 4 soustraire B8
B12 = videNe pas soustraire
dans le cas où cellule B... (inclus entre 10 et 25) est supérieur AVANT déduction de B8 mais devient négative après je pensais à un msgbox pour avertir que c'est faux ( il ne peux pas y avoir -1 en stock !)
b8 = valeur à enlever ( article complet vendu) qui vient d'un textbox
b9 = valeur min de B10:B25 qui me donne le nbr d'article complet
b10 b11 b12 etc = 1 élément de l'article
un article peu avoir au minimum 1 ligne (ligne 10) jusqu'à 15 lignes ( lignes 10:24)
Génial! Exactement les réponses dont j'avais besoin.
Voici donc ma proposition
Code:
Sub Test()
For i = 10 To [COLOR="Blue"]Range("B65536").End(xlUp).Row[/COLOR]
If Cells(i, 2) - Range("B8") <= 0 Then
MsgBox "B8 n'a pas été déduit dans la cellule B" & i & " car sinon le résultat aurait été négatif"
Else: Cells(i, 2) = Cells(i, 2) - Range("B8")
End If
Next i
End Sub
J'ai utilisé Range("B65536").End(xlUp).Row ainsi la macro s'adaptera tout seul aux nombres de lignes.
Elle fera B10...B25 comme demandé si B25 est la dernière cellule remplis. Mais par contre si tu as :
-> plus de lignes que prévu, il ira jusqu'à la fin
-> moins de lignes, il ne se fatiguera pas à aller jusqu'à B25.
Pas d'inquiétudes pour tes cellules vident, car j'ai utilisé : Range("B65536").End(xlUp).Row
et non pas Range("B10").End(xlDown).Row
car dans ce cas, tes cellules vides auraient posé soucis
Je me suis permis de corriger ta macro, je te laisse corriger mon orthographe
Edition : contrairement à Paritec (que je salue au passage) je ne teste pas les cellules vides, mais c'est volontaire car inutile. Cellule vide - x = nombre négatif, donc la cellule restera vide avec ou sans test!
bon on avance pas vite car il est avare de fichier mais
Sub calcul()
Dim i As Integer
For i = 10 To 25
If Range("b" & i) > 0 And Range("b" & i) > Range("b8") Then Range("b" & i) = Range("b" & i).Value - Range("b8").Value _
Else: Range("b" & i).Activate: MsgBox " Impossible stock trop petit "
Next
End Sub