Disponibilité Emplacement
Bonjour la communauté,
J'ai réussi à progresser et avancer dans excel grâce à ce forum depuis plusieurs mois mais là je n'ai rien trouvé alors j'espère que vous allez pouvoir m'aider sur ce coup là!!!
Dans mon boulot de gestion de stock j'ai besoin de faire des modifications régulièrement et plus le nombre de références augmente plus je galère forcément.
J'ai plusieurs étagères de même taille qui sont découpées en 6 niveaux avec la possibilité de mettre entre 1 et 12 références par niveau.En fonction des dimensions des produits j'ai considéré qu'il me fallait 5 tailles de casiers différents(Emballage ) pour m'organiser ( à savoir M1,M2,M3,M4,M5 )(onglet étagère du fichier joint).
Donc si je mets une référence de taille M5 sur une étagère en position 1 , les positions 2 à 12 du niveau ne sont pas dispo.
Mon système informatique me remonte que l'emplacement 1 est occupé mais les autres libres.
Chaque niveau ne peut avoir qu'un seul type d'emballage
Comme j'ai 45000 emplacements j'aimerais pouvoir connaitre mes emplacements réellement dispo plus facilement.
Si sur une étagère j'ai mis une référence M3 en position 1 en 4 et en 7 , j'aimerais avoir l'info que la position 10 est disponible.
Dans la colonne I j'ai indiqué le résultat que j'espère obtenir ..........
J'ai épuisé mes petites connaissances en excel et fait du coup appel à vous
Merci d'avance du temps que vous pourrez y consacrez!!!!!!
Excellement Vôtre!
Bonjour,
si c'est le type d'emballage à l'indice 1 qui conditionne le type d'emballage du niveau, voici une solution possible via VBA.
Sub aargh()
With Sheets("MG14")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl Step 12
em = .Cells(i, "H")
If Left(em, 1) = "M" Then
taille = Mid(em, 2)
Select Case taille
Case 1, 2, 3
nc = Val(taille)
Case 4
nc = 6
Case 5
nc = 12
End Select
For j = 0 To 11 Step nc
If Left(.Cells(i + j, "H"), 1) = "M" Then
.Cells(i + j, "I") = "Occupé " & em
Else
.Cells(i + j, "I") = "Dispo " & em
End If
For k = 1 To nc - 1
.Cells(i + j + k, "I") = "Pas dispo"
.Cells(i + j + k, "H") = "Vide"
Next k
Next j
Else
For j = 0 To 11
.Cells(i + j, "H") = "Vide"
.Cells(i + j, "I") = "Dispo"
Next j
End If
Next i
End With
End Sub
Bonjour à tous,
Si tu veux une formule matricielle de type doliprane et d'une lenteur abyssale, en voici une :
=SI(H2<>"Vide";"Occupé "&H2;SI(MOD(G2-MAX(SI((GAUCHE(Emplacement;12)=GAUCHE($A2;12))*(Emballage<>"vide");--Indice;0));RECHERCHEV(DECALER($H$1;MAX(SI((GAUCHE(Emplacement;12)=GAUCHE($A2;12))*(Emballage<>"vide");LIGNE(Emplacement);0))-1;0);Grille!$I$5:$J$9;2;FAUX))=0;"Dispo pour "&DECALER($H$1;MAX(SI((GAUCHE(Emplacement;12)=GAUCHE($A2;12))*(Emballage<>"vide");LIGNE(Emplacement);0))-1;0);"Pas dispo"))
Grille!$I$5:$J$9 est une table qui fait correspondre 1, 2, 3, 6, 12 à M1, M2, M3, M4, M5.
Ça correspond au Select Case taille de h2so4.
Cette formule ne tient pas compte du contenu de l'indice 1. Elle cherche un M* dans les indices de 1 à 12 de l'emplacement.
Le modulo fait le travail pour affecter les disponibilités selon l'indice.
Cordialement
Grâce à vous je me rapproche du but!!
Au vu du nombre de lignes totales de mon fichier l'aide de h2so4 est plus rapide en effet, mais la formule de jvdo est parfaite mais en effet d'une lenteur abyssale.....
Seul détail , si une solution est envisageable,c'est qu'il peut arriver que ce ne soit pas forcément " le type d'emballage à l'indice 1 qui conditionne le type d'emballage du niveau"
en plus de cela je me suis planté dans mon exemple.......
Si sur une étagère j'ai mis une référence M3 en position 1 en 4 et en 7 , j'aimerais avoir l'info que la position 10 est disponible
En fait les positions de M3 sont 1 , 5 et 9 .
Merci beaucoup !
Cloclo
Bonjour,
voici une adaptation, la première occurrence d'un emballage sur un niveau, détermine le type d'emballage pour le niveau. m3 occupe 4 indices.
! vérifie tes données, j'ai trouvé un emballage M5 sur un niveau contenant des M3 et un emballage de type O22
Sub aargh()
With Sheets("MG14")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To dl Step 12
em = ""
nc = 1
For j = 0 To 11
em = .Cells(i + j, "H")
If Left(em, 1) = "M" Then
taille = Mid(em, 2)
Select Case taille
Case 1, 2
nc = Val(taille)
Case 3
nc = 4
Case 4
nc = 6
Case 5
nc = 12
End Select
Exit For
End If
Next j
For j = 0 To 11 Step nc
If Left(.Cells(i + j, "H"), 1) = "M" Then
.Cells(i + j, "I") = "Occupé " & em
Else
.Cells(i + j, "I") = "Dispo " & em
End If
For k = 1 To nc - 1
.Cells(i + j + k, "I") = "Pas dispo"
.Cells(i + j + k, "H") = "Vide"
Next k
Next j
Next i
End With
End Sub
Bonjour,
Merci beaucoup.
J'ai testé sur l'ensemble de mon fichier et j'ai en effet beaucoup d'erreurs, mais grâce à vous j'ai pu avancer.
Cloclo
Bonjour,
merci pour ton retour.