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 :

Mise à jour de stock - Recherche et boucle par macro [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Gérant de commerce
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Gérant de commerce
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Par défaut Mise à jour de stock - Recherche et boucle par macro
    Bonjour à tous!
    Je souhaite gérer simplement et automatiquement mon stock d’articles par une macro à l’enregistrement de la commande.
    Lorsque un article est vendu (qté différente de 0 en feuille « variables »), la macro prends la référence de l’item associée, recherche dans la feuille « Barcode » le code du produit correspondant et ajoute la qté vendue dans la cellule correspondante.
    Je ne maitrise pas assez VBA pour faire la recherche et les boucles.
    Merci pour votre aide!
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Quelque chose comme ceci ?
    À mettre dans le code de la feuille Variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Recherche As Range
     
        If Target.Column = 23 And Target.Value > 0 Then
            Set Recherche = Sheets("Barcode").Columns("A").Find(Range("U" & Target.Row), LookIn:=xlValues, LookAt:=xlWhole)
            If Not Recherche Is Nothing Then
                Sheets("Barcode").Range("G" & Recherche.Row) = Sheets("Barcode").Range("G" & Recherche.Row) + Target.Value
            End If
        End If
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Gérant de commerce
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Gérant de commerce
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Par défaut
    Merci parmi! ça marche super.

    Par contre, dans mon programme réel, les quantités vendues contenues dans le tableau "Variables" sont affichées au cours de la réalisation d'une macro.
    Ce qui fait que ça bug puisque le worksheetchange ne peut pas se lancer en même temps que la macro déjà en cours...

    Y aurait-il un moyen de retarder l'action du worksheetchange? J'ai fait plusieurs tests en décalant la mise à jour des quantité vers la fin de la macro mais je me heurte toujours à ce problème.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Si tes quantités sont inscrites par une macro, crée une nouvelle macro avec ce que je t'ai donné et appelle-la quand tu inscris une valeur.
    Le paramètre Target As Range pourrait être changé par Cellule As Range si c'est plus "parlant" pour toi et tu l'appelles en passant la cellule que tu viens de modifier.

    Ce n'est peut-être pas très clair comme ça, mais si tu mets le bout de code que tu utilises pour modifier les cellules de "Variables", ce sera plus simple à expliquer...

  5. #5
    Membre habitué
    Homme Profil pro
    Gérant de commerce
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Gérant de commerce
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Par défaut
    Je comprends, mais je ne t’ai pas tout dit.

    En fait ma macro principale enregistre la vente et permet d’imprimer un ticket de vente pour le client.
    C’est pourquoi pour gagner du temps, ma macro principale stocke les informations de la vente pour une mise à jour ultérieure des stocks (car les informations de la vente seront effacées quelques secondes plus tard pour laisser la place à un formulaire de vente vierge).

    Ainsi la plage de cellules dans la feuille variable est une mémoire des informations de la vente. En fait ce n’est pas cellule par cellule que le tableau de la feuille variable change mais c’est le résultat d’un copier coller de toute la plage.

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Stocker les informations pour mise à jour ultérieure des stocks
        Sheets("Variables").Activate
        Range("J3:L10").Select
        Selection.Copy
        Range("U3:W10").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Ce que je souhaite c’est appeler ta macro à la fin de ma macro principale pour mettre à jour les stocks :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Mise à jour des stocks
    Call Miseajourstocks
    Et là ta bien aimée macro rentre en jeu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Miseajourstocks(Cellule As Range)
        Dim Recherche As Range
         If Cellule.Column = 23 And Cellule.Value > 0 Then
            Set Recherche = Sheets("Barcode").Columns("D").Find(Range("U" & Cellule.Row), LookIn:=xlValues, LookAt:=xlWhole)
            If Not Recherche Is Nothing Then
                Sheets("Barcode").Range("G" & Recherche.Row) = Sheets("Barcode").Range("G" & Recherche.Row) + Cellule.Value
            End If
        End If
    End sub
    J'ai changé les lettres des colonnes. dsl

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Essaie ceci
    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
    Sub TaMacro()
        'Stocker les informations pour mise à jour ultérieure des stocks
        Sheets("Variables").Activate
        Range("J3:L10").Copy
        Range("U3:W10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     
        ' Ce que je souhaite c’est appeler ta macro à la fin de ma macro principale pour mettre à jour les stocks :
        '----------------------------------------------
        'Mise à jour des stocks
     
        'Je passe la colonne à vérifier en paramètre
        Call Miseajourstocks(Range("W3:W10"))
    End Sub
     
    '-----------------------------------------
    'Et là ta bien aimée macro rentre en jeu:
    '-------------------------------------------------------
     
    Sub Miseajourstocks(Plage As Range)
        Dim Cellule As Range
        Dim Recherche As Range
     
        For Each Cellule In Plage
            If Cellule.Value > 0 Then  'plus besoin de vérifier la colonne puisqu'elle est passée en paramètre
                Set Recherche = Sheets("Barcode").Columns("D").Find(Range("U" & Cellule.Row), LookIn:=xlValues, LookAt:=xlWhole)
                If Not Recherche Is Nothing Then
                    Sheets("Barcode").Range("G" & Recherche.Row) = Sheets("Barcode").Range("G" & Recherche.Row) + Cellule.Value
                End If
            End If
        Next
    End Sub
    PS: quand tu mets du code, utilise le bouton # en haut du message pour encadrer celui-ci et le rendre plus lisible.
    Et utilise l'indentation...

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

Discussions similaires

  1. Mise à jour du Cours "Développons en Java" par Jean-Michel Doudoux
    Par Mickael Baron dans le forum Général Java
    Réponses: 78
    Dernier message: 20/08/2020, 12h57
  2. [Mise à jour bloquée] problème de maj: boucle perpétuelle
    Par simipi dans le forum Windows Vista
    Réponses: 7
    Dernier message: 08/10/2009, 14h38
  3. Opinion sur la mise à jour du stock en reseau
    Par kivoch dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/10/2007, 12h58
  4. [Prototype] Mise à jour de la page client directement par le serveur
    Par alfreedd dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 27/03/2007, 14h17
  5. Réponses: 3
    Dernier message: 18/09/2006, 18h30

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