VBA Excel Gestion de stock
Bonjour à tous,
Je suis actuellement en stage et je dois réaliser un mini projet de Gestion de stock en VBA
Je suis débutant en VBA.
Le but de ce programme est de rentrer une série de code sur une feuille excel,sous forme de macro pour pouvoir les importer dans un fichier GMAO.
Les codes ont la forme indiquée dans le fichier excel ci-dessous.
Merci pour ce qui me liront et à bientôt.
Cordialement
Arnaud
Bonjour Arnaud, bonjour le forum,
Avec des explications si peu claires, voire carrément opaques, je doute que tu obtiennes une réponse à ton problème. Pour ma part, je n'ai rien compris à ce que tu demandes. Bon j'avoue, je ne sais même pas ce que signifie GMAO...
Re ThauThème
Oui en effet , mes informations sont peu claire je vais essayer de reformuler ma demande.
Tout d'abord un logiciel de GMAO(Gestion de Maintenance Assistée par Ordinateur) permet par exemple :
Dans une entreprise de gérer toute la partie production c'est à dire de pouvoir consulter dans telle ou telle bâtiment les machines disponible leur emplacement et leur numéro de référence .
Toute ces données sont généralement réparties sous forme d'arborescence.
Le but de mon projet est de remplir un classeur excel en utilisant une macro.
Les codes que je vais expliquer par la suite permettent de situer les pièces dans le magasin de l'entreprise
Toute les références des pièces auront pour nom dans la collonne "A" de mon classeur par exemple : PTL_A01_A01
Puis dans la collone "B" la signification de ce code : " PTL_allé A, Alvéole 1 , Etagère 1 emplacement 1"
PTL est le nom de l'entreprise
une alvéole est la largeur pour une étagère ou l'on pourra placer toute nos pièces
Dans le fichiers excel ci-joint je donne
- la lettre correspondant à l'allée soit A correspond à tout la longueur du couloir
- le nombre d'alvéole par allée
- le nombre d'étagère maximum
- le nombre d'emplacement de pièces dans une étagère
Enfin je donne en dessous la forme qu'aura mon tableau
C'est pour cela que je cherche à faire un programme qui pourrait synthétiser tous ces codes sans avoir à les taper à la main .
Ce qui me permettra à la fin de pouvoir rentrer directement mon classeur dans le logiciel de GMAO et ainsi pourvoir consulter toute mes pièces et connaître leur emplacement dans le magasin.
Je comprend que le sujet ne sois pas facile à comprendre mais si vous voulez bien m'aider je vous expliquerais en détails les points que vous n'avez pas compris.
Cordialement
Arnaud
Re,
Ok Arnaud mais tu veux quoi exactement ? La liste de tous les codes avec leur désignation ?
Re ,
Oui c'est ça.
À bientôt
Re,
Supprime dans le premier onglet les deux lignes d'exemple :
Code / Désignation
PTL_A01_A01 / Allé A alvéole 01 étagère A emplacement 01
dans le second onglet écrit
Code / Désignation
Le code ci-dessous devrait convenir :
Sub Macro1()
Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim I As Byte 'déclare la variable I (Incrément d'Allée)
Dim J As Byte 'déclare la variable J (Incrément d'Alvéole)
Dim K As Byte 'déclare la variable K (Incrément d'étagère)
Dim L As Byte 'déclare la variable L (Incrément d'emplacement)
Dim COD As String 'déclare la variable COD (CODe)
Dim DES As String 'déclare la variable DES (DESignation)
Set O1 = Sheets("Feuil1") 'définit l'onget O1
Set O2 = Sheets("Feuil2") 'définit l'onget O2
TV = O1.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes du tableau des valeurs TV (en partant de la seconde) (=> toutes les allées)
For J = 1 To CByte(TV(I, 2)) 'boucle 2 : sur toutes les alvéoles de la ligne
For K = 1 To CByte(TV(I, 3)) 'boucle 3 : sur toutes les étagères de la ligne
For L = 1 To CByte(TV(I, 4)) 'boucle 4 : sur tous les emplacements de la ligne
Set DEST = O2.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
COD = "PTL_" & TV(I, 1) & Format(J, "00") & "_" & Left(Cells(K, 1).Address(0, 0), 1) & Format(L, "00") 'définit le code COD
'définit la desigation DES
DES = "Allée " & TV(I, 1) & " Alvéole " & Format(J, "00") & " étagère " & Left(Cells(K, 1).Address(0, 0), 1) & " emplacement " & Format(L, "00")
DEST.Value = COD 'renvoie le code COD dans DEST
DEST.Offset(0, 1).Value = DES 'renvoie la desination dans DEST décalé d'une cellule à droite
Next L 'prochain emplacement de la boucle 4
Next K 'prochaine étagère de la boucle 3
Next J 'prochaine Alvéole de la boucle 2
Next I 'prochaine Allée de la boucle 1
End SubRe ,
Merci beaucoup ton programme fonctionne parfaitement.
A bientôt
Arnaud
Bonjour ThauThème ,
Ce code remonte à longtemps je croyais qu'il fonctionnait parfaitement mais il y a quelque chose qui ne fonctionne pas.
Pour l'incrémentation de la boucle 3 correspondant au étagères.
Celle ci ne s'incrémente pas, on devrait avoir A01 ,B01,C01 dans ce cas les étagères restent bloquées à A01 ,A01,A01.
Cordialement
arnaud
Bonjour Arnaud, bonjour le forum,
Désolé. Essaie ce code :
Sub Macro1()
Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim I As Byte 'déclare la variable I (Incrément d'Allée)
Dim J As Byte 'déclare la variable J (Incrément d'Alvéole)
Dim K As Byte 'déclare la variable K (Incrément d'étagère)
Dim L As Byte 'déclare la variable L (Incrément d'emplacement)
Dim COD As String 'déclare la variable COD (CODe)
Dim DES As String 'déclare la variable DES (DESignation)
Set O1 = Sheets("Feuil1") 'définit l'onget O1
Set O2 = Sheets("Feuil2") 'définit l'onget O2
TV = O1.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes du tableau des valeurs TV (en partant de la seconde) (=> toutes les allées)
For J = 1 To CByte(TV(I, 2)) 'boucle 2 : sur toutes les alvéoles de la ligne
For K = 1 To CByte(TV(I, 3)) 'boucle 3 : sur toutes les étagères de la ligne
For L = 1 To CByte(TV(I, 4)) 'boucle 4 : sur tous les emplacements de la ligne
Set DEST = O2.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
COD = "PTL_" & TV(I, 1) & Format(J, "00") & "_" & IIf(Len(Cells(1, K).Address(0, 0)) = 2, Left(Cells(1, K).Address(0, 0), 1), Left(Cells(1, K).Address(0, 0), 2)) & Format(L, "00") 'définit le code COD
'définit la desigation DES
DES = "Allée " & TV(I, 1) & " Alvéole " & Format(J, "00") & " étagère " & IIf(Len(Cells(1, K).Address(0, 0)) = 2, Left(Cells(1, K).Address(0, 0), 1), Left(Cells(1, K).Address(0, 0), 2)) & " emplacement " & Format(L, "00")
DEST.Value = COD 'renvoie le code COD dans DEST
DEST.Offset(0, 1).Value = DES 'renvoie la desination dans DEST décalé d'une cellule à droite
Next L 'prochain emplacement de la boucle 4
Next K 'prochaine étagère de la boucle 3
Next J 'prochaine Alvéole de la boucle 2
Next I 'prochaine Allée de la boucle 1
End SubRe,
Merci pour la modification.
A bientôt