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 :

Prise en charge d'un fichier renseignant l'état des stocks


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable amélioration continue
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable amélioration continue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut Prise en charge d'un fichier renseignant l'état des stocks
    Bonjour,

    Je cherche une personne meilleure que moi en programmation, sachant que je suis novice, ce n'est pas si difficile.
    La prochaine étape qui reste encore a créer est annoté en rouge dans mon message.
    Le contexte de mon projet :
    Gérer l'état des stocks "Composants" selon 2 critères :

    - Prise de composants référence X (Ex : 11213, 5123589, 5112358..), Zone X (Ex : Zone 1, Zone 2 à Zone 5)
    - Dépose de références référence X, Zone X

    L'idée ici est de mettre à jour l'état des stocks. En rajoutant ou retirant un composant dans tel emplacement.

    Nous avons plusieurs formulaires :

    - Formulaire dépose. Nous renseignons la zone et la référence du composant déposé. Si je dépose un chariot, faire +1 en quantitée dans l'onglet "état" pour la référence dans la zone X correspondante. Si quantitée = 0. Créer la ligne
    - Formulaire prise. Nous renseignons la référence que nous cherchons dans le formulaire, validons puis un autre formulaire apparait, qui, en prenant en compte l'état des stocks est capable de nous dire dans quel zone nous pouvons en trouver. L'opérateur choisi celon ce choix possible la zone où il va aller retirer son chariot, valide. Si je retire le chariot faire -1 en quantitée dans l'onglet "état" pour la référence dans la zone X correspondante

    L'objectif de tout ceci est qu'en informant des quantités de références par zones, nous ne perdions plus de temps pour chercher nos composants, il suffira simplement de questionner le programme qui saura nous dire où ils se situeront.
    J'espère pouvoir me faire comprendre, restant disponible pour toutes questions complémentaires.

    Cordialement.

    Maxime
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Une première approche
    Dans le module de l'userform "DEPOSE_COMPOSANT
    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
    Private Sub CommandButton1_Click()
        Ref = ComboBox1.Text
        Empl = ComboBox2.Text
        Set f1 = Sheets("Etat")
        Set R = f1.Columns("A").Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
        If Not R Is Nothing Then
            If f1.Cells(R.Row, "B") <> Empl Then
                MsgBox "La référence n'existe pas dans la zone sélectionnée, elle  est en " & f1.Cells(R.Row, "B") & ".  Recommencez en sélectionnant la bonne zone"
                Exit Sub
            Else
                f1.Cells(R.Row, "C") = f1.Cells(R.Row, "C") + 1
            End If
        Else
            f1.Cells(f1.[A10000].End(xlUp).Row + 1, "A") = Ref
            f1.Cells(f1.[A10000].End(xlUp).Row + 1, "B") = Empl
            f1.Cells(f1.[A10000].End(xlUp).Row + 1, "C") = 1
        End If
        Unload DEPOSE_COMPOSANT
        f1.Select
    End Sub
    DAns le module de l'userform PRISE_COMPOSANT
    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
    Private Sub ComboBox1_Change()
        If ComboBox1.Text <> "" Then
            Set f1 = Sheets("Etat")
            Ref = ComboBox1.Text
            Set f1 = Sheets("Etat")
            Set R = f1.Columns("A").Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not R Is Nothing Then
                TextBox1.Text = f1.Cells(R.Row, "B")
                TextBox2.Text = f1.Cells(R.Row, "C")
            End If
        End If
    End Sub
     
    Private Sub CommandButton1_Click()
        Set f1 = Sheets("Etat")
        If ComboBox1.Text <> "" Then
            Ref = ComboBox1.Text
            Set f1 = Sheets("Etat")
            Set R = f1.Columns("A").Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not R Is Nothing Then
                f1.Cells(R.Row, "C") = TextBox2.Text - 1
            End If
        End If
        Unload PRISE_COMPOSANT
        f1.Select
    End Sub
    Le fichier
    Pièce jointe 504412

    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Responsable amélioration continue
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable amélioration continue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut
    Bonjour,

    Tout d'abord merci du temps que vous m'accordez pour tenter de répondre à mon besoin.
    La macro fonctionne très correctement cependant elle est légèrement différente par rapport à ma problématique de départ.

    Vous avez un userform dépose de composants :
    - Celui-ci est fait pour renseigner la référence et la zone ou il veut la déposer lorsqu'il valide, il donne l'information qu'il faut mettre à jour l'onglet "état" en y ajoutant "+1" en quantité dans la ligne où il y a la zone préscrite au préalable pour la référence X.
    (Ex : L'utilisateur renseigne référence : 52348 et zone 2, valide = Renseigner dans onglet état comme quoi nous avons +1 de quantité pour la référence 52348, zone 2)
    Attention : Il n'y a pas une zone dédié à une référence. L'opérateur peut déposer sa référence dans les 5 zones, si la ligne n'est pas encore crée dans l'onglet "état" elle doit alors automatiquement se créer.

    Vous avez un userform prise de composants :
    - Celui-ci est fait pour renseigner la référence recherchée, lorsque l'utilisateur valide, un deuxième formulaire doit alors se mettre en place en indiquant toutes les zones ou peuvent apparaitre la référence.

    (Ex : 1er formulaire)


    Référence 52348


    Valider


    (Ex : 2ème formulaire. La référence 52348 est disponible dans : (lorsque quantitée n'est pas égale à 0 pour référence X)

    - Zone 1 BOUTON
    - Zone 2 BOUTON
    - Zone 3 BOUTON (Dire juste les zones ou le stock pour cette référence n'est pas égal à 0, ne donnons pas les quantités)
    - Zone 4 BOUTON
    - Zone 5 BOUTON

    L'utilisateur a la possibilité de renseigner dans quel zone il ira chercher sa référence vaec "BOUTON" (voir schéma)
    ( Ex : L'utilisateur appuie sur le bouton zone 2 pour la référence 52348 puis valide = Renseigner dans onglet état comme quoi nous avons -1 de quantité pour la référence 52348, zone 2)


    L'idée avec celà est que l'utilisateur renseigne de facon constante l'état des stocks
    J'espère que j'ai pu être plus claire.

    Cordialement.

    Maxime

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Pour le module DEPOSE_COMPOSANT
    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
    Private Sub CommandButton1_Click()
        Ref = ComboBox1.Text
        Empl = ComboBox2.Text
        Set f1 = Sheets("Etat")
        With f1.Columns("A")
            Set r = .Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not r Is Nothing Then
                Posr = r.Address
                Do
                    If f1.Cells(r.Row, "B") = Empl Then
                        f1.Cells(r.Row, "C") = f1.Cells(r.Row, "C") + 1
                        Unload DEPOSE_COMPOSANT
                        f1.Select
                        Exit Sub
                    End If
                    Set r = .FindNext(r)
                Loop While Not r Is Nothing And r.Address <> Posr
            End If
        End With
        f1.Cells(f1.[A10000].End(xlUp).Row + 1, "A") = Ref
        f1.Cells(f1.[A10000].End(xlUp).Row, "B") = Empl
        f1.Cells(f1.[A10000].End(xlUp).Row, "C") = 1
        Unload DEPOSE_COMPOSANT
        f1.Select
    End Sub
    Pour Le module de PRISE_COMPOSANT
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub ComboBox1_Change()
        If ComboBox1.Text <> "" Then
            Set f1 = Sheets("Etat")
            Ref = ComboBox1.Text
            Set f1 = Sheets("Etat")
            Set d1 = CreateObject("Scripting.Dictionary")
            Set d2 = CreateObject("Scripting.Dictionary")
            DerLig = f1.[A10000].End(xlUp).Row
            For Each c In f1.Range("A2.A" & DerLig)
                If c = Ref * 1 Then
                    d1.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
                    d2.Add c.Offset(0, 2).Value, c.Offset(0, 2).Value
                End If
            Next c
            ListBox1.List = Application.Transpose(d1.keys)
            ListBox2.List = Application.Transpose(d2.keys)
        End If
    End Sub
     
    Private Sub CommandButton1_Click()
        Set f1 = Sheets("Etat")
        Ref = ComboBox1.Text
        DerLig = f1.[A10000].End(xlUp).Row
        For i = 0 To ListBox1.ListCount - 1
          If ListBox1.Selected(i) = True Then
            Empl = ListBox1.List(ListBox1.ListIndex)
            Exit For
        End If
        Next
        With f1.Columns("A")
            Set r = .Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not r Is Nothing Then
                Posr = r.Address
                Do
                    If f1.Cells(r.Row, "B") = Empl And f1.Cells(r.Row, "C") > 0 Then
                        f1.Cells(r.Row, "C") = f1.Cells(r.Row, "C") - 1
                        Unload PRISE_COMPOSANT
                        f1.Select
                        Exit Sub
                    End If
                    Set r = .FindNext(r)
                Loop While Not r Is Nothing And r.Address <> Posr
            End If
        End With
        Unload PRISE_COMPOSANT
        f1.Select
    End Sub
    Pour la question 2, je n'ai pas compris l'histoire des boutons, alors j'ai fait un formulaire qui récupère les zones et les stocks en fonction de la référence choisie, il vous suffit de sélectionner une zone dans la liste proposée et de valider pour que le décompte se fasse.
    Faites des tests
    le fichier
    Pièce jointe 504516

    Cdlt

  5. #5
    Membre averti
    Homme Profil pro
    Responsable amélioration continue
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable amélioration continue
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut
    Bonjour,

    Tout d'abord, je tenais à te remercier pour ton aide.
    Ce que je demande est assez spécifique sachant que mon besoin a légèrement évolué (en rouge):

    DEPOSE :
    - La notion de dépose est comprise à mon sens. Cependant, nous aurons à bien différencier le code significatif et la gamme de fab dans ce formulaire.
    - Code significatif : dans un premier temps, c'est la référence initiale qui apparait dans le volet déroulant (données onglet "data") ce qui est déjà géré dans le formulaire.
    Le code significatif est composé de la référence initiale et de la gamme de fabrication qui est un numéro que l'on ajoute à la référence (10,20,30 jusqu'à 80. Nombre que de 10 en 10) et qui doit être renseigné par l'opérateur en plus de sa référence initiale. Ce numéro doit aussi s'afficher dans l'onglet état.

    Ex : FORMULAIRE DEPOSE N°1/1

    Référence : 52043 Gamme : 10

    (A retranscrire) 5204310 : Quantité +1 > Onglet "Etat"

    PRISE :
    - Le même formulaire pour renseigner à la fois la référence initiale (volet déroulant) et la gamme de fabrication (volet déroulant aussi)
    - Un nouveau formulaire qui renseigne les zones dans lesquels se trouvent la référence + gamme de fabrication

    Ex : Formulaire N°1/2

    Référence : 52043 Gamme : 10





    Ex : Formulaire N° 2/2

    Référence : 52043 Gamme : 10

    Emplacement :

    Zone 1 (Trouver un moyen de choisir la zone dans laquelle pouvoir faire -1)
    Zone 2
    Zone 3


    [PS : J'ai mis à jour le formulaire du fichier pour vous aider à comprendre]
    J'espère que celà a été claire.
    Merci d'avance.

    Cordialement.

    Maxime

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour

    En espérant avoir bien compris
    le fichier
    Pièce jointe 505199


    dans le module "DEPOSE_COMPOSANT"
    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
    Private Sub CommandButton1_Click()
        Ref = ComboBox1.Text
        Empl = ComboBox2.Text
        Gamme = ComboBox3.Text * 1
        Set f1 = Sheets("Etat")
        With f1.Columns("A")
            Set r = .Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not r Is Nothing Then
                Posr = r.Address
                Do
                    If f1.Cells(r.Row, "B") = Empl And f1.Cells(r.Row, "C") = Gamme Then
                        f1.Cells(r.Row, "D") = f1.Cells(r.Row, "D") + 1
                        Unload DEPOSE_COMPOSANT
                        f1.Select
                        Exit Sub
                    End If
                    Set r = .FindNext(r)
                Loop While Not r Is Nothing And r.Address <> Posr
            End If
        End With
        f1.Cells(f1.[A10000].End(xlUp).Row + 1, "A") = Ref
        f1.Cells(f1.[A10000].End(xlUp).Row, "B") = Empl
        f1.Cells(f1.[A10000].End(xlUp).Row, "C") = Gamme
        f1.Cells(f1.[A10000].End(xlUp).Row, "D") = 1
        Unload DEPOSE_COMPOSANT
        f1.Select
    End Sub
    dans le module "PRISE_COMPOSANT"
    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
    Private Sub CommandButton1_Click()
        Set f1 = Sheets("Etat")
        Ref = ComboBox1.Text
        DerLig = f1.[A10000].End(xlUp).Row
        For i = 0 To ListBox1.ListCount - 1
          If ListBox1.Selected(i) = True Then
            Empl = ListBox1.List(ListBox1.ListIndex)
            Exit For
        End If
        Next
        Gamme = ComboBox2.Text * 1
        With f1.Columns("A")
            Set r = .Find(Ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not r Is Nothing Then
                Posr = r.Address
                Do
                    If f1.Cells(r.Row, "B") = Empl And f1.Cells(r.Row, "C") = Gamme And f1.Cells(r.Row, "D") > 0 Then
                        f1.Cells(r.Row, "D") = f1.Cells(r.Row, "D") - 1
                        Unload PRISE_COMPOSANT
                        f1.Select
                        Exit Sub
                    End If
                    Set r = .FindNext(r)
                Loop While Not r Is Nothing And r.Address <> Posr
            End If
        End With
        Unload PRISE_COMPOSANT
        f1.Select
    End Sub
    Cdlt

Discussions similaires

  1. Réponses: 25
    Dernier message: 14/04/2015, 15h58
  2. Votre avis sur fichier Excel-Vba gestion des stocks
    Par mira3 dans le forum Conception
    Réponses: 5
    Dernier message: 10/04/2012, 11h01
  3. desactiver la prise en charge des fichiers l'autorun
    Par alassanediakite dans le forum Windows XP
    Réponses: 2
    Dernier message: 02/10/2008, 18h06
  4. Réponses: 1
    Dernier message: 22/04/2008, 18h49
  5. Réponses: 3
    Dernier message: 14/01/2008, 12h24

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