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 :

soustraction entre deux feuilles Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    SJL MAGHREB
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : SJL MAGHREB
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut soustraction entre deux feuilles Excel
    Bonjour chers experts,
    Dans un fichier Excel j’ai deux feuille :
    - Première feuille nommée « saisie BL » contenant les colonnes : n° de lot, quantité,

    N° de LOT   Quantité sortie
    4456919      5
    4450664	    47
    4446646	    50
    4461261	    50
    - Deuxième feuille nommée « état de stock » contenant les colonnes : n° de lot, quantité, emplacement

    N° de Lot   Quantité   Emplacement
    4456919	    100        P161403
    4450664	    700        P190403
    4446646	     60        P190403
    4461261	     90        P191303
    4454472	    100        P161403
    4450664	    100        P190403
    4464320	    100        P190703
    4461261	    150        P190403
    4426452	    175        P160403
    4454462	    175        P161303
    4457042	    225        P191003
    4446648	    250        P181803
    4441739	    300        P180903
    Je voudrais que Excel cherche les numéros de lot de la feuille « saisie BL » dans les numéros de lot de la feuille « état de stock » et soustraie les quantités de la feuille « saisie BL » des quantités correspondantes de la feuille « état de stock » et mise les lignes modifiées en jaune.

    Contraintes :
    - Un même numéro de lot peut se trouver dans plusieurs lignes de la feuille « état de stock ».
    - La recherche dans la feuille « état de stock » doit débuter du haut vers le bas.
    - Si la quantité de la feuille « saisie BL » et supérieur de la quantité de la ligne trouvée Excel doit soustraire le reste de la ligne directement après vers le bas.
    J’espère être claire et compréhensible.
    Merci de m’assister et m’indiquer les bouts de fil de cette macro.
    Je compte sur votre habituelle collaboration.
    Merci d’avance.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une proposition en utilisant les variables tableaux
    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
    48
    49
    Sub Transfert()
    Dim N As Long, M As Long, i As Long, j As Long
    Dim BL As Variant, STK As Variant
     
    Application.ScreenUpdating = False
    With Worksheets("saisie BL")
        N = .Cells(.Rows.Count, "A").End(xlUp).Row
        BL = .Range("A2:B" & N).Value
     
        With Worksheets("état de stock")
            M = .Cells(.Rows.Count, "A").End(xlUp).Row
            STK = .Range("A2:C" & M).Value
     
            Stocker BL, STK
     
            .Range("A2:C" & M).Value = STK
        End With
        .Range("A2:B" & N).Value = BL
    End With
    End Sub
     
    Private Sub Stocker(Tb As Variant, Res As Variant)
    Dim N As Long, M As Long, i As Long, j As Long
     
    N = UBound(Tb, 1)
    M = UBound(Res, 1)
     
    Do
        i = i + 1
        If Tb(i, 2) > 0 Then
            For j = 1 To M
                If Res(j, 2) > 0 Then
                    If Tb(i, 1) = Res(j, 1) Then
                        If Res(j, 2) >= Tb(i, 2) Then
                            Res(j, 2) = Res(j, 2) - Tb(i, 2)
                            Tb(i, 2) = 0
                            Exit For
                        Else
                            Tb(i, 2) = Tb(i, 2) - Res(j, 2)
                            Res(j, 2) = 0
                            i = i - 1
                            Exit For
                        End If
                    End If
                End If
            Next j
        End If
    Loop While i < N
    End Sub

  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Sortir une référence du stock sans historiser cette sortie me semble être une méthode risquée. (Soustraction sans pouvoir faire de retour arrière)
    De plus comment être sur que ces références seront bien prise à cet emplacement !

    Bien évidemment, ce n'est qu'un point de vue

  4. #4
    Membre averti
    Homme Profil pro
    SJL MAGHREB
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : SJL MAGHREB
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    bonjour,
    je vous remercie pour votre collaboration
    le code marche bien, il ne reste que la partie de mise en jaune des cellules modifiées.
    comment puis je ajouter cette commande à mon code??
    merci d'avance

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code légèrement modifié (Ajout Ligne 34)

    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
    48
    49
    50
    Sub Transfert()
    Dim N As Long, M As Long
    Dim BL As Variant, STK As Variant
     
    Application.ScreenUpdating = False
    With Worksheets("saisie BL")
        N = .Cells(.Rows.Count, "A").End(xlUp).Row
        BL = .Range("A2:B" & N).Value
     
        With Worksheets("état de stock")
            M = .Cells(.Rows.Count, "A").End(xlUp).Row
            STK = .Range("A2:C" & M).Value
     
            Stocker BL, STK
     
            .Range("A2:C" & M).Value = STK
        End With
        .Range("A2:B" & N).Value = BL
    End With
    End Sub
     
    Private Sub Stocker(Tb As Variant, Res As Variant)
    Dim N As Long, M As Long, i As Long, j As Long
     
    N = UBound(Tb, 1)
    M = UBound(Res, 1)
     
    Do
        i = i + 1
        If Tb(i, 2) > 0 Then
            For j = 1 To M
                If Res(j, 2) > 0 Then
                    If Tb(i, 1) = Res(j, 1) Then
                        Worksheets("état de stock").Range("A" & j + 1 & ":C" & j + 1).Interior.ColorIndex = 6
                        If Res(j, 2) >= Tb(i, 2) Then
                            Res(j, 2) = Res(j, 2) - Tb(i, 2)
                            Tb(i, 2) = 0
                            Exit For
                        Else
                            Tb(i, 2) = Tb(i, 2) - Res(j, 2)
                            Res(j, 2) = 0
                            i = i - 1
                            Exit For
                        End If
                    End If
                End If
            Next j
        End If
    Loop While i < N
    End Sub

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

Discussions similaires

  1. Liaison entre deux feuilles excel
    Par lunedemiel90 dans le forum Excel
    Réponses: 2
    Dernier message: 26/06/2014, 11h51
  2. [XL-2007] communication entre deux feuilles excel
    Par coolmek dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/03/2014, 18h49
  3. [XL-2010] similarité des lignes entre deux feuilles excel
    Par demahom08 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/11/2013, 17h04
  4. liens entre deux feuille excel
    Par LUDOVIC49 dans le forum Excel
    Réponses: 2
    Dernier message: 06/02/2010, 11h30
  5. Update entre deux feuilles excel
    Par foxer98 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/07/2007, 12h25

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