Gestion de stock

Bonjour à toutes, tous et bonne année,

Dans le fichier ci-joint j'ai écrit un petit bout de code qui renvoi dans une MsgBox un message si 2 conditions sont remplis :

- Le nom d'utilisateur doit être "Sotin"

- La valeur dans la colonne F doit être inférieur à 10.

Mon code est "fixe", c'est à dire qu'il ne prend en compte que la ligne 4. J'aimerai qu'il m'affiche toutes les lignes dont la quantité renseignée dans la colonne F est inférieur à 10 et cela dans une seule MsgBox.

Merci d'avance ;)

Bonjour

Un code du genre

Sub Alerte_minimum()
Dim nom As String, valeur As String
Dim i As Integer

nom = Application.UserName
With ActiveSheet
    For i = 4 To .range("A" & rows.count).end(xlup).row
        If Ucase(nom) = "SOTIN" And Cells(i, "F") < 10 Then
            If valeur = "" Then
                valeur = .Name & " / " & .Cells(i, "A") & " : quantité restante " & .Cells(i, "F")
            Else:
                valeur = valeur & vbCrLf & .Name & " / " & .Cells(i, "A") & " : quantité restante " & .Cells(i, "F")
            End If
        End If
    Next i
End With
MsgBox valeur, vbExclamation, "Stock faible"
End Sub

Si ok,

Cordialement

Bonjour Dan,

C'est une bonne réponse ;)

Je me suis juste permis de changer un petit peu votre code en intégrant une variable pour la valeur de i. Ce qui donne :

Sub Alerte_minimum()
Dim nom As String, valeur As String
Dim i As Integer

nom = Application.UserName

dernière_ligne = Cells(Rows.Count, "F").End(xlUp).Row

With ActiveSheet
    For i = 4 To dernière_ligne
        If UCase(nom) = "SOTIN" And Cells(i, "F") < 10 Then

            If valeur = "" Then
                valeur = ActiveSheet.Name & " / " & .Cells(i, "A") & " : quantité restante " & .Cells(i, "F")
            Else:
                valeur = valeur & vbCrLf & .Name & " / " & .Cells(i, "A") & " : quantité restante " & .Cells(i, "F")
            End If
        End If
    Next i
End With
MsgBox valeur, vbExclamation, "Stock faible"
End Sub

Merci pour le coup de main ;) à plus

re

Je me suis juste permis de changer un petit peu votre code en intégrant une variable pour la valeur de i. Ce qui donne :

bah vous faites comme vous voulez mais un petit commentaire :
- vous n'aurez jamais de valeur en colonne F si vous n'avez pas une mention en colonne A. Du coup ce que je vous ai donné est mieux que de considérer la colonne F. (faite un test en laissant la dernière cellule vide cellule en colonne F...)
- Vous n'avez pas besoin créer une variable trouver pour la dernière ligne. Pourquoi s'encombrer de créer une variable si non nécessaire ?
- Pour votre variable derlign, on ne sait pas sur quelle feuille on se trouve et votre variable derlig n'est pas déclarée (Dim.....)

Je laisserais donc soit:

avec colonne F

For i = 4 to .Cells(Rows.Count, "F").End(xlUp).Row

Ou comme je vous l'ai donné avec la colonne A

Cordialement

Re,

Alors là c'est un coup à devenir dingue !!! 😂😂😂 quand j'ai copié votre code dans ma feuille il y'avait noté :

For i = 4 to 7

Raison pour laquelle j'ai remplacé le 7 par une variable.

Et maintenant je vois qu'il est noté

For i = 4 To .range("A" & rows.count).end(xlup).row

🧐🧐🧐🧐 ...

Je corrige donc avec votre version !

re

Alors là c'est un coup à devenir dingue !!! 😂😂😂 quand j'ai copié votre code dans ma feuille il y'avait noté :

Non c'est juste que je me suis aperçu que j'avais omis de changer le 7 par Range("A"...)

Donc pas de souci de devenir dingue ...pour l'instant en tout cas... soyez rassuré !

Re,

Aaaah ouf !!! 😂😂😂, je suis rassuré il me reste donc encore un peu de temps avant de devoir raccrocher !

Merci pour votre aide, bonne fin de journée ;)

Re,

Petite question, je me suis aperçu qu'avec le code suivant si une des 2 conditions n'est pas respectée la MsgBox s'afiche quand même. Elle n'a pas de texte mais elle apparait à l'écran.

Est-il possible qu'elle n'apparaisse que si les deux conditions sont réunis ?

Merci :)

Private Sub Workbook_Open()

Dim nom As String, valeur As String
Dim i As Integer

nom = Application.UserName
    With ActiveSheet
        For i = 5 To .Range("A" & Rows.Count).End(xlUp).Row
            If UCase(nom) = "SOTIN" And Cells(i, "G") < 10 Then
                If valeur = "" Then
                    valeur = .Name & " ->        " & .Cells(i, "A") & " : reste " & .Cells(i, "G") & " pnx"
            Else:
                    valeur = valeur & vbCrLf & .Name & " ->        " & .Cells(i, "A") & " : reste " & .Cells(i, "G") & " pnx"
                End If
            End If
        Next i
    End With
MsgBox valeur, vbExclamation, "Stock faible"

End Sub

re

et si vous mettez un point devant Cells(i, "G").... ?

.Cells(i, "G") < 10


edit :

Remplacez la ligne juste avant le END SUB par cette ligne

If valeur <> vbNullString Then MsgBox valeur, vbExclamation, "Stock faible"

Crdlt

Re,

C'est tout bon ! pour que je comprenne, que veut dire :

vbNullString

?

C'est tout bon ! pour que je comprenne, que veut dire :

Vbnullstring est une constante qui indique une chaîne nulle. C'est donc équivanlent à "".
La différence pour VB est que Vbnullstring est plus rapide et utilise moins de mémoire que ""

Variante : Vous pourriez aussi faire comme ceci

If Len(valeur) > 0 Then MsgBox valeur, vbExclamation, "Stock faible"

Len(Valeur) vérifie si la variable "valeur" est à 0 ou non

Pour ma part je préfère utiliser Vbnullstring

Salut SOTIN,

learn english please

Vb pour Visual Basic

Null pour... c'est simple

String pour chaine de caractère

Donc

Edit : oups Salut Dan

Re Dan,

D'accord ! effectivement pour indiquer une valeur égal à rien, j'utilise "". Merci pour l'info !!! ainsi que le coup de main ;)

Bonjour BrunoM45,

La traduction littéral est une chose (que j'ai réussi à faire seul) 😉, maintenant la compréhension et surtout l'application est une autre paire de manche pour laquelle un coup de main est rarement de refus 😁😁😁

A + ;)

Rechercher des sujets similaires à "gestion stock"