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
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 Submodifications 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é...
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
bon, bien évidemment je n'arrive pas à l'adapter à mon "vrai" tableau
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 SubBonjour
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 Subvoila 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