Rapprocher 3 états de Stock

ufernet

XLDnaute Junior
Bonjour le Forum,

J'ai une gestion de stock de pharmacie défaillante. J'ai trois états en PDF que j'ai repris en xlsx. Je voudrai les rapprocher pour n'en faire qu'un.
Le premier "Stock initial" à une colonne libellé puis trois colonnes, le deuxième "entrée/sortie" à aussi une colonne libellé et 8 colonnes, le troisième "Stock final" a une colonne libellé et trois colonnes. Le rapprochement des trois états se fait sur la colonne libellé. Dans le fichier exemple joint il y a 6 onglets: les trois premiers sont un extrait des trois états décrits ci-avant (les fichiers réels font entre 2000 et 3000 lignes), l'onglet "Etat intermédiaire" que j'ai réalisé grâce à un tri sur la première colonne, l'onglet "Etat final souhaité 1" qui reprend ce que la macro devrait obtenir et "Etat final souhaité 2" après un tri pour éliminer les lignes vides.
J'ai essayé avec des formules "si" qui testent le libellé mais je n'y arrive pas j'ai trop de conditions.

J'ai aussi un problème de libellé car les 3 états PDF ne sont pas tout à fait les mêmes. L'état entrée-sortie a, sur certains produits, un libellé plus court comme dans l'exemple ci-dessous:

ACETYLCYSTEINE SANDOZ CONSEIL 200 mg (Fichier Entrée sortie)
ACETYLCYSTEINE SANDOZ CONSEIL 200 mg Granulé pour so (Fichier stock initial)
ACETYLCYSTEINE SANDOZ CONSEIL 200 mg Granulé pour so (Fichier stock final)

Il s'agit bien du même produit mais au test il est reconnu comme différent.
Mais je me débrouillerai de cela en rendant identique les libellés de ces produits.

La macro devrait donc sur une nouvelle feuille mettre le nom du produit puis rapprocher sur cette ligne les données des trois fichiers lorsqu'elle sont présentes.

Je ne sais même pas si c'est possible mais j'ai confiance dans l'inventivité et la maîtrise des membres du forum!!!!

D'avance merci car à la main c'est long .... et au final truffé d'erreurs.

Ufernet
 

Pièces jointes

  • gestion stock défaillante.xlsx
    54.1 KB · Affichages: 60

Jacou

XLDnaute Impliqué
Re : Rapprocher 3 états de Stock

Bonjour Ufernet, bonjour le forum,
petites questions :
1 - à quoi sert l'onglet "stock final" puisqu'il n'y a aucune donnée dedans dans l'extrait que tu as joint;
2 - pourquoi les 19 dernières lignes de l'état intermédiaire ont-elles disparue dans l'état final 1

Il est sûr que ce serait mieux que les libellés soient identiques dans les trois fichiers de départ.
sinon peut-on considérer que si le libellé le plus court est intégralement contenu dans les libellés plus longs, le produit est identique?
en attendant ces petites précisions pour prévoir le traitement
bonne journée et à plus tard
 
Dernière édition:

ufernet

XLDnaute Junior
Re : Rapprocher 3 états de Stock

Bonjour Jacou, JCGL

Dans l'oglet Stock Final il y a bien des données. Elles sont sur les colonnes M N et O. En fait j'ai prépositionné les colonnes comme elles devront être dans l'état final.
J'avais sélectionné les 63 premières lignes pour Stock initial, pour Entrées/Sorties, et pour Stock final. En rapprochant manuellement les données avec une seule ligne pour les trois états il me restait 19 lignes sans correspondance en provenance de Stock initial. Je les ai 'bêtement " supprimé parce que dans la réalité il y aura forcément des correspondances dans le fichier Entrées sortie et Stock final. Je les ai remises dans la version jointe au présent message.
Pour les libellés la solution que tu proposes est valable (je n'y avais pas pensé): si le libellé le plus court est intégralement contenu dans les libellés plus long, le produit est identique.
A JCGL: Sur l'état Entrée sortie il y a effectivement un code à13 chiffres mais uniquement pour les médicaments pas pour les dispositifs médicaux (aiguilles,...) et ce code est absent des états Stock initial et stock final!

Encore merci
 

Pièces jointes

  • gestion stock défaillante version2.xlsx
    55.8 KB · Affichages: 54

JCGL

XLDnaute Barbatruc
Re : Rapprocher 3 états de Stock

Bonjour à tous,

Un code qui centralise les données.
Reste à trouver une solution pour éliminer les "doublons"... et récupérer les données...

VB:
Option Explicit

Sub Centralisation()


    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Sheets("Centralisation").Delete
    Application.DisplayAlerts = True
    Sheets.Add
    ActiveSheet.Name = "Centralisation"
    Sheets("Entrée sortie").Rows("1:1").Copy Sheets("Centralisation").Range("A1")
    Sheets("Centralisation").Move After:=Sheets(Sheets.Count)


    Sheets("Entrée sortie").Activate
    Sheets("Entrée sortie").Range("A2:Z" & Range("A" & Sheets("Entrée sortie").Rows.Count).End(xlUp).Row).Copy
    Sheets("Centralisation").Activate
    Range("A" & Sheets("Centralisation").Range("A" & Rows.Count).End(xlUp).Row + 1).Select
    ActiveSheet.Paste


    Sheets("stock final").Activate
    Sheets("stock final").Range("A2:Z" & Range("A" & Sheets("stock final").Rows.Count).End(xlUp).Row).Copy
    Sheets("Centralisation").Activate
    Range("A" & Sheets("Centralisation").Range("A" & Rows.Count).End(xlUp).Row + 1).Select
    ActiveSheet.Paste


    Sheets("Etat intermédiaire").Activate
    Sheets("Etat intermédiaire").Range("A2:Z" & Range("A" & Sheets("Etat intermédiaire").Rows.Count).End(xlUp).Row).Copy
    Sheets("Centralisation").Activate
    Range("A" & Sheets("Centralisation").Range("A" & Rows.Count).End(xlUp).Row + 1).Select
    ActiveSheet.Paste


    Cells.EntireColumn.AutoFit


    With ActiveWorkbook.Worksheets("Centralisation").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending
        .SetRange Range("A2:O5000")
        .Header = xlNo
        .Apply
    End With
    Range("A1").Select


    ActiveSheet.Range("$A$1:$O$311").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, _
                                                                     7, 8, 9, 10, 11, 12, 13, 14, 15), Header:=xlYes


    ActiveWorkbook.Names("Base_TCD").RefersToR1C1 = _
    "=OFFSET(Centralisation!C1:C26,,,COUNTA(Centralisation!C1),COUNTA(Centralisation!R1C1:R1C26))"
    Application.ScreenUpdating = True
End Sub

A+ à tous
 

Pièces jointes

  • JC Gestion Stock PHA et DMS.xlsm
    54.5 KB · Affichages: 60

Jacou

XLDnaute Impliqué
Re : Rapprocher 3 états de Stock

Bonsoir à tous
JCGL en première lecture de ton code, je crois que tu n'as pas pris les bonnes feuilles. En effet Ufernet nous a dit que la feuille "Etat intermédiaire" était une feuille qu'il avait construit à partir des 3 feuilles à prendre en compte pour obtenir ce qu'il souhaitait. Les trois feuilles qui seront à traiter dans son fichier réel sont : "stock initial", "entrées sorties" et "stock final".
Je crois donc qu'il faudrait remplacer par la partie de traitement de "Etat intermédiaire" par celui de "stock initial"
Je continue d'examiner ça.
Bonne soirée à tous
 

Jacou

XLDnaute Impliqué
Re : Rapprocher 3 états de Stock

Re
la solution que j'avais proposé pour les intitulés ne fonctionnera pas correctement pour au moins 1 cas : c'est celui de l'ALEPSAL; en effet il y a comme intitulés "ALEPSAL", "ALEPSAL 100 mg Comprimé Boîte de 30" et "ALEPSAL 50". L'intitulé "ALEPSAL" de la feuille "Entrées sorties" semble correspondre à l'intitulé "ALEPSAL 50" des deux autres feuilles. mais en fonction de l'ordre alphabétique il serait vraisemblablement rapproché de l'intitulé "ALEPSAL 100 mg Comprimé Boîte de 30".
il faut donc trouver une procédure pour vérifier d'abord les intitulés non conformes par rapport à une liste de référence.
à suivre
 

ufernet

XLDnaute Junior
Re : Rapprocher 3 états de Stock

Bonjour à tous;

Merci JC, Merci Jacou. J'ai testé la macro puis remplacer la feuille "état intermédiaire" par la feuille "stock initial" dans ta macro et la feuille "Centralisation" ressemble comme deux gouttes d'eau à "état intermédiaire". Par contre la fin de la macro n'a rien modifié à la feuille "Centralisation":


ActiveSheet.Range("$A$1:$O$311").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, _
7, 8, 9, 10, 11, 12, 13, 14, 15), Header:=xlYes

ActiveWorkbook.Names("Base_TCD").RefersToR1C1 = _
"=OFFSET(Centralisation!C1:C26,,,COUNTA(Centralisation!C1),COUNTA(Centralisation!R1C1:R1C26))"
Application.ScreenUpdating = True


En lisant ("Base_TCD") j'ai cru comprendre que l'idée était de créer un tableau croisé dynamique à partir de la feuille "Centralisation". J'ai essayé (manuellement) et ça marche sous réserve, comme l'a fait remarquer Jacou, de résoudre les problèmes de libellé différent pour le même produit.
 

Discussions similaires

Réponses
2
Affichages
993

Statistiques des forums

Discussions
312 332
Messages
2 087 361
Membres
103 530
dernier inscrit
Chess01