XL 2016 Remplir automatiquement un tableau d'après des valeurs

Cotriana

XLDnaute Nouveau
Bonjour,

Mon problème est simple mais pourtant la formule à trouver me paraît compliqué.

J'ai deux feuilles, composé de 3 types de données : la date de début planifiée, le numéro de l'OF et la référence à produire.

J'aimerai que pour chaque référence planifiée (ayant une date de début planifiée renseignée sur la première feuille) le tableau récupère le numéro de l'OF et l'associe à la bonne référence et à la bonne date sur la seconde feuille.

Il est possible que une référence soit planifiée plusieurs fois à des dates différentes ou à une date identique.

En espérant grandement que quelqu'un a une idée,

Je vous remercie.
 

Pièces jointes

  • Fichier pb.xlsx
    114 KB · Affichages: 7

Cotriana

XLDnaute Nouveau
Bonjour
Une proposition PowerQyery (intégré à Excel)

Actualiser par clic droit dans le tableau de résultat si la source évolue
Merci, la solution à l'air intérressante, mais je cherche à remplir spécialement le tableau est pas forcément à créer un autre. Le tableau à remplir permet au magasin de remplir leur tableau est de savoir ce qu'il faut sortir
 
Dernière édition:

chris

XLDnaute Barbatruc
RE à tous
Merci, la solution à l'air intérressante, mais je cherche à remplir spécialement le tableau est pas forcément à créer un autre. Le tableau à remplir permet au magasin de remplir leur tableau est de savoir ce qu'il faut sortir
Sauf que tu as plusieurs lignes et donc plusieurs OF par référence et date ce que ne prévoit pas ton tableau...

Et, comme indiqué par JHA :), il est important de normaliser les tableaux même pour des formules...
 

Cotriana

XLDnaute Nouveau
Bonjour, je relance ce forum suite à un problème que je n'arrive pas à résoudre.
Le problème est que j'ai automatisé tout le process entre les deux fichiers, l'un permet de saisir des dates de débuts en production, l'autre permet de communiquer ces dates au magasin à travers leur planning.

Cependant, avec ma macro, certains OF apparaissent mais pas tous alors je ne comprends pas.
 

Cotriana

XLDnaute Nouveau
Ci-dessous, l'extrait du fichier permettant aux gestionnaires de saisir les dates de débuts des OF.

1) Une fois les dates saisies (donc l'ordonnancement effectué), les gestionnaires doivent mettre à jour le planning du magasin pour qu'ils préparent les OF dont ils ont besoin.

2) La macro vient copier les colonnes OF-Réf-Date de début du premier fichier (synthèse OF) et les coller dans la feuille DATA_MNT du second fichier.

3) Ensuite, la macro vient déduire 7 jours à la date saisies (correspondant au délai de préparation par le magasin). Puis un TCD est créée permettant d'alimenter la feuille "Planning pour MN".

4) Ensuite un filtre est fait pour garder que les lignes non-vides, les copier, et les coller dans la feuille "Planning MNT" afin que le magasin récupère essentiellement les données utiles (donc les lignes non-vides)


PROBLEME: à l'étape 3, l'ensemble des données sont bien extraites du fichier des OF et bien renseignées dans le TCD, cependant, elle ne se mettent pas tous en place dans le tableau avec les formules matricielles.
(exemple: la référence 245310, ce n'est pas la seule.)

J'aimerai que le tableau "Planning pour MN" prennent TOUT en compte...

Je met également ci-dessous la macro réalisé mais je ne comprend pas pourquoi le tableau ne prend pas tout les OF

VB:
Sub PLANNING_MAGA()
'
' PLANNING_MAGA Macro
' Macro automatisant le planning du magasin

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.DisplayStatusBar = False

'Ouvrir le planning maga Flux 1&2, créer une feuille, coller les données, créer le TCD (RAJOUTER OUVERTURE DU FICHIER!!!)
    'Workbooks.Open Filename:= _
        "file:///I:\400_LTS\09_BI\070_IND\05_ChargeCapa\Fichiers annexes\Montage Neuf\Ordo\(NE_PAS_MODIFIER)_PLANNING_MNT_Flux 1&2.xlsm", UpdateLinks:=3
    
    
    Workbooks("(NE_PAS_MODIFIER)_PLANNING_MNT_Flux 1&2.xlsm").Activate
    Sheets("Data_MNT_1").Visible = True
    Sheets("Data_MNT_1").Activate
    
    Application.Calculation = xlCalculationAutomatic
    
    Cells.Select
    Selection.Delete Shift:=xlUp
    
    Range("A1").Select
    
'Copier les données Flux 1
    Windows("Fichier Synthèse OF - Flux 1.xlsm").Activate
    Sheets("Synthèse OF - Flux 1").Activate
    
    ActiveSheet.Range("$A$8:$AJ$10000").AutoFilter Field:=16, Criteria1:="<>#N/A"
    
    Range("D:D,J:J,P:P").Select
    Range("P1").Activate
    Selection.Copy
    
    Workbooks("(NE_PAS_MODIFIER)_PLANNING_MNT_Flux 1&2.xlsm").Worksheets("Data_MNT_1").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Rows("1:7").Select
    Range("A7").Activate
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Columns("B:B").Cut Destination:=Columns("D:D")
    Columns("A:A").Cut Destination:=Columns("E:E")
    
    Columns("A:B").Select
    Range("A1").Activate
    Selection.Delete Shift:=xlToLeft
    
    
'Création de la variable contenant le nombre de lignes
    Dim nb_lig_data As Long, nb_lig_planning As Long
    
    nb_lig_data = Range("B" & Rows.Count).End(xlUp).Row

'Déduire le délai de 7 jours ouvrés entre le besoin pour l'ilot et la date de début de préparation par le magasin
    Windows("(NE_PAS_MODIFIER)_PLANNING_MNT_Flux 1&2.xlsm").Activate
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("B2").Formula = "=IF(A2="""","""",WORKDAY(A2,-7))"
    
    Range("B2").AutoFill Destination:=Range("B2:B" & nb_lig_data)
    Range("B2:B" & nb_lig_data).Select
    
    
    
    Range("A1").Copy
    Range("B1").Select
    ActiveSheet.Paste
    
    Columns("B:B").Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False


    
    Columns("A:A").Delete Shift:=xlToLeft

    Columns("A:A").NumberFormat = "dd/mm/yyyy"
    
    
'Mettre à jour la date du prochain Lundi sur le Planning pour MN_1
    Windows("(NE_PAS_MODIFIER)_PLANNING_MNT_Flux 1&2.xlsm").Activate
    Sheets("Date Lundi S+1").Range("K2").Copy
    Sheets("Planning pour MN_1").Activate
    Range("D2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Data_MNT_1").Select
    Application.CutCopyMode = False
    
'Mettre sous forme de tableau
    Range("A7").Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$C$" & nb_lig_data), , xlYes).Name = _
        "Tableau1"
    Range("Tableau1[#All]").Select
    ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight9"
    Range("B7").Select
    ActiveSheet.ListObjects("Tableau1").Name = "bd"
    

    Range("A5").Select
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "bd_1", Version:=6).CreatePivotTable TableDestination:="Data_MNT_1!R5C6", _
        TableName:="Tableau croisé dynamique1", DefaultVersion:=6
    Sheets("Data_MNT_1").Select
    Cells(5, 6).Select
   With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Reference")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("OF")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Date début planifiée")
        .Orientation = xlRowField
        .Position = 3
    End With
    
    
'Mettre le TCD sous format tabulaire
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RowAxisLayout xlTabularRow
    
'Enlever les sous-totaux du TCD
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("OF"). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
        False, False)
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Reference"). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
        False, False)
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Date début planifiée").Subtotals = Array(False, False, False, False, False, False, _
        False, False, False, False, False, False)
        
'Enlever les lignes vides ou sans dates du TCD
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Date début planifiée")
        .PivotItems("").Visible = False
    End With

    
'Mise en place des formules dans le Planning pour MN_1 à partir du TCD
    Sheets("Planning pour MN_1").Select
    
    nb_lig_planning = Range("B" & Rows.Count).End(xlUp).Row
    
    Range("C3").Formula = _
        "=IFERROR(VLOOKUP($B3,bd_1[[#All],[Reference]],1,0),""X"")"
    Range("C3").Select
    Selection.AutoFill Destination:=Range("C3:C" & nb_lig_planning)
    Range("C3:C" & nb_lig_planning).Select
    
    
    Range("D3").FormulaArray = _
        "=IFERROR(INDEX(bd_1[[OF]:[OF]],SMALL(IF((bd_1[[Date début planifiée]:[Date début planifiée]]=R2C)*(bd_1[[Reference]:[Reference]]=RC2),ROW(R3C3:R164C3)-2),COUNTIF(R3C2:RC2,RC2))),"""")"
    Range("D3").AutoFill Destination:=Range("D3:D" & nb_lig_planning)
    Range("D3:D" & nb_lig_planning).Select
    Selection.AutoFill Destination:=Range("D3:M" & nb_lig_planning), Type:=xlFillDefault
    Range("D3:M" & nb_lig_planning).Select
    Range("B3").Select
    
    Sheets("Data_MNT_1").Visible = False

    
    'Supprimer les données dans le planning transmis au magasin
    Sheets("Planning MNT Flux 1").Select
    Cells.Delete Shift:=xlUp


    'Filter pour avoir que les lignes avec les préparations nécessaires
        Sheets("Planning pour MN_1").Activate
        ActiveSheet.Range("$A$2:$N$" & nb_lig_planning).AutoFilter Field:=14, Criteria1:="<>"

    'Copier les lignes nécessaires
            Sheets("Planning pour MN_1").Select
            Range("A2").Select
            Range(Selection, Selection.End(xlToRight)).Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
            
            'Coller dans l'autre feuille ACM pour avoir le strict minimum des données
            Sheets("Planning MNT Flux 1").Select
            Range("A2").Select
            ActiveSheet.Paste
            Columns("A:N").ColumnWidth = 18.5
            Columns("C:C").ColumnWidth = 0.1
            Range("A2").Select
    
    'Masquer colonne C pour éviter les doublons visuels et enlever les filtres
    Sheets("Planning pour MN_1").Select
    Columns("C:C").EntireColumn.Hidden = False
    
'Enregister et fermer planning pour MNT
Sheets("Date Lundi S+1").Range("K7") = Now
    'ThisWorkbook.Save
    'Application.Quit

'Mettre l'heure de la mise à jour
Windows("Fichier Synthèse OF - Flux 1.xlsm").Activate
Range("D8").Select

'Sheets("Tableau de bord Flux 1").Range("C30") = Now

'Sauvegarder
    'ThisWorkbook.Save
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.DisplayStatusBar = True
    
End Sub


Je vous remercie d'avance pour le temps que vous y consacrez
 

Pièces jointes

  • Fichier Synthèse OF - Flux 1.xlsm
    186.9 KB · Affichages: 9
  • (NE_PAS_MODIFIER)_PLANNING_MNT_Flux 1&2.zip
    716.1 KB · Affichages: 12

Discussions similaires

Réponses
11
Affichages
603
  • Question
Microsoft 365 Tableau
Réponses
24
Affichages
898
Réponses
9
Affichages
361

Statistiques des forums

Discussions
315 111
Messages
2 116 340
Membres
112 719
dernier inscrit
hajartouil