Copie de lignes sous condition

Bonjour,

J'ai un fichier de gestion de stock simple qui donne son état à un instant T dans le futur.

- Feuille STOCK : Etat de stock. Les valeurs des stocks tiennent comptent de la réservation du matériel jusqu'à 3 mois dans le futur

Deux règles de MFC sont présentes, surlignant

  • - Les articles en rupture en rouge
    - Les articles dont le stock est inférieur au stock minimal (et qui ne sont pas déjà identifiés en rupture) en orange

Les valeurs des colonnes "DÉSIGNATION" et "STOCK" sont entrées avec une RECHERCHEV à partir d'une autre feuille que je n'ai pas incluse dans ce fichier de travail (mais je donne cette information au cas où cela changerait quelque chose au code).

- Feuille DASHBOARD : Vu macro mettant en lumière :

  • - Les articles en rupture
    - Les articles dont le stock est inférieur au stock minimal défini et qui ne sont pas déjà identifiés en rupture

Dans un premier temps, je compte le nombre des articles de chaque catégorie avec des formules NB.SI et SOMMEPROD.

Je souhaiterais faire en sorte que lorsque je clique sur le bouton, la macro puisse copier/coller la désignation et la référence de chaque article identifié en rupture dans le tableau prévu à cet effet, et en faire de-même pour les articles dont le stock est inférieur au stock minimal.

J'espère avoir été le plus clair possible mais si vous avez besoin d'informations complémentaire, n'hésitez pas.

J'ai essayé de commencer par moi-même en m'inspirant d'une macro pour laquelle gmb m'a aidé hier, mais comme ça fait 2 jours que j'ai commencé le VBA, ça ne donne pas grand chose

Option Explicit

Dim tabloSto, fe As Worksheet
Dim tabloRup, tabloSmi
Dim iSto&, iRu&, iSmin&

Sub MAJ_Dashboard()

    Set fe = Sheets("STOCK")
    tabloSto = fe.Range("A1").CurrentRegion
    tabloRup = Range("B5").CurrentRegion
    tabloSmi = Range("E5").CurrentRegion

    For iSto = 2 To UBound(tabloSto, 1)
        For iRu = 5 To UBound(tabloRup, 1)
            If tabloSto(iSto, 4) <= 0 Then
                Range("B" & iSto) = fe.Range("B" & iRu)
            End If
        Next iRu
    Next iSto

End Sub

Ça copie bien un des articles en rupture, mais pas au bon endroit et autant de fois qu'il y a d'articles en rupture.

Comme je suis bloqué, j'en fais appel à la communauté

Merci d'avance

Bonjour,

avec des filtres avancés et une zone de critères en A5:A6 et E5:E6

Option Explicit

Sub MAJ_Dashboard()
    Sheets("STOCK").Range("Tableau1[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A5:A6"), CopyToRange:=Range("B8:C8"), Unique:=False
    Sheets("STOCK").Range("Tableau1[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("E5:E6"), CopyToRange:=Range("F8:G8"), Unique:=False
End Sub

Bonjour Steelson,

Rapide et efficace !

J'ai quelques questions, juste pour que je comprenne bien dans mon apprentissage :

  • Quelle est la différence entre ces deux méthodes ?


    Si j'ai bien compris, les deux font référence à un tableau entier ?
  • En quoi A5 est utile ? N'aurait-on pas pu définir le critère uniquement sur A6 ?
  • A quoi sert la clause Unique ?
    J'ai testé avec True aussi mais je ne vois pas de différence
  • Je ne comprends pas très bien à quel moment dans le code tu indiques qu'il faut copier les colonnes REF et DESIGNATION.
    Dans cet exemple, les colonnes à copier sont les deux premières du tableau, mais dans mon vrai fichier, elles ne sont pas au début du tableau et sont discontinues.
    J'ai adapté le fichier joint pour ressembler au max au fichier cible.
    Je vois que ça fonctionne encore avec ton code...du coup je ne comprends vraiment pas.
    Si on avait voulu copier des colonnes autres que REF et DESIGNATION, ou de rajouter la copie de la colonne STOCK par exemple, comment aurait-il fallu faire ?

Merci pour ton retour

  • Quelle est la différence entre ces deux méthodes ?


    Si j'ai bien compris, les deux font référence à un tableau entier ?

Aucune différence si ton tableau englobe bien A1. S'il est positionné en milieu de page il faudrait indiqué une case recouverte par le tableau.

  • En quoi A5 est utile ? N'aurait-on pas pu définir le critère uniquement sur A6 ?

Bonne question. Dans le cas de critère en "formule" comme ici, tu mets ce que tu veux comme blabla, mais si tu ne prends pas cette cellule cela ne fonctionne pas ! Fais l'essai.

  • A quoi sert la clause Unique ?
    J'ai testé avec True aussi mais je ne vois pas de différence

Je n'en sais trop rien ... j'ai fait la macro de base par apprentissage !

  • Je ne comprends pas très bien à quel moment dans le code tu indiques qu'il faut copier les colonnes REF et DESIGNATION.

Ce n'est pas indiqué dans le code. Le code sélectionne comme destination des cellules qui doivent comporter obligatoirement et de façon exacte les colonnes que l'on veut importer. Si tu veux ajouter STOCKS, tu ajoutes la colonne et tu l'indique dans la plage du code

CopyToRange:=Range("___depuis___:___jusque____")
  • Quelle est la différence entre ces deux méthodes ?


    Si j'ai bien compris, les deux font référence à un tableau entier ?

Aucune différence si ton tableau englobe bien A1. S'il est positionné en milieu de page il faudrait indiqué une case recouverte par le tableau.

D'accord, merci pour l'explication.

  • En quoi A5 est utile ? N'aurait-on pas pu définir le critère uniquement sur A6 ?

Bonne question. Dans le cas de critère en "formule" comme ici, tu mets ce que tu veux comme blabla, mais si tu ne prends pas cette cellule cela ne fonctionne pas ! Fais l'essai.

Exact, j'ai testé et c'est bien le comportement que tu me décris. Merci aussi pour l'explication

  • Je ne comprends pas très bien à quel moment dans le code tu indiques qu'il faut copier les colonnes REF et DESIGNATION.

Ce n'est pas indiqué dans le code. Le code sélectionne comme destination des cellules qui doivent comporter obligatoirement et de façon exacte les colonnes que l'on veut importer. Si tu veux ajouter STOCKS, tu ajoutes la colonne et tu l'indique dans la plage du code

CopyToRange:=Range("___depuis___:___jusque____")

Excellent ! C'est super pratique comme filtre, merci beaucoup pour ton aide

Rechercher des sujets similaires à "copie lignes condition"