Gestion de stock / Péremption
Bonjour,
Je souhaiterais mieux optimiser un stock de produits se périmant, j'aimerais utiliser Excel, mais je ne sais pas si la VBA peut faire toutes les fonctionnalités que je voudrais.
Je m'explique:
(Fichier joint)
Soit la colonne A, à partir de A4, la liste de tous les codes des produits , la colonne B à partir de B4, le nom des produits respectifs.
Les colonnes C à I sont les dates de péremption pouvant à un type de produit.
Exemple : Il y a 8 boites du produit 5, 2 se périmant le 20/02/2017, 3 se périmant le 19/11/2019, et 3 se périmant le 26/04/2023.
Les dates de péremption sont remplies à la main, j'insiste sur ça.
Or le catalogue comporte plus de 1000 produits et compléter la date de péremption dans la feuille Excel se fera pour une quarantaine de produits par jour.
Donc je souhaiterais optimiser la recherche de la ligne du produit que je cherche en scannant le code-barre dans la cellule B1.
Le but est qu'une fois le code-barre scanné , la ligne correspondant au code de la cellule B1 soit retrouvée.
Exemple:
Le produit 1 est scanné, le code 6546874 s'affiche dans la cellule B1 est alors une vba se met en marche est va sélectionner la cellule A4.
Je ne sais absolument pas si cela est possible en VBA ...
Pensez-vous que ça l'est? Si oui, comment ?
Merci beaucoup !!
Gulli
Bonjour,
Attention, ta cellule B1 est formatée en Date, tu dois la formater en Standard !
Code à mettre dans le module de la feuille, pour ça, Alt+F11, double cliquer sur la feuille "Feuil1"dans la zone en haut à gauche puis coller dans la page d'édition de code qui vient d'apparaître :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
If Target.Count > 1 Then Exit Sub
If Target.Address(0, 0) <> "B1" Then Exit Sub
If Target.Value = "" Then Exit Sub
'défini la plage sur la colonne A à partir de A4
With ActiveSheet: Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
'supprime toutes couleurs intérieures
Plage.Interior.ColorIndex = 0
'effectue la recherche
Set Cel = Plage.Find(Target.Value, , xlValues, xlWhole)
'si trouvé, colore la cellule en rouge et la sélectionne
If Not Cel Is Nothing Then
Cel.Interior.ColorIndex = 3
Cel.Select
End If
End SubBonjour Theze,
Merci beaucoup ça marche très bien !
Petite question :
Comment faire pour que toute la ligne sélectionnée ( correspondant au code mis dans B1) se colore en une autre couleur mais seulement temporairement?
Merci beaucoup !
Gulli
Bonjour !
Troisième question si je peux
Mettons par exemple qu'il faille sortir la liste des produits ayant une date inférieure à 31/12/2019.
Il y a-t-il une macro permettant de lister ces produits sur une feuille, les lignes des autres produits avec une date de péremption supérieure disparaissent et la date de péremption à ne pas dépasser est facilement modifiable.
Sur une nouvelle feuille du classeur, est-il possible par macro de ce genre? Si oui savez-vous comment ?
Merci beaucoup !
Gulli ,
Bonjour,
Comment faire pour que toute la ligne sélectionnée ( correspondant au code mis dans B1) se colore en une autre couleur mais seulement temporairement?
Une piste, tu colles le code ci-dessous dans un module standard :
Sub Timer()
Application.OnTime Now + TimeValue("00:00:05"), "Couleur"
End Sub
Sub Couleur()
Dim Plage As Range
With Worksheets("Feuil1"): Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
Plage.Rows.EntireRow.Interior.ColorIndex = 0
End Subet tu remplaces le code que je t'avais donné par celui-ci :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
If Target.Count > 1 Then Exit Sub
If Target.Address(0, 0) <> "B1" Then Exit Sub
If Target.Value = "" Then Exit Sub
'défini la plage sur la colonne A à partir de A4
With ActiveSheet: Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
'supprime toutes couleurs intérieures
Plage.Interior.ColorIndex = 0
'effectue la recherche
Set Cel = Plage.Find(Target.Value, , xlValues, xlWhole)
'si trouvé, colore la cellule en rouge et la sélectionne
If Not Cel Is Nothing Then
Range(Cel, Cel.Offset(, 8)).Interior.ColorIndex = 3
Cel.Select
Timer
End If
End SubSi trouvée, la cellule sera sélectionnée et la ligne colorée en rouge (seulement dans la plage) et 5 secondes plus tard, la couleur sera supprimée (puisque tu dis ...seulement temporairement)
En ce qui concerne ta troisième question, avec un filtre ça n'irait pas ?
Merci beaucoup Theze !!!
C'est top
A bientôt
Gulli