Extarction de donné a partu d'une liste déroulante

Bonjour,
Je fais encore appel a vous car je doit continuer mon travail en incluant la composition de chaque commande. J’ai essayer avec la formule que vous m’avez donné précédemment mais cela ne marche pas.

cela me sauverais si vous pouvez me redonner un coup de main

merci d’avance

help.xlsx (11,7 Ko)

Re,

C’est pas compliqué en lisant un peu une macro avec ses explications, de la copier entièrement, de la coller dans la feuille qui reçoit les informations et de modifier le noms des feuilles

Option Explicit

Private Sub Worksheet_Activate() 'A l'activation de la feuille SEMAINE
  Dim derlg%
  With Sheets("données")
    .Columns("C:C").Clear 'J'efface la liste pour la validation des semaines
    derlg = Sheets("liste").Cells(Rows.Count, "A").End(xlUp).Row ' dernière cellule non vide de la colonne A Commande
    'Filtre sans doublons les N° de semaine de la feuille COMMANDE
    Sheets("liste").Range("A2:A" & derlg).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("C2"), Unique:=True
    derlg = .Cells(Rows.Count, "C").End(xlUp).Row 'dernière cellule non vide de la colonne C DONNEES
    'Effectue le tri ascendant
    .Range("C2:C" & derlg).Sort Key1:=.Range("C2"), Order1:=xlAscending
    'Nomme la plage
    .Range("C2:C" & derlg).Name = "Maliste"
  End With
  Sheets("Composition").Activate
  Sheets("Composition").Range("B1").Select
  With Selection.Validation 'Attribue à la liste de validation la plage pour les N° Semaine
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=Maliste"
  End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("B1")) Is Nothing Then 'Sur changement de la liste de validation en B1
    Application.EnableEvents = False
    'Déclaration des variables
    Dim Ws As Worksheet, Wd As Worksheet
    Dim i%, Dl%, Lig%
    'Attribution des variables
    Set Ws = Sheets("liste")
    Set Wd = Sheets("Composition")
    Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row ' dernière cellule non vide de la colonne A Commande
    Lig = Wd.Range("A" & Rows.Count).End(xlUp).Row + 1 'dernière cellule non vide de la colonne A Semaine
    Wd.Range("A4:H" & Lig).Clear 'Vide la feuille Semaine des anciennes données
    Lig = 4
    For i = 2 To Dl 'boucle sur les N° de semaine de la feuille COMMANDE
      If Ws.Cells(i, 1) = Wd.Range("B1") Then 'Si le N° correspond à la semaine voulue
        Ws.Activate
        Ws.Rows(i).Copy Wd.Rows(Lig) 'je copie la ligne
        Lig = Lig + 1 'j'ajoute 1 à la ligne de la feuille semaine
      End If
    Next i
  End If
  Application.EnableEvents = True
  Wd.Select
End Sub

HELP.xlsm (22,4 Ko)

ou simplement par la formule MATRICIELLE de MDO

=SI(LIGNES($4:4)<=NB.SI(liste!$A$2:$A$500;$B$1);INDEX(liste!A$2:A$500;PETITE.VALEUR(SI(liste!$A$2:$A$500=$B$1;LIGNE(INDIRECT("1:"&LIGNES(liste!$A$2:$A$500))));LIGNES($4:4)));"")

1 J'aime

Merci d’avoir pris le temps de m’aider.

Mais je n’arrive pas a faire une macro et quand je tape la formule cela me marque #REF, j’ai énormément de référence (ligne) et de catégorie (colonne) est ce pour ça ?

Re,
place un classeur qui correspond exactement au même nombre de colonnes et avec les bonnes désignations des onglets

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.