If Range("B10:B25") <= 0 Then

jja2

XLDnaute Nouveau
Bonjour à tous

J’essaye de faire une boucle if then, mais pas moyens, je ne comprends rien.

Le but est de soustraire la valeur de la cellule "B8" à la sélection "B10:B25"
Sauf si la valeur est de 0.

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".

code :

Sub CommandButton1_Click()

If Range("B10:B25") <= 0 Then

Range("B8").Select
Selection.Copy
Range("B10:B25").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, _
SkipBlanks:=True, Transpose:=False

End If


End Sub




SI quelqu'un à une idée ce serais super !


jja
 

Excel-lent

XLDnaute Barbatruc
Re : If Range("B10:B25") <= 0 Then

Bonjour Jja2,

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.

Bonne soirée
 

claudusaix

XLDnaute Nouveau
Re : If Range("B10:B25") <= 0 Then

Bonsoir,

Je suis assez d'accord avec Excel-lent. En effet, la collection Range("B10:B25") doit être suivi d'un point et d'une propriété comme value ou formula.

Ex : Range("B10:B25").Value ou Range("B10:B25").Formula

Mais, il se peut aussi d'être tout simplement que vous deviez utiliser la propriété WorksheetFunction.Sum(Range("B10:B25")).

Cordialement,
 

Paritec

XLDnaute Barbatruc
Re : If Range("B10:B25") <= 0 Then

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".
 

Luinil

XLDnaute Nouveau
Re : If Range("B10:B25") <= 0 Then

Sans trop savoir si je répond bien a la bonne question.

Bonjour le forum.
Et si tu n'utilsait pas de macro?
En B9
Code:
=SI(B10=0;0;(B10-B8))+SI(B11=0;0;(B11-B8))+SI(B12=0;0;(B12-B8))+SI(B13=0;0;(B13-B8))+SI(B14=0;0;(B14-B8))+SI(B15=0;0;(B15-B8))+SI(B16=0;0;(B16-B8))+SI(B17=0;0;(B17-B8))+SI(B18=0;0;(B18-B8))+SI(B19=0;0;(B19-B8))+SI(B20=0;0;(B20-B8))+SI(B21=0;0;(B21-B8))+SI(B22=0;0;(B22-B8))+SI(B23=0;0;(B23-B8))+SI(B24=0;0;(B24-B8))+SI(B25=0;0;(B25-B8))
 

jja2

XLDnaute Nouveau
Re : If Range("B10:B25") <= 0 Then

bonsoir Excel-lent

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 = vide Ne 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)


voilà j'espère etre assez clair

merci pour votre aide qui n'est précieuse.

jja
 

Excel-lent

XLDnaute Barbatruc
Re : If Range("B10:B25") <= 0 Then

Bonsoir Jja2, le fil,

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!

Bonne soirée
 
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : If Range("B10:B25") <= 0 Then

Bonsoir excellent luinil claudusaix le forum,

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
 
Dernière édition:

jja2

XLDnaute Nouveau
Re : If Range("B10:B25") <= 0 Then

Bonjour à tous et merci pour l'aide que vous m'avez apporté .

voici le lien du fichier " fini".
si quelqu'un à des idées pour améliorer je suis biensûr preneur !

merci encore


lien du fichier zip :

Ce lien n'existe plus celine.zip
 

Discussions similaires

Réponses
3
Affichages
550

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510