Accrémentation de 1 dans une base lorsque la valeur est trou

Bonjour à tous,

J'ai un fichier de gestion d'aticle vêtement en lavage.

Ce fichier comprend 2 onnglet

Le 1er onglet "Saisie" à pour objet de scanner le code barre d'un article qui part en prestataion :

A cet affet, lorsque je scanne le code barre de l'acticle en me plaçant dans la colonne A, la macro complète les éléments en colonne B la désignation de l'article, en colonne C le Non de l'agent porteur et en colonne D la date de départ.

A cet effet, j'ai développé la macro suivante :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

Dim t As Variant

' Rechercher l'article et le non de l'agent

If Not Application.Intersect(Target, Range("A3:A65000")) Is Nothing Then

Target.Offset(0, 1).Formula = "=Vlookup(A:A,base!A2:C65000,2,0)"

Target.Offset(0, 2).Formula = "=Vlookup(A:A,base!A2:C65000,3,0)"

'Mettre la dte départ lavage

If Not Intersect(Target, [A3:A65000]) Is Nothing Then Target(1, 4) = Date

J'ai mon 2ème onglet "Base" est la base de tout mes articles classés par code barre.

En colonne :

A le code barre

B Désignation de l'article

C Non de l'agent porteur

D Le secteur d'affectation

E le nombre de prestataion

Aussi, à chaque entrée d'un nouvel article, le tri de la base s'enclenche dès que renseigne le secteur d'affectation en colonne D, ce afin que la base soit toujours triée par code barre.

J'ai donc développé la macro suivante :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

Dim t As Variant

' Rechercher l'article et le non de l'agent

If Not Application.Intersect(Target, Range("D3:E65000")) Is Nothing Then

Range("A2:E65000").Select

Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Range("A2").Select

End If

End Sub

End If

End Sub

L'objet de cette application est de connaitre les articles qui sont partis en prestation et qui ne sont pas revenu,

J'ai donc dévellopé la macro en Module 1 suivante (Sub Retour_Cliquer()) qui est rattachée à un objet présent sur ma feuille "Saisie" , "Retour lavage " :

Sub Retour_Cliquer()

Dim code As String

Dim c As Range

code = InputBox("Scanner l'article", "Retour lavage") 'Saisie du code barres

If code <> "" Then 'Si la valeur est différente de vide, recherche de la case correspondante

On Error Resume Next

'Set c = Cells.Find(code)

Set c = [A3:A65000].Find(code)

boucle:

ligne = c.Row

If c Is Nothing Then

absent:

MsgBox ("Code non trouvé, Saisir le vêtement en départ lavage")

Else

If c.Offset(0, 4) = "" Then

c.Offset(0, 0).Formula = ""

c.Offset(0, 1).Formula = ""

c.Offset(0, 2).Formula = ""

c.Offset(0, 3).Formula = ""

Range("A3:E65000").Select

Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Key2:=Range("D3") _

, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _

False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _

:=xlSortNormal

Range("A3").Select

Application.Run "Retour_Cliquer" ' La modification pour créer la boucle

Else

'Set c = Cells.FindNext(c)

Set c = [A3:A65000].FindNext(c)

If c.Row > ligne Then

GoTo boucle

Else

GoTo absent

End If

End If

End If

End If

End Sub

cette macro à pour objet que lorsque mes vêtements me sont restitués, je clique sur le boutton "Retour lavage" présent sur ma feuille saisie, une boite de dialogue apparaît et demande scanner l'article, je scanne donc le code barre de mon article à l'aide d'un lecteur et dès que celui-ci est lu, la maco efface l'article s'il le trouve dans mes saisies de façon à ne garder dans cette feuille "saisie" uniquement les articles partis et non retournés, la bôite de dialogue apparaît de nouveau pour me demander de scanner l'article suivant et ainsi de suite jusqu'à ce que j'arrête la boucle en clquant sur "Annuler" de cette boîte de dialogue.

Jusqu'ici, tout va bien.

Cependant, je voudrais ajouter un plus.

En effet, j'aurais besoin que lorsque je scanne un article en retour dans la boite de dialogue, qu'en plus, la macro aille dans mon fichier dans l'onglet "Base" ajoute 1 à la ligne en colonne "E" lorsqu'il trouve cette référence scannée.

Je vous remercie d'avance

Cordialement,

Bonjour,

L'idéal serait de joindre un fichier pour comprendre le cheminement.

Cependant, je m'interroge sur l'utilité de ta demande, puisque tu dis que ta macro supprime l'article dès qu'il est scanné. Donc pourquoi ajouter un 1 si tu supprimes ta ligne ? A moins que je n'ai pas compris ta demande....

Bonjour et merci de cette première réponse.

Je me suis sans doute mal exprimé et donc pour préciser, j'ai 2 onglets,

Le premier appelé "Saisie" ou n'apparaît que ce qui est partis et non retournés

Mon deuxième appelé " Base" ou y est présent de tout les vêtements.

Donc en effet, je supprime dans saisie tout ce qui est parti et restitué.

Par contre dans ma base, j'ai besoin de savoir à chaque article, le nombre de fois qu'il est parti, donc une acrémentation de 1 à chaque retour.

Je joins le fichier pour que ce soit plus façile

Merci encore pour votre service

Cordialement


Merci encore à papysg

Pour compléter ma réponse :

La feuille 1 appelée "Saisie" : me permets de saisir ce qui part en lavage et ce qui revient.

Donc pour garder uniquement ce qui est parti et non revenu, je supprime ce qui est revenu.

Par contre dans ma feuille 2 appleée "base", c'est la base de tous mes articles et ne dois pas les supprimer

Sachant que mes vêtements ne peuvent être lavé qu'un certain nombre de fois et pour savoir qui lave ses vêtements, j'ai besoin que dans cette feuille, apparaisse dans la colonne "E" une acrémentation de 1 à chaque fois que le vêtement référencé en colonne A de cette feuille "Base" m'est restitué

Souhaitant avoir compléter et encore merci

Ok, je comprends mieux.

Pourquoi dans ta "base" tu n'enregistres pas la date de retour ?

Comme ça, tu mets une petite condition SI dès qu'il y a une date de retour et tu as ton 1.

J'ai compris, sorry.

La date de retour est saisie manuellement ? A quel moment elle est saisie ?

Qu'en penses-tu ?

Merci encore,

Alors pour te préciser, je ne mets la date que de départ dans la feuille 1 appelée "Saisie"

Cette date se met automatiquement dès que je saisie le code barre dans la colonne A de cette feuille.

Cela me permet de savoir quand est parti l'article

Pour le retour, je ne saisie pas de date de retour puisque dans cette feuille, je suprimme l'article dès qu'il est rentré, j'ai ainsi que les article partis et non retourné. cela m'évite de me retouver avec une liste impressionnante d'atricles partis et restitués, autant garder que ce qui est parti et non retourné afin de savoir si mon prestataire a des carences.

Par contre, dans mon deuxième onglet appelé "base", cela pourrait effectivement être intéressant d'avoir la date du dernier retour en colonne F de façon a savoir quand le vêtement a été lavé pour la dernière fois et que cette date change à chaque retour de l'article serait un plus. Néanmoins, j'ai besoin d'une acrémentation de 1 à chaque retour du vêtement (1 pour le premier retour, 2 pour le deuxième et ainsi de suite.

Espérant être clair dans mes explications,

Merci encore de ton aide.

Merci pour les explications.

Le tout est de placer le code au bon moment dans ta boucle...

Je ne te promets pas une réponse rapide car je ne suis pas un expert comme certains ici...

bah papysg, c'est déjà très symp de ta part de t'intéresser à mon petit souci.

Pour apporter un plus au niveau des explication :

J'ai créé ce fichier car nous travaillons avec un prestataire pour l'entretien de nos vêtements de travail.

Il s'agit de vêtement haute visibilité et par conséquent, ces dernier deviennent obselètes à un certain nombre de lavage.

Aussi, pour éviter d'avoir un fichier qui grossi au fur et à mesure, je ne garde dans la feuille que ce qui est parti et non restitué (volume du fichier et limiter un moulinage à chaque saisie.

Donc, losque qu'un vêtement part au lavage, je saisie dans la feuille "Saisie" le code barre du vêtement.

La macro va donc rechercher les éléments type d'article, agent dans la feuille appelée "Base", puis ajoute la date de départ.

Lorsque le vêtement m'est restitué, je le scanne à nouveau en cliquant sur le bouton "retour lavage" de la feuille appelée "saisie"

La macro efface donc le vêtement de ma liste pour ne garder que ce qui est parti et non encore rentré.

Le fait de pouvoir faire une acrémentation de 1 dans la feuille appelée "base" me permet de savoir combien de fois ce vêtement a été lavé : 1 la première fois; 1 + 1 la deuxième fois, 2 plus 1 la troisième fois etc ..

cela me permet de savoir combien de fois aura été lavé chaque vêtement et de le sortir dès qu'il aura atteint son nombre de lavage precrit. Ajouter la date à côté serait un plus car cela me premettrait de connaitre la date du dernier retour et d'agir si un agent ne lave pas régulièrement ses vêtements (nb lavage) ou ne les a pâs lavé depuis un certain temps (dernière date de lavage)

Merci,

Bonjour

Un essai à bien vérifier

Banzai64 bonjour et un grand merci

J'ai testé, c'est génial !

Je vois que vous avez retravaillé mes macros, elles sont plus fluides, me reste maintenant à décripter pour apprendre.

Je voudrais aussi ajouter lorsque je scanne l'article en retour, qu'il m'affiche dans un msbox le secteur à qui appartient le code barre référencé (onglet "base"; colonne D) afin de m'aider dans le tri des vêtements. Ainsi, lorsque je scanne le vêtement en retour, en plus de ce que fais la macro, elle m'indique le casier dans lequel je dois mettre le vêtement pour qu'il soit redistribué dans le bon secteur. Est-ce possible ?

Après, l'application sera parfaite à mon utilisation.

Merci encore

Bonjour

Facile

Dans la macro Sub Retour_Cliquer() (dans le Module1), rajoute la ligne surlignée

      If Not Cel Is Nothing Then
        Cel.Offset(0, 4) = Cel.Offset(0, 4) + 1
        Cel.Offset(0, 5) = Date
        MsgBox "Secteur " & Cel.Offset(0, 3)
      Else
        MsgBox "Article " & Code & " inconnu dans la base"

Un grand merci à Banzai64

C'est super, j'ai en plus repris cette dernière modif pour ajouter une nouvelle fonction dans la même macro qui me permets maintenant en plus de vérifier si j'ai atteins le nb de lavage prescrit et si atteint, m'en informe par une boîte de dialogue qui apparaît uniquement dans ce cas.

C'est un super site avec des gens compétents et fais notamment référence à Banzai64 qui a sus m'apporter une solution.

Je remercie aussi papysg qui s'est intéressé à ma demande.

Je vais donc pouvoir clôturer puisque le fichier répond maintenant à mes besoins.

Très cordialement


Et j'en profite pour joindre à nouveau mon fichier avec mes dernières modifs

C'est parfait !

Ça fait plaisir de voir que tu as trouvé ta solution.

Je vais l'étudier car je n suis pas un expert, mais c'est en cherchant que l'on trouve et que l'on apprend

Rechercher des sujets similaires à "accrementation base lorsque valeur trou"