Consolidation et copie suivant critère

Bonjour à toutes et tous,

Je sollicite votre aide dans la réalisation d'une consolidation de données et copie suivant critère.

Dans le fichier joint, je souhaiterais si possible :

1) Pouvoir copier toutes les quantités de la colonne M (feuille "ENTREES") vers la colonne D (feuille "STOCK") pour les produits concernés.

Attention, il peut y avoir des doublons dans la colonne C (feuille "ENTREES") dont il faut tenir compte dans la comptabilisation.

2) Copier automatiquement dans la feuille (feuille "STOCK") les nouveaux produits de la feuille "ENTREES".

Voir explications détaillées dans le fichier.

Merci d'avance pour votre aide

10stock2.xlsm (26.49 Ko)

Bonsoir Osaka, le forum,

Pas tout compris.....

Un essai hasardeux....

Sub action()
 Dim i%, cherche As Range, lig%

 Application.ScreenUpdating = False

  With Sheets("ENTREES")
    i = 6
     Do While i <= .Range("C" & Rows.Count).End(xlUp).Row
    Set cherche = Sheets("STOCK").Range("A:A").Find(what:=.Range("C" & i), lookat:=xlWhole)
     If cherche Is Nothing Then
      Sheets("STOCK").Range("A" & Sheets("STOCK").Range("A" & Rows.Count).End(xlUp).Row + 1) = .Range("C" & i) '....produit
      Sheets("STOCK").Range("B" & Sheets("STOCK").Range("B" & Rows.Count).End(xlUp).Row + 1) = .Range("D" & i) '....description
      Sheets("STOCK").Range("C" & Sheets("STOCK").Range("C" & Rows.Count).End(xlUp).Row + 1) = .Range("L" & i) '....unité
      Sheets("STOCK").Range("D" & Sheets("STOCK").Range("D" & Rows.Count).End(xlUp).Row + 1) = .Range("M" & i) '....quantité actuelle
     ElseIf Not cherche Is Nothing Then
      lig = cherche.Row
      Sheets("STOCK").Range("D" & lig) = Sheets("STOCK").Range("D" & lig) + .Range("M" & i)
     End If
   i = i + 1
   Loop
  End With
End Sub
12stock2.xlsm (31.96 Ko)

Cordialement,

Merci pour ce retour rapide xorsankukai:)

Dans ta proposition, l'appui sur le bouton ajoute bien les Produits dans la feuille "STOCK" mais les quantités augmentent à chaque clic.

Désolé si je n'ai pas été assez clair dans mes explications.

Le but étant d'additionner par produit, toutes les quantités dans la feuille "ENTREES" et de reporter le total dans la feuille "STOCK" pour chaque produit.

La quantité par produit dans la feuille "STOCK" doit toujours être égale à la somme de toutes les quantités de ce même produit dans la feuille "ENTREES".

Exemple MAJ des quantités

Feuille ENTREESFeuille STOCK
Produit 1 -> Qté = 10

Produit 1 -> Quantité doit être égale à 10
Produit 1 -> Réception de 5 pièces dans la feuille ENTREES
Feuille ENTREES

Feuille STOCK
Produit 1 -> Qté = 10
Produit 1 -> Qté = 5

Produit 1 -> Quantité doit être égale à 15
Produit 1 -> Réception négative (annulation) de 3 pièces dans la feuille ENTREES
Feuille ENTREES

Feuille ENTREES
Produit 1 -> Quantité = 10
Produit 1 -> Quantité = 5
Produit 1 -> Quantité = -3

Produit 1 -> Quantité doit être égale à 12

Exemple ajout produit

Feuille ENTREES
Feuille STOCK
Feuille STOCK
Produit 2 -> Qté = 10

Produit 2 n'existe pas
Ajout du produit 2

Re,

Merci pour le retour,

Désolé je n'y connais rien en gestion de stock,

Si quantité STOCK = somme quantité ENTREES alors quantité STOCK
Si différent, quantité STOCK = quantité STOCK + somme quantité ENTREES ?

24stock2.xlsm (32.21 Ko)

Bonne soirée,

Re,

Dans ta proposition, certaines quantités s'additionnent systématiquement à chaque clic même si la quantité des entrées ne change pas .

J'ai adapté ta proposition et elle semble fonctionner.

Merci pour ton aide en tous cas

Sub test()

    Dim i%, derlig%
    Dim cherche As Range

    Application.ScreenUpdating = False

    With Sheets("ENTREES")
        i = 6
        Do While i <= .Range("C" & Rows.Count).End(xlUp).Row
            derlig = Sheets("STOCK").Range("A" & Rows.Count).End(xlUp).Row
            Set cherche = Sheets("STOCK").Range("A:A").Find(what:=.Range("C" & i), lookat:=xlWhole)
            If cherche Is Nothing Then ' si Produit n'existe pas
                Sheets("STOCK").Range("A" & derlig + 1) = .Range("C" & i)        ' Produit
                Sheets("STOCK").Range("B" & derlig + 1) = .Range("D" & i)        ' Description
                Sheets("STOCK").Range("C" & derlig + 1) = UCase(.Range("L" & i)) ' Unité
                Sheets("STOCK").Range("D" & derlig + 1) = .Range("M" & i)        ' Quantité
            Else ' si Produit existe
                Sheets("STOCK").Range("D" & cherche.Row) = Application.WorksheetFunction.SumIf(.Range("C6:C" & .Range("C" & Rows.Count).End(xlUp).Row), .Range("C" & i), .Range("M6:M" & .Range("C" & Rows.Count).End(xlUp).Row))
            End If
            i = i + 1
        Loop
    End With

    Set cherche = Nothing

End Sub

Bonjour,

J'ai adapté ta proposition et elle semble fonctionner.

Bien joué !

Effectivement, maintenant je comprends mieux ....

Bonne continuation,

Rechercher des sujets similaires à "consolidation copie suivant critere"