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

156nombre-aaee.xls (17.00 Ko)

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

200nombre-aaee.xls (17.00 Ko)

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 Sub

Re ,

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 Sub

Re,

Merci pour la modification.

A bientôt

Rechercher des sujets similaires à "vba gestion stock"