Creation msgbox selon valeur

bonjour

j'aimerai qu'un message d'alerte du style : "ATTENTION seuil minimum atteint" s'affiche sur l'onglet "liste" quand une valeur sur l'onglet "recap" atteint le seuil qui lui est propre (chaque article à son propre seuil de niveau de stock minimum)

je travail essentiellement sur l'onglet "liste" ( mon vrai tableau contient plus de 10 000 lignes) voila pourquoi je demande à ce que le msgbox s'affiche sur cet onglet.

après on peu surement intégrer somme.si dans la requête, car c'est la formule que j'utilise pour déterminer le niveau de stock actuel dans l'onglet "recap"

cerise sur le gateau si le message pouvait également afficher le code et la désignation de l'article concerné "ATTENTION seuil minimum atteint pour l'article suivant : ABC1 roue" par exemple)

le plus simple serait de faire afficher le message chaque fois que le même article est concerné (chaque fois que l'article passe en dessous du seuil qui lui est propre.( en fonction des entrées et des sorties que j'effectue dans l'onglet "liste"

merci à vous

32classeur1.xls (19.00 Ko)

bonjour,

une proposition via une macro événementielle qui se déclenche chauqe fois qu'un valeur est introduite dans la colonne stock de al feuille liste.

j'ai modifié les formules de calcul du stock par produit pour inclure des plages dynamiques et proposer de mettre le stock minimum par produit en colonne D sur la feuille recap.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 Then Exit Sub
    Set re = Sheets("recap").Columns("A:A").Find(Target.Offset(0, -2), lookat:=xlWhole)
    If re Is Nothing Then
        MsgBox "article " & Target.Offset(, -2) & "non trouvé dans recap": Exit Sub
    Else
        If re.Offset(0, 2) < re.Offset(0, 3) Then    'fait l'hypothèse que le seuil minimum pour chaque article est en colonne D  dans la feuille recap
            MsgBox "Attention seuil minimum atteint pour l'article " & Target.Offset(, -2) & " " & Target.Offset(, -1)
        End If
    End If
End Sub

modifications intégrées dans la pièce jointe

Bonjour Supajack, bonjour le forum,

La version 1 devrait convenir à ta requête. Toutefois, il est rare que tous les articles aient le même seuil minimum... Voir version 2.

[Édition]

Bonjour Acide on s'est croisé...

20supajack-v01.zip (12.71 Ko)
33supajack-v02.zip (12.79 Ko)

merci pour vos propositions rapides !

désolé H2so4 je cherche encore à comprendre comment fonctionne ton tableau, j'ai beau le remplir, rien ne se passe, je dois pas avoir tout compris

pour ce qui est de la proposition de thauthème, ça à l'air de fonctionner, j'essaye de l'adapter à mon tableau pour vous dire

trop sympa merci.

bon, bien évidemment je n'arrive pas à l'adapter à mon "vrai" tableau alors voici le code du deuxième tableau fait par thauthème

Private Sub Worksheet_Change(ByVal Target As Range) 'au changment dans l'onglet

Dim O As Worksheet 'déclare la variable O (Onglet)

Dim VC As String 'déclare la variable VC (Valeur Cherchée)

Dim R As Range 'déclare la variable R (Recherche)

Dim ST As Integer 'déclare la variable ST

If Target.Column <> 3 Then Exit Sub 'si le changement a leiru ailleur que dans la colonne 3, sort de la procédure

If Target.Cells.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure

VC = Target.Offset(0, -2) 'définit la valeur cherchée VC

Set R = Sheets("recap").Columns(1).Find(VC, , xlValues, xlWhole) 'définit la recherche R

If Not R Is Nothing Then ST = R.Offset(0, 2).Value 'si il existe au moins une occurrence trouvée, définit le stcok ST

If ST >= R.Offset(0, 3) Then 'condition si le stock ST est inférieur ou égal à 20

Target.Offset(0, -2).Resize(1, 3).Interior.ColorIndex = 4 'colore la ligne de rouge

Target.Activate 'place le curseur dan sla cellule concernée

MsgBox "ATTENTION seuil minimum atteint pour l'article suivant : " & Chr(34) & Target.Offset(0, -2) _

& " " & Target.Offset(0, -1) & Chr(34) & " !" 'message

Else 'sinon

Target.Offset(0, -2).Resize(1, 3).Interior.ColorIndex = xlNone 'supprime iune éventuelle couleur

End If 'fin de la condition

End Sub

et voici les numéros de colonne correspondants à mon vrai tableau par rapport à l'exemple fourni, en rouge c'est ce qui change par rapport à l'exemple

onglet liste :code = 1 / article = 2 / stock = 10

onglet recap :code = 1 / article = 2 / stock = 4 et seuil minimum = 5

vous pouvez l'adapter svp, je n'y arrive pas.

mon vrai tableau est un peu plus compliqué et j'ai d'autre codes sur l'onglet "liste", j'espère que ça n'interfère pas.....

Bonsoir le fil, bonsoir le forum,

Je ne comprends pas pourquoi les demandeurs n'envoient pas une fichier exemple correspondant à leur cas. On ne fait que perdre du temps... Et je ne comprends pas non plus, pourquoi je continue à commenter mes codes... Je vais m'acheter un violon et uriner allègrement dedans ! Ça sera plus efficace...

Le code modifié :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changment dans l'onglet
Dim VC As String 'déclare la variable VC (Valeur Cherchée)
Dim R As Range 'déclare la variable R (Recherche)
Dim ST As Integer 'déclare la variable ST

If Target.Column <> 10 Then Exit Sub 'si le changement a lieu ailleur que dans la colonne 10, sort de la procédure
If Target.Cells.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure
VC = Target.Offset(0, -9) 'définit la valeur cherchée VC
Set R = Sheets("recap").Columns(1).Find(VC, , xlValues, xlWhole) 'définit la recherche R
If Not R Is Nothing Then ST = R.Offset(0, 3).Value 'si il existe au  moins une occurrence trouvée, définit le stock ST
If ST >= R.Offset(0, 4) Then 'condition si le stock ST est inférieur ou égal à au seuil minimum
    Target.Offset(0, -9).Resize(1, 10).Interior.ColorIndex = 4 'colore la ligne de rouge
    Target.Activate 'place le curseur dan sla cellule concernée
    MsgBox "ATTENTION seuil minimum atteint pour l'article suivant : " & Chr(34) & Target.Offset(0, -9) _
      & " " & Target.Offset(0, -8) & Chr(34) & " !" 'message
Else 'sinon
    Target.Offset(0, -9).Resize(1, 10).Interior.ColorIndex = xlNone 'supprime iune éventuelle couleur
End If 'fin de la condition
End Sub

Bonjour

j'aurai peut être dû à nouveau préciser que mes connaissances en VBA sont très limitées, mais que j'aime bien essayer par moi même de trouver mes solutions. (parfois en vain comme c'est le cas aujourd'hui.

par ailleurs mon "vrai" tableau est vraiment complexe et je pense que je vous ferai perdre beaucoup plus de temps à essayer de vous expliquer son fonctionnement.

mais je vous remercie vraiment de votre aide et de votre patience

Bon le code fonctionne mais à un détail près

dans la colonne 10 là ou je remplis au fur et à mesure des entrées ou sorties, le code fonctionne uniquement si j'entre manuellement les valeurs

si je mets une formule, le code ne marche plus....car si j'ai bien compris, le code ne marche que si la saisie à lieu dans cette colonne

le fameux : If Target.Column <> 10 Then Exit Sub

je sais j'aurai aussi dû le préciser dés le départ, mais mes erreurs permettent d'en apprendre plus hein !!

Re,

Tes erreurs me permettent surtout d'apprendre le violon... Ëpicétou !

Essaie ce code (non testé) :

Private Sub Worksheet_Calculate()
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim VC As String 'déclare la variable VC (Valeur Cherchée)
Dim R As Range 'déclare la variable R (Recherche)
Dim ST As Integer 'déclare la variable ST

For Each CEL In Application.Intersect(UsedRange, Columns(10)) 'boucle sur toutes le celluoles éditées de la colonne 10)
    VC = CEL.Offset(0, -9) 'définit la valeur cherchée VC
    Set R = Sheets("recap").Columns(1).Find(VC, , xlValues, xlWhole) 'définit la recherche R
    If Not R Is Nothing Then ST = R.Offset(0, 3).Value 'si il existe au  moins une occurrence trouvée, définit le stock ST
    If ST >= R.Offset(0, 4) Then 'condition si le stock ST est inférieur ou égal à au seuil minimum
        CEL.Offset(0, -9).Resize(1, 10).Interior.ColorIndex = 4 'colore la ligne de rouge
        MsgBox "ATTENTION seuil minimum atteint pour l'article suivant : " & Chr(34) & Target.Offset(0, -9) _
           & " " & Target.Offset(0, -8) & Chr(34) & " !" 'message
    Else 'sinon
       CEL.Offset(0, -9).Resize(1, 10).Interior.ColorIndex = xlNone 'supprime iune éventuelle couleur
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub

voila ce que ça m'affiche

erreur d'exécution 91

variable objet ou variable de bloc with non définie

une dernière chose :

dans mon onglet LISTE j'ai des entrées et des sorties sur plusieurs lignes qui se comptabilisent dans l'onglet RECAP avec un somme.si. (c'est ma synthèse de stock article par article)

mon niveau de stock évolue donc en fonction de mes entrées et sorties faites dans LISTE

si aujourd'hui je fais une sortie dans stock et me retrouve en dessous du seuil pour 1 article, la ligne se met en vert (pas en rouge ) mais dans l'onglet LISTE et uniquement pour la ligne que je viens d'entrer, de plus si demain je fais une entrée pour le même article (sur une autre ligne donc) la ligne en vert d'aujourd'hui reste en vert.......ou en rouge tant qu'à y faire

en fait il faudrait que se soit la ligne dans l'onglet "RECAP" qui s'allume en vert car elle fait la somme article par article des lignes dans STOCK.

bien entendu les MSG BOX reste dans l'onglet LISTE

Rechercher des sujets similaires à "creation msgbox valeur"