XL 2010 Ajout d'un critère supplémentaire sur un code VBA

  • Initiateur de la discussion Initiateur de la discussion TheProdigy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

TheProdigy

XLDnaute Impliqué
Bonjour tou le monde bonjour les vbasites,

Je voudrais ajouter un autre critère sur "Sell" et "Buy",
1) le critère "Sell"; soit "Sell" soit "Ven".
2) La même chose pour "buy"; soit "buy" soit "Ach"

Le code

Option Explicit
Function fifoval(q As Range, Optional details As String) As Variant
Application.Volatile (True)
Dim i As Integer
Dim qstr As String
Dim pstr As String
Dim cqty As Integer
Dim prc As Double
Dim qty As Integer
Dim ctr As Integer
Dim dstr As String
Dim amt As Double
'Stop
For i = 2 To q.Row - 1
If Cells(i, 1) = Cells(q.Row, 1) Then
Select Case Cells(i, 2)
Case "Buy"
qstr = qstr & Cells(i, 4) & ","
pstr = pstr & Cells(i, 5) & ","
Case "Sell"
qty = Cells(i, 4)
Do While qty > 0

cqty = Val(qstr)
If cqty = 0 Then
fifoval = "Not enough balance"
Exit Function
End If
Select Case True
Case cqty = qty
qstr = Replace(qstr, cqty & ",", "", , 1)
pstr = Replace(pstr, Val(pstr) & ",", "", , 1)
qty = qty - cqty
Case cqty > qty
qstr = Replace(qstr, cqty, cqty - qty, , 1)
qty = 0
Case cqty < qty
qstr = Replace(qstr, cqty & ",", "", , 1)
pstr = Replace(pstr, Val(pstr) & ",", "", , 1)
qty = qty - cqty
Case cqty = 0
fifoval = "Not enough balance"
Exit Function
End Select
ctr = ctr + 1
If ctr > 1000 Then End: Stop
Loop
End Select
End If
Next i
qty = Cells(q.Row, 4)
Do While qty > 0

cqty = Val(qstr)
If cqty = 0 Then
fifoval = "Not enough balance"
Exit Function
End If
prc = Val(pstr)
Select Case True
Case cqty = qty
dstr = dstr & IIf(dstr = "", "", " + ") & qty & " * " & prc
amt = amt + qty * prc
qstr = Replace(qstr, cqty & ",", "", , 1)
pstr = Replace(pstr, Val(pstr) & ",", "", , 1)
qty = qty - cqty
Case cqty > qty
dstr = dstr & IIf(dstr = "", "", " + ") & qty & " * " & prc
amt = amt + qty * prc
qstr = Replace(qstr, cqty, cqty - qty, , 1)
qty = 0
Case cqty < qty
dstr = dstr & IIf(dstr = "", "", " + ") & cqty & " * " & prc
amt = amt + cqty * prc
qstr = Replace(qstr, cqty & ",", "", , 1)
pstr = Replace(pstr, Val(pstr) & ",", "", , 1)
qty = qty - cqty
End Select
ctr = ctr + 1
If ctr > 1000 Then End: Stop
Loop
If details = "" Then
fifoval = amt
Else
fifoval = dstr
End If
End Function

Merci beaucoup
 
Dernière édition:
bonjour,

comme tu vois il suffit de mettre une virgule et de rajouter une valeur !

je te donne une astuce, car je vois régulièrement une erreur, surtout par les débutants !?
il faut tenir compte des majuscules/minuscules ou vraiment être certain de la source !?
pour éviter ce piège il est préférable de tout tester soit minuscules soit majuscules !

exemple ici: Case "Buy", "Ach"
si c'est "buy" il ne sera pas reconnu !

exemple au hasard dans ton code tu as:
Select Case Cells(i, 2)
Case "Buy"
. . .

il serait préférable de faire comme ceci:
------- avec LCase()
Select Case LCase(Cells(i, 2))
Case "buy"
toutes les suivantes idem en minuscules

ou bien avec UCase()
Select Case UCase(Cells(i, 2))
Case "BUY"
toutes les suivantes idem en majuscules

voilà ! bonne journée.
 
bonjour,

comme tu vois il suffit de mettre une virgule et de rajouter une valeur !

je te donne une astuce, car je vois régulièrement une erreur, surtout par les débutants !?
il faut tenir compte des majuscules/minuscules ou vraiment être certain de la source !?
pour éviter ce piège il est préférable de tout tester soit minuscules soit majuscules !

exemple ici: Case "Buy", "Ach"
si c'est "buy" il ne sera pas reconnu !

exemple au hasard dans ton code tu as:
Select Case Cells(i, 2)
Case "Buy"
. . .

il serait préférable de faire comme ceci:
------- avec LCase()
Select Case LCase(Cells(i, 2))
Case "buy"
toutes les suivantes idem en minuscules

ou bien avec UCase()
Select Case UCase(Cells(i, 2))
Case "BUY"
toutes les suivantes idem en majuscules

voilà ! bonne journée.
Merci beaucoup
 
bonsoir,

qstr = qstr & Cells(i, 7) & ","

qstr est une variable de type string (chaîne de caractères)

si qstr contient déjà par exemple "bonjour "

et que Cells(i, 7) contient "monsieur"

alors qstr sera = "bonjour " & "monsieur" & ","
soit "bonjour monsieur,"

le signe & c'est pour "coller" l'ensemble
= "a" & "b" & "c" & "d"
soit un ensemble qui donne "abcd"

voilà !
 
bonsoir,

qstr = qstr & Cells(i, 7) & ","

qstr est une variable de type string (chaîne de caractères)

si qstr contient déjà par exemple "bonjour "

et que Cells(i, 7) contient "monsieur"

alors qstr sera = "bonjour " & "monsieur" & ","
soit "bonjour monsieur,"

le signe & c'est pour "coller" l'ensemble
= "a" & "b" & "c" & "d"
soit un ensemble qui donne "abcd"

voilà !
Merci beaucoup pour la qualité d'explication.
Bonne journée
 
bonsoir,

qstr = qstr & Cells(i, 7) & ","

qstr est une variable de type string (chaîne de caractères)

si qstr contient déjà par exemple "bonjour "

et que Cells(i, 7) contient "monsieur"

alors qstr sera = "bonjour " & "monsieur" & ","
soit "bonjour monsieur,"

le signe & c'est pour "coller" l'ensemble
= "a" & "b" & "c" & "d"
soit un ensemble qui donne "abcd"

voilà !
Bonjour,

Et si Cells(i, 7) contient 78 C'est à dire un chiffre?

Merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
234
Réponses
4
Affichages
153
Réponses
2
Affichages
410
Retour