1 pièce(s) jointe(s)
VBA : Gestion Dynamique emplacements
Bonsoir à tous,
Novice en VBA, je souhaiterai réaliser une gestion dynamique d'emplacement de stockage (très basique sur le papier mais un peu plus compliqué sur Excel :? ).
Pour résumer ma demande, j'ai 10 emplacements (de EMPLA0001 à EMPLA0010) et 26 articles, de A à z (pour l'exemple). Je peux avoir plusieurs quantité sur mon article (trois A, deux F, cinq Y, etc). Afin de m'y retrouver, je souhaite développer un fichier simple avec une gestion dynamique des emplacements.
Régles de gestion :
- J'indique mon article en cellule B3 :
- Si pas d'emplacement attribué alors attribution d'un emplacement libre (emplacement libre = aucune donnée dans colonne B : CodeArticle) + départ incrément sur Qté (colonne D).
- si emplacement déjà attribué alors simple incrément sur Qté (colonne D) de l'emplacement déjà attribué. 1 CodeArticle pour 1 emplacement.
- Lorsque je décide de vider ma case : simple suppression manuelle de mes données CodeArticle & Qté sur la ligne de mon emplacement. Mon emplacement devient alors libre pour accueillir un nouveau CodeArticle et une Qté qui redémarre à 1.
- Si tous mes emplacements sont plein et que j'indique une onzième référence (car que 10 emplacements) alors message d'erreur.
Pour l'instant, j'ai placer ma barre en cellule B3, mais je peux la positionner dans un Userform au besoin.
Vous trouverez ci-joint mon fichier pour appuyer mes propos.
Merci d'avance pour toutes vos explications.
Alban
gestion dynamique emplacement
Bonjour,
Voici une approche qu'il convient d'améliorer et entre autres la gestion des majuscules et minuscules.
Supprimer tes formules inutiles dans F4 et F5.
Je ne peux affirmer que ce code répond à tous les cas de figures.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
Sub alban()
Dim plage As Object
Set plage = Range("B8:B17")
CELfin = [b8].End(xlDown).Rows
For Each C In plage
If C.Value = "" Then
C.Value = [B3].Value
End If
If C.Value = [B3].Value Then
[F3].Value = C.Value
[F4].Value = C.Offset(0, 2).Value
[F5].Value = C.Offset(0, 1).Value
Exit For
End If
If C = CELfin Then
MsgBox "pas d'emplacement disponible"
End If
Next
End Sub |
Cordialement