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
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
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 ?