IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Réassort de stock


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Réassort de stock
    Bonjour,

    Je dois pour mon boulot réaliser une macro qui me permette de faire des réassorts automatiques en fonction des références et des stocks.
    Etant débutant en VBA, j'ai déja réalisé quelques macros plus ou moins simples, mais là je n'y arrive pas.

    Le magasin 1 (la centrale) qui ne vend pas, approvisionne le magasin 2 qui est un point de vente.

    La feuille ARTICLES est la base de données qui comprend :
    Colonne A : Le code du Magasin (le magasin 1 est la centrale, le magasin 2 le point de vente)
    Colonne B : L'état de la référence (S=Référence en Stock, V=Référence Vendue)
    Colonne C : La référence
    Colonne D : La marque

    Je voudrais afficher automatiquement la liste des références et leur marque, qu'il faut mettre en réassort.

    Je suis arrivé à extraire dans 2 feuilles différentes le stock de chaque magasin (mais l'exécution est assez longue).
    Je voulais qu'après avoir trouvé une référence, il cherche dans la liste si elle existe à nouveau, afin de vérifier dans quel magasin elle se trouve et si elle est en stock ou vendue.
    J'ai essayé des boucles différentes, avec des filtres automatiques utilisant des critères, mais sans succès.

    J'ai laissé tomber l'extraction dans 2 feuille du fait de la lenteur (20 000 lignes à analyser et ça va augmenter) car je pense qu'il est possible de faire celà à partir de la seule table ARTICLES, mais malgré mes efforts et beaucoup de temps passé dessus, je ne suis pas assez calé en VBA.

    Un petit coup de main serait bienvenu.


    Merci pour votre aide...

  2. #2
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Je vais peut être passer pour un ignorant, mais qu'est ce qu'un réassort ?

    Sinon pour les problèmes de lenteur, passe par une variable Tableau.

    Je n'ai pas ton code, donc je ne connais pas ta méthode d'extraction, mais la plus commune et logique est celle de pointer et lire les cases les unes à la suite des autres. Ce faisant, tu interroge la feuille à chaque exécution. Cette interrogation lance de nombreux calculs, car Excel recalcule automatiquement tout un tas de truc à chaque fois. D'ou la lenteur.

    Ce qui me fait penser que tu utilise cette méthode est que l'extraction est de plus en plus longue suivant la liste.

    La solution que je te propose est de passer par une variable de type Array.

    Tu stock toutes tes données dans une variable, donc une seul interrogation de la feuille, et tu parcours ensuite ta variable au sein de ton programme.

    Je te suggère d'utiliser les même méthodes pour faire des recherches dans les listes. Tu gagne énormément de temps.

    Pour info, j'avais fait une petite étude comparative sur 1000 lignes, et le temps de traitement passait de 15min à 5sec.

    Voici un tutoriel si tu veux te renseigner : LIEN
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Nico Chg :
    Je vais peut être passer pour un ignorant, mais qu'est ce qu'un réassort ?
    je dirai que c'est une remise en stock --> un ré-assortiment. Enfin, je pense !
    titi83
    Je voudrais afficher automatiquement la liste des références et leur marque, qu'il faut mettre en réassort
    Quand le stock est à zéro ou en fonction d'un mini ?

    Hervé.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonsoir Theze, Nico Chg

    Je ne l'ai pas précisé, mais chaque "exemplaire" d'une référence a un code article différent : si 2 références "AAAAA" sont en stock, il y 2 codes article différents :
    Ex :REFERENCE -----CODE ARTICLE
    -------AAAAA -----------611456
    -------AAAAA -----------511E457

    Peut être que c'est un élément qui manque, comme une clé pour les filtres ou autres…
    Je rajoute donc dans mon tableau un code article..

    Afin de mieux comprendre, voici différents cas :


    UNIQUEMENT SI LA REFERENCE EST EN STOCK A LA CENTRALE (MAG1) :

    1) Si le MAG2 a vendu la réf OOOO (code article 611313) et n'a plus la réf OOOO en stock (sous un autre code article), alors la centrale (MAG1) envoie sa réf disponible OOOO (code article 611220) au MAG2 -> REASSORT
    MAGASIN---------ETAT---------REFERENCE---------CODE ARTICLE---------MARQUE
    ----1----------------S--------------OOOO----------------611220-------------MARQUE 1
    ----2----------------V--------------OOOO----------------611313-------------MARQUE 1


    2) Si le MAG2 a vendu la réf RRRRR (code article 320250) et a encore la réf RRRRR en stock (code article 650412), alors la centrale (MAG1) n'envoie pas sa réf disponible RRRRR (code article 530V150) au MAG2 -> PAS DE REASSORT :
    MAGASIN---------ETAT---------REFERENCE---------CODE ARTICLE---------MARQUE
    ----2----------------V--------------RRRRR----------------320250------------MARQUE 5
    ----2----------------S--------------RRRRR----------------650412------------MARQUE 5
    ----1----------------S--------------RRRRR----------------530V150-----------MARQUE 5


    3) Si le MAG2 a toujours en stock la ref SSSSSS (code article 410256), alors la centrale (MAG1) n'envoie pas sa réf disponible SSSSSS (code article 815478) au MAG2 -> PAS DE REASSORT
    MAGASIN---------ETAT---------REFERENCE---------CODE ARTICLE---------MARQUE
    ----1----------------S--------------SSSSSS----------------410256-----------MARQUE 8
    ----2----------------S--------------SSSSSS----------------815478-----------MARQUE 8

    Je pense que ce sera plus clair comme ça.

    Et encore merci pour votre aide..
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Si j'ai tout compris, tu effectue un réassort UNIQUEMENT lorsque le magasin 2 n'a plus de référence, et que le magasin 1 en a encore ?
    Grosso modo, ton mag1 c'est un peu un entrepôt, et il envoie les ref manquante aux autres magasins, ou ça fonctionne dans les deux sens ?

    Je te propose l'algorithme suivant :

    • Tu crée une variable de type Array qui va stocker toutes les références du Magasin 2
    • Tu crée une variable de type Array qui va stocker toutes les références du magasin 1
    • Tu parcours la première variable Array2
    • Pour chaque valeur, tu parcours la totalité de la variable Array1
    • Si tu trouve une correspondance, tu récupère la valeur dans une autre feuille
    • et tu recommence


    En VBA ça donne un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Dim WsMag1 as Worksheet
    Dim WsMag2 as Worksheet
     
    Dim Ary_StockMag2() as String
    Dim Ary_StockMag1() as String
    Dim I as long, J as long
     
    Set WsMag1 = Worksheets("FeuilMag1")
    Set WsMag2 = Worksheets("FeuilMag2")
     
    With WsMAg1
         Ary_StockMag1 = .range(.cells(X, Y), .cells(XX, YY))
    End with
    'Remplie la variable tableau correspondant au stock 1
     
    With WsMag2
         Ary_StockMag2 = .range(.cells(X2, Y2), .cells(XX2, YY2))
    End with
    'Remplie la variable tableau correspondant au stock 2
     
    For I = Lbound(Ary_StockMag2, 1) to Ubound(Ary_StockMag2, 1)
    'Parcours le tableau 2 sur sa première dimensions
         For J = Lbound(Ary_StockMag1, 1) to Ubound(Ary_StockMag1, 1)
         'Parcours le tableau 1 sur sa première dimensions
              If Ary_StockMag2(I, 1) = Ary_StockMag1(J, 1) then
              'Si tu trouve une référence qui correspond ...
     
                   'Do some stuff
     
              End if
         Next J
    Next I
    Voila un petit exemple de code à adapter. Tu créer deux variables tableaux, et tu les parcours pour faire de la comparaison.

    Je précise que je n'ai pas regarder ton fichier joint.
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour Nico Chg,

    D'après ce code, il y a 2 feuilles mag1 et mag2. Or, dans mon fichier il y a une seule base de données avec dans le même tableau le stock du mag1 et du mag2 dans une seule feuille ARTICLES.

    La deuxième feuille REASSORT MAG2 doit contenir le résultat.

    J'ai commencé par essayer d'adapter en adaptant le range ce code mais j'ai une erreur "incompatibilité de type" sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ary_StockMag1 = .Range(.Cells(2, 1), .Cells(20, 5))
    Mais en plus comment ce code permet-il de différencier les références en stock ou vendues au mag2 ? et si la référence existe au mag 1 ?

    Merci.

  7. #7
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Oui, ce n'est pas extrêmement gênant, je n'ai pas vu ton fichier donc je ne savais pas comment il est organisé.

    Pour l'erreur incompatibilité de type, je me suis trompé en écrivant le code, tu devrais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Ary_StockMag1 as Variant
    Ary_StockMag1 = .Range(.Cells(2, 1), .Cells(20, 5))
    Pareil pour Ary_StockMag2.

    Et bien tu peux effectuer toutes les comparaisons que tu veux, je n'en ai fait qu'une. Ici, je compare strictement référence par référence, je n'ai pas stipuler les conditions que tu demandes, mais à base de If ... Then, je pense que tu devrais pouvoir t'en sortir. Un petit exemple d'utilisation de If ... then

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DIm A as variant
    A = inputbox("Taper ce que vous voulez")
    If ISNumeric(A) then
         msgbox("Ceci n'est pas un chiffre")
    Else
         Msgbox("Ceci est un chiffre")
    End if
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    C'est bon, je n'ai plus le message d'erreur mais je ne sais pas comment faire pour adapter ce code à mon fichier sachant que je n'ai qu'une feuille a la base.
    Pouvez-vous jeter un œil au fichier ?

    Merci pour votre aide..
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Malheureusement, je n'ouvre pas les pièces jointes, et je reste très fermement convaincu qu'il est possible de tout expliquer à l'aide d'image et de ligne de code écrite entre balise # ([CODE][ /CODE])

    Qu'entends tu par "je n'arrive pas à adapter le code à mon problème" ? Si tu n'as qu'une seule feuille, il suffit d'adapter les plages (.range) à tes données ?

    Ensuite je n'ai pas réellement écrit de code résolvant ton problème, il te faut adapter les conditions en fonction de ce que tu veux faire.

    Ce que je t'ai proposé est de comparer les références une à une. Pour ça, je parcours le premier tableau (les références du magasin2), et pour chaque référence (pour chaque ligne), je regarde TOUTES les lignes des références du magasin1 (toutes les lignes à nouveau). Je sais par expérience que ce genre de procédé prend du temps, c'est pour ça que je le fais à l'aide de variable tableau.

    Si une référence est trouvé, il faut alors comparer les stocks. Comme on effectue un réassort uniquement lorsque le stock du magasin 2 est vide, on peut déjà supprimer pas mal de comparaisons.

    Un pseudo algo serait alors :

    • Parcourir les références du mag2
    • Si réf pas en stock, alors comparer réf du mag1
    • Si réf trouvé dans mag1, alors regarder stock mag1
    • Si réf trouvé ET stock non vide, alors réassort


    Qu'en penses tu ? Si ça te convient, on peut travailler sur cet algo ensemble.
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  3. Réponses: 2
    Dernier message: 29/09/2002, 10h25
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo