XL 2016 cellule en grisé

JEFF77

XLDnaute Occasionnel
bonsoir à tous
une petite question sur mon fichier peux t'on faire en cellule D5 et E5 lorsque je tape une valeur et que je valide le total se met en F5 et remettre D5 et E5 vide ou en grisé avec
la dernière valeur tapée.
j'espère que vous comprenez ma question.

merci par avance et bonne soirée à tous.
 

Pièces jointes

  • test1.xlsm
    21.6 KB · Affichages: 4

soan

XLDnaute Barbatruc
Inactif
Bonjour JEFF77,

ton fichier en retour. :)

* ne cherche plus ta formule en F5 : je l'ai supprimée.

* on va supposer que c'est des quantités, pas vrai ? 😉
et on va supposer aussi que c'est des caisses.

1) au départ, tu es en C5 ; tu dois saisir le stock initial
* saisis 500 et valide ➯ en F5 : stock réel = 500
* comment ? 500 caisses, c'est beaucoup trop ! ok, j'suis d'accord avec toi :
appuie sur la touche suppression ➯ ça efface C5 et F5 ! (retour au début)
* saisis 20 et valide ➯ en F5 : stock réel = 20 ; ah, c'est plus raisonnable,
n'est-ce pas ? et pour la suite, ça sera plus facile à compter ! :)
* c'est tout pour le stock initial ; on n'en parlera plus ; c'était juste pour
initialiser la quantité du stock initial en C5 et F5.

2) voyons voir maintenant les entrées de stock
* sélectionne D5 ; saisis 40 ➯ en F5 : 60 car 20 + 40 = 60 ; D5 est effacé
* saisis 10 ➯ en F5 : 70 car 60 + 10 = 70 ; D5 est effacé ; ok ?

3) voyons voir maintenant les sorties de stock
* sélectionne E5 ; saisis 40 ➯ en F5 : 30 car 70 - 40 = 30 ; E5 est effacé
* saisis 20 ➯ en F5 : 10 car 30 - 20 = 10 ; E5 est effacé ; ok ?

mais attend ! cette fois, y'a une suite !


* saisis 40 ; ça fait rien du tout, ou presque : E5 est bien effacé, mais y'a toujours 10 en F5 ! oui, et c'est normal, car 10 - 40 = -30 ; or en quantité, un stock ne peut pas être négatif ! exemple : on ne peut pas avoir en stock -5 caisses ! donc toute sortie qui mettrait le stock en négatif est ignorée !

* saisis 10 ➯ en F5 : 0 car 10 - 10 = 0 ; E5 est effacé ; cette fois, c'est normal, car on peut avoir 0 caisse en stock = stock épuisé ! faut recommander de nouveau auprès du fournisseur ! d'ailleurs, en général, y'a un stock d'alerte
(qui est fonction des délais d'approvisionnement) ; exemple : le stock d'alerte est de 20 caisses ➯ après une sortie, si le stock réel atteint 20 caisses ou descend en dessous, ça fait qu'on recommande automatiquement au fournisseur pour éviter justement d'avoir "stock épuisé".



fin de la démo, mais attention : en général, il y a un stock maximum car l'emplacement de stockage n'est pas illimité ! si par exemple y'a d'la place pour un maximum de 100 caisses et que le stock réel est déjà de 80 caisses, on peut faire une entrée de 20 caisses au plus, car au-delà, on ne peut plus entreposer les caisses supplémentaires ! tout ça pour dire que pour les entrées aussi, il faudrait ajouter un test : faire que toute entrée serait ignorée si ça faisait que le stock réel deviendrait supérieur au stock maximum !​



j'ai fait ton exo par rapport à ton énoncé, mais je trouve que ça n'est pas une bonne idée de faire comme tu l'as demandé : avec ce "système", ça fait qu'il n'y a aucun historique, aucune trace d'entrée ou sortie : on a seulement un stock réel qui a été mouvementé en plus ou en moins ! impossible de se rappeler de mémoire toutes les opérations d'entrées ou sorties qu'il a pu y avoir ! (à moins d'avoir une mémoire d'éléphant, et encore !) ; donc si tu vois par exemple un stock réel de 50 caisses, comment pourras-tu te rappeler si c'est avant ou après avoir saisi une entrée de 20 caisses ? ou si c'est avant ou après avoir fait une sortie de 10 caisses ? autre façon de le dire : si tu dois saisir une entrée de 20 caisses, comment savoir si tu l'as déjà saisi ou non ? idem pour une sortie de 10 caisses : aïe ! j'me rappelle plus si j'l'ai déjà saisi ou non ! j'ai dû répondre au téléphone à un client important, et du coup, comme j'ai été interrompu, j'me souviens plus où j'en étais !​



code VBA (27 lignes) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, v1&, v2&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [C5:E5]) Is Nothing Then Exit Sub
    chn = .Value: v1 = Int(Val(chn)): col = .Column
    If col = 3 Then
      If IsEmpty(.Value) Then [F5].ClearContents Else [F5] = v1
      Exit Sub
    End If
    With Application
      .ScreenUpdating = 0: .EnableEvents = 0
    End With
    If col = 4 Then
      [F5] = [F5] + v1 'Entrée
    Else
      v2 = [F5] - v1
      If v2 >= 0 Then [F5] = v2 'Sortie, SAUF si le stock réel devient négatif,
      'car c'est impossible d'avoir une quantité négative du stock ! exemple :
      'on ne peut pas avoir un stock de -5 caisses !
    End If
    Target.ClearContents: Application.EnableEvents = -1
  End With
End Sub

soan
 

Pièces jointes

  • test1.xlsm
    28.6 KB · Affichages: 5

JEFF77

XLDnaute Occasionnel
Bonjour JEFF77,

ton fichier en retour. :)

* ne cherche plus ta formule en F5 : je l'ai supprimée.

* on va supposer que c'est des quantités, pas vrai ? 😉
et on va supposer aussi que c'est des caisses.

1) au départ, tu es en C5 ; tu dois saisir le stock initial
* saisis 500 et valide ➯ en F5 : stock réel = 500
* comment ? 500 caisses, c'est beaucoup trop ! ok, j'suis d'accord avec toi :
appuie sur la touche suppression ➯ ça efface C5 et F5 ! (retour au début)
* saisis 20 et valide ➯ en F5 : stock réel = 20 ; ah, c'est plus raisonnable,
n'est-ce pas ? et pour la suite, ça sera plus facile à compter ! :)
* c'est tout pour le stock initial ; on n'en parlera plus ; c'était juste pour
initialiser la quantité du stock initial en C5 et F5.

2) voyons voir maintenant les entrées de stock
* sélectionne D5 ; saisis 40 ➯ en F5 : 60 car 20 + 40 = 60 ; D5 est effacé
* saisis 10 ➯ en F5 : 70 car 60 + 10 = 70 ; D5 est effacé ; ok ?

3) voyons voir maintenant les sorties de stock
* sélectionne E5 ; saisis 40 ➯ en F5 : 30 car 70 - 40 = 30 ; E5 est effacé
* saisis 20 ➯ en F5 : 10 car 30 - 20 = 10 ; E5 est effacé ; ok ?

mais attend ! cette fois, y'a une suite !


* saisis 40 ; ça fait rien du tout, ou presque : E5 est bien effacé, mais y'a toujours 10 en F5 ! oui, et c'est normal, car 10 - 40 = -30 ; or en quantité, un stock ne peut pas être négatif ! exemple : on ne peut pas avoir en stock -5 caisses ! donc toute sortie qui mettrait le stock en négatif est ignorée !

* saisis 10 ➯ en F5 : 0 car 10 - 10 = 0 ; E5 est effacé ; cette fois, c'est normal, car on peut avoir 0 caisse en stock = stock épuisé ! faut recommander de nouveau auprès du fournisseur ! d'ailleurs, en général, y'a un stock d'alerte
(qui est fonction des délais d'approvisionnement) ; exemple : le stock d'alerte est de 20 caisses ➯ après une sortie, si le stock réel atteint 20 caisses ou descend en dessous, ça fait qu'on recommande automatiquement au fournisseur pour éviter justement d'avoir "stock épuisé".



fin de la démo, mais attention : en général, il y a un stock maximum car l'emplacement de stockage n'est pas illimité ! si par exemple y'a d'la place pour un maximum de 100 caisses et que le stock réel est déjà de 80 caisses, on peut faire une entrée de 20 caisses au plus, car au-delà, on ne peut plus entreposer les caisses supplémentaires ! tout ça pour dire que pour les entrées aussi, il faudrait ajouter un test : faire que toute entrée serait ignorée si ça faisait que le stock réel deviendrait supérieur au stock maximum !​



j'ai fait ton exo par rapport à ton énoncé, mais je trouve que ça n'est pas une bonne idée de faire comme tu l'as demandé : avec ce "système", ça fait qu'il n'y a aucun historique, aucune trace d'entrée ou sortie : on a seulement un stock réel qui a été mouvementé en plus ou en moins ! impossible de se rappeler de mémoire toutes les opérations d'entrées ou sorties qu'il a pu y avoir ! (à moins d'avoir une mémoire d'éléphant, et encore !) ; donc si tu vois par exemple un stock réel de 50 caisses, comment pourras-tu te rappeler si c'est avant ou après avoir saisi une entrée de 20 caisses ? ou si c'est avant ou après avoir fait une sortie de 10 caisses ? autre façon de le dire : si tu dois saisir une entrée de 20 caisses, comment savoir si tu l'as déjà saisi ou non ? idem pour une sortie de 10 caisses : aïe ! j'me rappelle plus si j'l'ai déjà saisi ou non ! j'ai dû répondre au téléphone à un client important, et du coup, comme j'ai été interrompu, j'me souviens plus où j'en étais !​



code VBA (27 lignes) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, v1&, v2&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [C5:E5]) Is Nothing Then Exit Sub
    chn = .Value: v1 = Int(Val(chn)): col = .Column
    If col = 3 Then
      If IsEmpty(.Value) Then [F5].ClearContents Else [F5] = v1
      Exit Sub
    End If
    With Application
      .ScreenUpdating = 0: .EnableEvents = 0
    End With
    If col = 4 Then
      [F5] = [F5] + v1 'Entrée
    Else
      v2 = [F5] - v1
      If v2 >= 0 Then [F5] = v2 'Sortie, SAUF si le stock réel devient négatif,
      'car c'est impossible d'avoir une quantité négative du stock ! exemple :
      'on ne peut pas avoir un stock de -5 caisses !
    End If
    Target.ClearContents: Application.EnableEvents = -1
  End With
End Sub

soan
bonjour soan

Super le fichier en retour , je comprends bien ton raisonnement , mais je ne sais pas trop comment faire un fichier simple de gestion de stock .Est il possible de laisser en grisé la dernière
valeur tapée en D5 E5.

Merci de ton aide

jeff77
 

soan

XLDnaute Barbatruc
Inactif
@JEFF77

Super le fichier en retour

merci ! 😊



je ne sais pas trop comment faire un fichier simple de gestion de stock

il y a de très bons logiciels tout faits de gestion de stock (à un prix raisonnable), qui vont parfois même jusqu'à gérer les reliquats (= ce qui reste en stock ; je crois bien que c'est en fait pour des lots partiels, en cas de gestion de lots en FIFO/LIFO).​



Est-il possible de laisser en grisé la dernière valeur tapée en D5 ou E5 ?

oui, c'est fait dans le nouveau fichier joint. :)



nouveau code VBA (27 lignes aussi) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, v1&, v2&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [C5:E5]) Is Nothing Then Exit Sub
    chn = .Value: v1 = Int(Val(chn)): col = .Column
    If col = 3 Then
      If IsEmpty(.Value) Then [F5].ClearContents Else [F5] = v1
      Exit Sub
    End If
  End With
  With Application
    .ScreenUpdating = 0: [D5:E5].Interior.Color = -4142: .EnableEvents = 0
  End With
  If col = 4 Then
    [F5] = [F5] + v1 'Entrée
  Else
    v2 = [F5] - v1
    If v2 >= 0 Then [F5] = v2 'Sortie, SAUF si le stock réel devient négatif,
    'car c'est impossible d'avoir une quantité négative du stock ! exemple :
    'on ne peut pas avoir un stock de -5 caisses !
  End If
  Target.Interior.Color = 15132391: Application.EnableEvents = -1
End Sub

soan
 

Pièces jointes

  • test1.xlsm
    28.8 KB · Affichages: 2

JEFF77

XLDnaute Occasionnel
@JEFF77



merci ! 😊





il y a de très bons logiciels tout faits de gestion de stock (à un prix raisonnable), qui vont parfois même jusqu'à gérer les reliquats (= ce qui reste en stock ; je crois bien que c'est en fait pour des lots partiels, en cas de gestion de lots en FIFO/LIFO).​





oui, c'est fait dans le nouveau fichier joint. :)



nouveau code VBA (27 lignes aussi) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, v1&, v2&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [C5:E5]) Is Nothing Then Exit Sub
    chn = .Value: v1 = Int(Val(chn)): col = .Column
    If col = 3 Then
      If IsEmpty(.Value) Then [F5].ClearContents Else [F5] = v1
      Exit Sub
    End If
  End With
  With Application
    .ScreenUpdating = 0: [D5:E5].Interior.Color = -4142: .EnableEvents = 0
  End With
  If col = 4 Then
    [F5] = [F5] + v1 'Entrée
  Else
    v2 = [F5] - v1
    If v2 >= 0 Then [F5] = v2 'Sortie, SAUF si le stock réel devient négatif,
    'car c'est impossible d'avoir une quantité négative du stock ! exemple :
    'on ne peut pas avoir un stock de -5 caisses !
  End If
  Target.Interior.Color = 15132391: Application.EnableEvents = -1
End Sub

soan
je me suis mal exprimé la valeur en D5 E5 écrit en gris et non la cellule.
mais si pas possible pas grave .

merci de ton aide

jeff77
 

soan

XLDnaute Barbatruc
Inactif
@JEFF77 (salut Deadpool)

autre version ; code VBA :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, v1&, v2&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [C5:E5]) Is Nothing Then Exit Sub
    chn = .Value: v1 = Int(Val(chn)): col = .Column
    If col = 3 Then
      If IsEmpty(.Value) Then [F5].ClearContents Else [F5] = v1
      Exit Sub
    End If
  End With
  With Application
    .ScreenUpdating = 0: [D5:E5].Font.ColorIndex = -4105: .EnableEvents = 0
  End With
  If col = 4 Then
    [F5] = [F5] + v1 'Entrée
  Else
    v2 = [F5] - v1
    If v2 >= 0 Then [F5] = v2 'Sortie, SAUF si le stock réel devient négatif,
    'car c'est impossible d'avoir une quantité négative du stock ! exemple :
    'on ne peut pas avoir un stock de -5 caisses !
  End If
  Target.Font.Color = 8421504: Application.EnableEvents = -1
End Sub

soan
 

Pièces jointes

  • test1.xlsm
    29 KB · Affichages: 5

JEFF77

XLDnaute Occasionnel
@JEFF77 (salut Deadpool)

autre version ; code VBA :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, v1&, v2&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [C5:E5]) Is Nothing Then Exit Sub
    chn = .Value: v1 = Int(Val(chn)): col = .Column
    If col = 3 Then
      If IsEmpty(.Value) Then [F5].ClearContents Else [F5] = v1
      Exit Sub
    End If
  End With
  With Application
    .ScreenUpdating = 0: [D5:E5].Font.ColorIndex = -4105: .EnableEvents = 0
  End With
  If col = 4 Then
    [F5] = [F5] + v1 'Entrée
  Else
    v2 = [F5] - v1
    If v2 >= 0 Then [F5] = v2 'Sortie, SAUF si le stock réel devient négatif,
    'car c'est impossible d'avoir une quantité négative du stock ! exemple :
    'on ne peut pas avoir un stock de -5 caisses !
  End If
  Target.Font.Color = 8421504: Application.EnableEvents = -1
End Sub

soan
OUIIIIIIIIII

super un GRAND MERCI à vous

bonne soirée et bon weekend

jeff77
 

Discussions similaires

Réponses
4
Affichages
119
Réponses
1
Affichages
109
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87