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 :

Placer la valeur dans la bonne case


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut Placer la valeur dans la bonne case
    Bonsoir,

    J'essaye de mettre en place un fichier excel qui gère un stock, pour cela je dois créer une macro qui va placer la quantité achetée dans la bonne case:

    dans une première feuille j'ai les achats:
    colonne A : quantité achetée
    colonne B : famille du produit
    colonne C : sous-famille du produit
    il y a 150 lignes d'achat au maximum les unes sous les autres et sans lignes vides ( si il y a 10 achats ceux-ci seront de la ligne 1 à 10.

    Dans la deuxième feuille j'ai un tableau qui gére le stock du produit:
    ligne 1 : les famille de produit
    ligne 2 : les sous-familles de produit
    à partir de la ligne 3 : les quantités achetées
    1 ligne d'achat = 1 ligne dans la feuille 2

    Pour résumer : dans la première feuille si A1 contient un achat , alors utiliser la famille et la sous-famille de cet achat et localiser dans le stock le bon duo, dès que c'est fait, inscrire la quantité achetée et passer à l'achat suivant.

    Jarault
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Voilà comment je verrais la chose
    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
    Sub stock()
    Dim i As Integer, j As Integer
    Dim x As Integer, y As Byte
    Dim Fam As String
     
    x = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    y = Sheets(2).Cells(1, Columns.Count).End(xlToLeft).Column
     
    For i = 1 To x
        If Sheets(1).Cells(i, 4) = "" Then
            Fam = Sheets(1).Cells(i, 2) & Sheets(1).Cells(i, 3)
                For j = 1 To y
                    If Sheets(2).Cells(1, j) & Sheets(2).Cells(2, j) = Fam Then
                        Sheets(2).Cells(65535, j).End(xlUp)(2) = Sheets(1).Cells(i, 1)
                        Sheets(1).Cells(i, 4) = "-"
                        Exit For
                    End If
                Next j
        End If
    Next i
     
    End Sub
    Dans cet exemple, j'ajoute un indice "-" dans la colonne D de la feuille Achats pour indiquer que cet achat a été ajouté dans la feuille Stocks, ce qui empêchera d'ajouter cet achat plusieurs fois.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut
    Merci Fring pour ta réponse, c'est exactement le type de réponse que j'attendais, par contre il y'a un petit souci (je vais commencer à chercher de mon coté) : le code ne change de ligne que s'il trouve une deuxième fois le meme produit, c'est à dire que s'il y a en achat 1 exemplaire de chaque produit tout sera destocké sur la même ligne or je souhaite avoir 1 achat par ligne. Merci encore de ton aide.

    Jarault

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Différentes solutions sont possibles, on peut par exemple également mettre un repère dans une colonne sur la feuille "Stocks", ce qui va permettre de vérifier facilement à chaque utilisation quelle ligne doit être utilisée.
    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
    Sub stock()
    Dim i As Integer, j As Integer
    Dim x As Integer, y As Byte
    Dim Fam As String, r As Integer
     
    x = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    y = Sheets(2).Cells(1, Columns.Count).End(xlToLeft).Column
    Sheets(2).Cells(3, y + 1) = "."
     
    For i = 1 To x
        If Sheets(1).Cells(i, 4) = "" Then
            Fam = Sheets(1).Cells(i, 2) & Sheets(1).Cells(i, 3)
                For j = 1 To y
                    If Sheets(2).Cells(1, j) & Sheets(2).Cells(2, j) = Fam Then
                        r = Sheets(2).Cells(65535, y + 1).End(xlUp).Row
                        Sheets(2).Cells(r + 1, y + 1) = "."
                        Sheets(2).Cells(r, j) = Sheets(1).Cells(i, 1)
                        Sheets(1).Cells(i, 4) = "."
                        Exit For
                    End If
                Next j
        End If
    Next i
     
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut
    J'ai en partie réussi à adapter le code:
    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
    Sub Destocker_Achats()
    Dim i As Integer, j As Integer
    Dim x As Integer
    Dim Fam As String
     
    x = Sheets("ACHATS").Cells(Rows.Count, 6).End(xlUp).Row 'compte le nombre de ligne d'achats
     
    For i = 2 To x
        If Sheets("ACHATS").Cells(i, 30) = "" Then ' vérifie si le produit à déjà été déstocké ds colonne AD
            Fam = Sheets("ACHATS").Cells(i, 7) & Sheets("ACHATS").Cells(i, 8) 'affecte produit et famille
                For j = 3 To 122 'affecte la plage de colonnes pour le destockage
                    If Sheets("DEPOTS").Cells(2, j) & Sheets("DEPOTS").Cells(3, j) = Fam Then ' vérifie que la colonne correspond au produit
                        Sheets("DEPOTS").Cells(i + 43, j) = Sheets("ACHATS").Cells(i, 6) 'remplit l'achat dans le stock
                        Sheets("ACHATS").Cells(i, 30) = "OK" 'inscrit une confirmation de destockage
                        Exit For
                    End If
                Next j
        End If
    Next i
     
    End Sub
    Il me reste encore à prendre en compte certaine règles de destockage.

    Existe-t-il un moyen de limiter la plage de i ?
    je pourrais utiliser : For i = 2 To 152
    mais à ce moment là il vérifierait à chaque fois toutes les lignes même s'il n'y a que 2 achats.

    Jarault

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par jarault Voir le message
    Existe-t-il un moyen de limiter la plage de i ?
    je pourrais utiliser : For i = 2 To 152
    mais à ce moment là il vérifierait à chaque fois toutes les lignes même s'il n'y a que 2 achats.
    Je ne comprend pas ta question, pourquoi vouloir limiter i ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut
    Citation Envoyé par fring Voir le message
    Je ne comprend pas ta question, pourquoi vouloir limiter i ?
    En fait c'est plus une mesure de précaution :
    Si jamais il y a un soucis avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = Sheets("ACHATS").Cells(Rows.Count, 6).End(xlUp).Row
    , la macro ne tournera pas en boucle
    D'autre part je n'ai réservé de la place que pour 150 lignes d'achat dans mon stock, si la macro descend trop bas cela risque d'effacer toutes mes formules et comme je suis le seul à utiliser VBA...(c'est un fichier partagé, nous sommes 11 à l'utiliser en même temps).

    Jarault

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Ok je comprend mieux, tu peux éventuellement insérer une ligne en début de boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 2 to x
    If i > 150 then exit sub
    '...le reste du code

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut
    Ca me semble parfais, j'essaye de suite
    Ca marche du tonnerre merci encore pour votre aide
    jarault

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer valeurs dans table selon case à cocher
    Par lucie18 dans le forum VBA Access
    Réponses: 14
    Dernier message: 13/12/2014, 21h37
  2. Stocker 2 valeurs dans une même case d'un Tableau
    Par oliviernouhi dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2010, 11h06
  3. Réponses: 12
    Dernier message: 15/04/2009, 16h11
  4. Placer une valeur dans un textbox
    Par ThunderBib dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/05/2006, 22h34
  5. Placer une valeur dans un textbox
    Par ThunderBib dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/05/2006, 20h59

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