XL 2013 [RESOLU] Copie Coller sur autre onglet si stock actuel < Stock alerte

Roger26

XLDnaute Nouveau
Bonjour,

Je suis nouveau ici. J'ai beau cherché dans différents forum mais rien que je puisse comprendre clairement pour faire une macro.

Je m'en remet à vous en espérant que quelqu'un comprenne mon besoin.

Je vous met en PJ un fichier avec ce que je souhaite transposer. Voila mon besoin.

Sur onglet 1, pour chaque ligne jusqu'à la dernière (il est possible que je rajoute d'autres lignes), si en colonne D Stock Actuel est inférieur à la colonne C Stock Alerte, alors il copie les informations de la ligne concernée (Donc information colonne A à D) et colle l'information sur l'onglet 3 (commande) et ajoute en même temps en colonne E la date d'aujourd'hui..

Je précise que les informations à copier coller sont seulement celles dont le stock actuel est inférieure à la colonne stock alerte et rien d'autres.

Par contre, une fois que les informations sont collées sur l'onglet 3, il ne faut pas qu'il copie colle à nouveau les informations si l'article et la référence sont les mêmes car le temps de commander et remettre le stock au dessus du stock d'alerte, il faut un certain temps.

Je vais par la suite ajouter une alerte par mail de la liste à commander dont je ne veux pas me retrouver avec plusieurs articles et références identiques. Normalement chaque référence est unique.

Pensez-vous que cela soit faisable ?

J'ai déjà réalisé une macro mais elle déconne complètement et bug le fichier.

Je vous remercie par avance de votre aide ^^

Roger
 

Pièces jointes

  • Alerte Commande.xlsm
    20.9 KB · Affichages: 16
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Bienvenu Roger26 (peut être de la drome)
Bon voila sans doute le plus attendu . . . .la macro!
Bruno
VB:
Sub Acommander()
'Dim ligne%, lig%, lg% 'si besoin de d?clarer
ligne = 2
With Feuil1
For lig = 2 To .[A65000].End(3).Row
If .Cells(lig, 4) < .Cells(lig, 3) Then 'si plus petit
  ref = .Cells(lig, 2)
    lg = Application.Match(ref, Feuil2.[B:B], 0) 'renvoie la ligne si pr?sent
   If Not IsNumeric(lg) Then 'si pas trouv? lg renvoie error
    Feuil2.Range("A" & ligne & ":D" & ligne).Value = _
    .Range("A" & lig & ":D" & lig).Value 'on copy
    Feuil2.Cells(ligne, 5) = Date
    ligne = ligne + 1
   End If
End If
Next
End With
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Oups!
En me relisant je m'aperçois que si des lignes restent en commande
elles peuvent être écrasées, ce qui ne va pas.
Dans cette macro on peut laisser les commandes non reçus sur n'importe quelle ligne
La macro en tiens compte et ne remplace pas.
Bruno
VB:
Sub Acommander()
'Dim ligne%, lig%, lg% 'si besoin de déclarer
ligne = IIf(Feuil2.[B2] = "", 2, Feuil2.[B1].End(xlDown).Row + 1)
With Feuil1
For lig = 2 To .[A65000].End(3).Row
If .Cells(lig, 4) < .Cells(lig, 3) Then 'si plus petit
    lg = Application.Match(.Cells(lig, 2), Feuil2.[B:B], 0) 'renvoie la ligne si présent
   If Not IsNumeric(lg) Then 'si pas trouvé lg renvoie error
    Feuil2.Range("A" & ligne & ":D" & ligne).Value = _
    .Range("A" & lig & ":D" & lig).Value 'on copy
    Feuil2.Cells(ligne, 5) = Date
    ligne = Feuil2.[B1].End(xlDown).Row + 1 'trouver ligne suivante
   End If
End If
Next
End With
End Sub
 

Discussions similaires

Réponses
15
Affichages
478
Réponses
9
Affichages
613