Gestion d'emplacement dans un entrepôt logistique

Bonjour à tous,

Je fais appel à votre aide car je suis face à un problème dont je n'arrive pas à résoudre.

Pour vous situer le contexte, il y a un entrepôt logistique qui stock des palettes à des emplacements définis et chaque palette a une référence.

Il y a trois types de mouvement au sein de l'entrepôt :

- L'entrée (les palettes rentrent dans l'entrepôt et sont attribuées à un emplacement)

- La sortie (les palettes sortent de l'entrepôt et libèrent un emplacement)

- Le transfert (les palettes changent d'emplacement dans l'entrepôt)

Toutes ces données sont récoltées quotidiennement grâce à une requête Excel sur un dossier partagé (DropBox) où un collaborateur sur le terrain dépose les fichiers .csv qui comportent toutes ces informations. (Ces fichiers sont créés à partir d'un outil de scan de code barre...).

L'objectif de mon projet est de connaitre l'emplacement et la quantité pour une référence donnée.

Dans l'avancement de ce projet, j'arrive à étudier les entrées et les sorties en appliquant des quantités positives pour les entrées et des quantités négatives pour les sorties. Mais je bloque sur la gestion des transferts de palettes car ce type de mouvement doit enlever les quantités à l'emplacement initial et en ajouter à l'emplacement de destination.

J'ignore si c'est possible, mais l'idéal serait de crée une base de données secondaire, où le mouvement de transfert d'emplacement dans la base de données principale équivaudrait à deux lignes dans la base de données secondaire, une ligne avec des quantités négatives sur l'ancien emplacement, et une ligne avec des quantités positives sur le nouveau. Exemple ci-dessous :

Base de données principale :
Type de mouvementDateRéférenceQuantitéEmplacement initialEmplacement destination
Transfert15/09/2023149411017
Base de données secondaire :
RéférenceQuantitéEmplacement
14941- 101
14941+ 107

Merci à tous ceux qui prendront le temps de m'aider dans ma situation !

Louis

Bonjour,

Merci pour votre réponse.

En effet votre macro applique bien ce dont j'ai besoin.

Mais dans mon cas les données sont ajoutées quotidiennement grâce à une requête sur un dossier. L'exécution de cette macro quotidiennement rapporterait autant les anciennes données que les nouvelles, et ce qui créerait des doublons dans la base de données secondaire.

Avez-vous une solution ?

Merci

Cordialement

Oui, mais vous ne fournissez pas tous les renseignements nécessaires pour établir une proposition convenable.

Voulez-vous dire qu'il faut effacer le contenu de la feuille "Base de données secondaires" avant chaque recopie et donc repartir sur une feuille vierge?

Pardon, j'essaye de faire au mieux pour expliquer le problème.

Non, il ne faut pas effacer les données précédemment importé dans la feuille secondaire, il faut ajouter à la base de donnée secondaire les nouvelles données qui apparaissent quotidiennement dans la base de donnée principale (sans reprendre les anciennes, car cela créerait des doublons).

Merci pour votre temps.

Cordialement,

Louis

Alors, j'ai ajouté une boîte de dialogue dans laquelle vous inscrirez le N° de ligne où commencent les nouvelles données importées.

Cdlt

bonjour Arturo83, LouisLambert,

le 2ième BDD est une sorte de journal de bord et un TCD vous donne le stock actuel.

Chaque jour, il y a d'autres données dans les colonnes A:F (les anciennes sont supprimées), puis ils sont transférés vers le tableau structuré et alors le TCD est mis à jour.

Bonjour BsAlv,

Merci pour votre proposition, on se rapproche de l'idée finale.

Néanmoins, les colonnes A:F correspondront à terme à une requête avec de nombreuses lignes importés chaque jour. Etant donnée qu'il s'agit d'une requête sur un dossier partagé, il n'y a pas possibilité de supprimer les lignes avant l'utilisation de la macro (les fichiers .csv récupérés par la requête sont conservés, et une actualisation de la requête refera apparaitre ces anciennes données).

N'y a t-il pas possibilité de réaliser la même chose en conservant les anciennes données en colonne A:F (mais sans créer de doublons après utilisation de la macro dans les colonnes L:P) ?

Peut-être comme l'évoquait Arturo83, en vidant les colonnes L:P en début de macro ?

Merci

Cordialement,

re,

comme le nombre de lignes est indéfini (centaines, milliers,..) un autre méthode. La mise en page du TCD, vous pouvez le modifier ... .

Si vous aviez Excel 365, ce serait encore plus facile avec ces nouveaux formules.

Sub Nouveaux_Mouvements()
     Dim i, j, ptr, aA, aOut

     With Sheets("Base de données principale")
          aA = .Range("A1").CurrentRegion.Value2

          ReDim aOut(1 To UBound(aA) * 2, 1 To 5)
          For i = 2 To UBound(aA)
               Select Case aA(i, 1)
                    Case "Transfert", "Entrée", "Sortie"
                         ptr = ptr + 1
                         aOut(ptr, 1) = aA(i, 1)     'type
                         aOut(ptr, 2) = CDbl(aA(i, 2))     'date
                         aOut(ptr, 3) = CStr(aA(i, 3))     'référence
                         aOut(ptr, 4) = IIf(aA(i, 1) = "Entrée", 1, -1) * Abs(aA(i, 4))     'valeur positif de quantité pour Entrée, négatif pour les 2 autres
                         aOut(ptr, 5) = aA(i, 5)     'emplacement "initial"

                         If aA(i, 1) = "Transfert" Then 'renversement "transfert"
                              ptr = ptr + 1
                              aOut(ptr, 1) = aA(i, 1)     'type
                              aOut(ptr, 2) = CDbl(aA(i, 2))     'date
                              aOut(ptr, 3) = CStr(aA(i, 3))     'référence
                              aOut(ptr, 4) = Abs(aA(i, 4))     'valeur positif !!!
                              aOut(ptr, 5) = aA(i, 6)     'emplacement "destination"
                         End If
                    Case Else
                         MsgBox "problème"
               End Select
          Next

      With Range("TBL_Mouvements").ListObject
               If .ListRows.Count Then .DataBodyRange.Delete
               If ptr > 0 Then .ListRows.Add.Range.Resize(ptr, UBound(aOut, 2)).Value = aOut
          End With

          .PivotTables("TCD_Stock").RefreshTable
     End With

End Sub

Bonjour,

N'étant pas expérimenté en VBA, j'ai des difficultés à appliquer vos recommandations sur mon fichier après paramétrage de la requête, serait-il possible de me le faire directement sur mon fichier svp ?

La première feuille correspond à la base de donnée principale qui correspond à ma requête, où il faut aller chercher les données

La seconde feuille correspond à la base de donnée secondaire, où les données arrivent après utilisation de la macro

à votre disposition,

Cordialement,

Louis

bonjour,

colonne L:M est pour une version 365, alors vous n'avez pas besoin d'un TCD. Ce TCD, vous pouvez modifier la mise en page.

BsAlv,

Malheureusement, je n'ai pas la version 365.

Merci beaucoup pour votre aide.

C'est parfait le TCD me conviendra très bien, j'ai juste une dernière demande.

Il y a une petite coquille, le champ client s'affiche dans celui de la référence dans la base de donnée secondaire. Je suis désolé, je n'avais peut-être pas détaillé ce champ "client" dans ma demande.

Pouvez-vous modifier la macro "Nouveaux_Mouvements", afin qu'elle renvoie la base de donnée secondaire sous 6 colonnes (comme ci-dessous) au lieu de 5 comme précédemment paramétré.

Type de mouvementDateClientRéférenceQuantitéEmplacement

- Le champ client (colonne G de la base de donnée principale)

- Le champ référence (colonne H de la base de donnée principale)

Svp

Merci

Louis

re,

Merci beaucoup pour votre aide BsAlv

Bonjour BsAlv,

Dans votre dernier fichier, les quantités correspondant aux mouvements "Sortie" ne s'appliquent pas négativement.

Pouvez-voir le problème ?

svp

Merci

Louis

re,

environ la 10ième ligne, on a cette ligne, pour le moment ce "3" est un "1", donc si vous changez cela ...

aOut(ptr, 5) = IIf(aA(i, 3) = "Sortie", -1, 1) * Abs(aA(i, 9)) ' 'valeur positif de quantité sauf pour sortie

PS. Vous savez le faire ????

Re,

Merci oui j'ai réussi à le faire.

Rechercher des sujets similaires à "gestion emplacement entrepot logistique"