Remplir des tableaux et graphiques en fonction d'une année dans une liste

Bonjour voici mon tableau de base ..

Copie de PILOTAGE (TEST 2 François).xlsm (595,8 Ko)

J’aimerais que dans l’onglet « INDICATEURS » les tableaux se remplissent tout seul en fonction de la date choisie ..

Exemple :

Je choisie l’année 2026 dans la cellule R1 et :

  • l’année 2026 se met automatiquement dans les cellule D3 - D25 - D26 - D67
  • l’année 2025 dans les cellules D4 - D27 - D28 - D68
    (si je choisis 2027 du coup c’est 2026 qui se met à la place de 2025)
    et les case dans mois de janvier à décembre se remplissenent en fonction de différents tableaux :

Pour CA c’est CAparMOIS
Pour petits outillages c’est OUTILSparMOIS
Pour les non Conformité c’est NCparMOIS

je ne sais pas si c’est clair … désolée :confused:

Je veux bien de l’aide aussi pour le tableau NC qui beug

C’est quoi, le problème, exactement ?

Pour le tableau des NC, on prend les données dans quel tableau ?

Daniel

Dans le L’onglet NC, on prendre les donnnées dans le Tableau_NC et on les mets dans le tableau_NC par mois en fonction du nombre de NC et le côut

Bonjour,

Quel est le problème ?

Oui pardon,
Bonjour Daniel et merci pour ton aide ..

Beh hier j’avais des 6 à la place des 0 dans la colonne « Nombre de NC » … ce matin pas de soucis … désolé ..

Actuellement, j’ai ça :

J’ai exécuté la macro NC. Ca ne change rien.

Daniel

Oui j’ai corrigé

Sub NC()

onglets = "N-C"
Sheets("N-C").Select


Range("O2", "P" & Range("O" & Rows.Count).End(xlUp).Row + 1).ClearContents
lignerecopie = 3
i = 3
Do While i < Range("G" & Rows.Count).End(xlUp).Row + 1
If Range("F" & i) <> "" Then
numéroligne = 0
On Error Resume Next
numéroligne = Columns("O:O").Find(What:=Range("G" & i), After:=Range("O1"), LookIn:=xlValues, LookAt:=xlWhole).Row
If numéroligne > 0 Then
Range("P" & numéroligne) = Range("P" & numéroligne) + Range("L" & i)
Else
Range("O" & lignerecopie).Value = Range("G" & i).Value
Range("P" & lignerecopie).Value = Range("L" & i).Value
lignerecopie = lignerecopie + 1
End If
End If
i = i + 1
Loop

derligne = Sheets("N-C").Range("O" & Rows.Count).End(xlUp).Row
Sheets("N-C").Sort.SortFields.Clear
Sheets("N-C").Range("O2:P" & derligne).Sort key1:=Sheets("N-C").Range("O2"), order1:=xlDescending, Header:=xlYes

End Sub


Teste :

PILOTAGE (TEST 2 François) 2026 02 24.xlsm (606,2 Ko)

Daniel

Daniel77, çà marche parfaitement … j’ai apporté mes petites modif mais merci bcp …

Bonjour,
question : comment je fais pour que dans SUM_ALL (macro IMPORT IMPORT_ALL_IN_ONE) les OF se classe par ordre décroissant mais pour chaque salarié .. (COLONNE A d’abord en ordre Croissant, puis Colonne B en ordre décroissant).

Bonjour,

J’ai exécuté le tri à la fin de la macro.
Pendant l’exécution, j’ai une série de messages de ce genre :

A la fin de la macro, le tableau est vide.

Sub IMPORT_ALL_IN_ONE()
     Dim WB, C, LO As ListObject, Tbl, Cheminsource, Fichier, Onglet, i, j, Lignes

     Tbl = Range("tableau30").Value2         'TS avec vos sources,cibles,repertoires

     Set LO = Range("TBL_SUM_ALL_IN_ONE").ListObject     'TS pour tous les salariés
     With LO
          .Parent.Unprotect
          .Range.AutoFilter
          If .ListRows.Count Then .DataBodyRange.Delete     'RAZ TS
          .ListRows.Add
     End With
     Application.ScreenUpdating = False

     For i = 1 To UBound(Tbl)                'boucler les salariés
          Application.StatusBar = Tbl(i, 1)
          If Tbl(i, 3) = "" Then MsgBox ("Veuillez indiquer le chemin du répertoire des fichiers sources en cellule C2 !!!"): Exit Sub
          Cheminsource = IIf(StrComp(Tbl(i, 3), "FICHIER", 1) = 0, ThisWorkbook.Path, Tbl(i, 3))     'on teste cela seulement pour le premier ?
          If Right(Cheminsource, 1) <> "\" Then Cheminsource = Cheminsource & "\"
          If Tbl(i, 1) <> "" Then            'source connu
               Fichier = Tbl(i, 1)           'nom du fichier
               Application.StatusBar = "opening " & Cheminsource & Fichier     'monter le progrès dans le statusbar
               On Error Resume Next
               Set WB = Nothing: Set WB = Workbooks.Open(Cheminsource & Fichier)     'ouvrir fichier
               On Error GoTo 0
               If WB Is Nothing Then         'ouverture erronée ?
                    subClosingPopUp 3, "le fichier " & Cheminsource & Fichier & " est introuvable", "Erreur !!!"
               Else
                    WB.Sheets("Recap TPS").Unprotect     'enlever protection de cette feuille dans le fichier du salarié
                    With WB.Sheets("Recap TPS").ListObjects(1).Range     'ce TS dans le fichier
                         Set c1 = .Columns(1).Find("*", After:=.Range("A1"), searchdirection:=xlPrevious)     'normallement inutile si le TS ne contient pas des lignes vides
                         Lignes = c1.Row - .Row     'nombre de listrows à copier
                         If Lignes > 0 Then
                              Set C = LO.ListRows.Add.Range.Resize(Lignes, 1)     'ajouter autant de nouvelles lignes au TS "ALL_IN_ONE"
                              C.Value = Tbl(i, 4) & ", " & Tbl(i, 5)     'le nom du salarié
                              For j = 1 To .Columns.Count     'boucler les colonnes du TS du salarié
                                   R = Application.IfError(Application.Match(.Cells(1, j).Value, LO.HeaderRowRange, 0), 0)     'rechercher même colonne dans "ALL_IN_ONE"
                                   If R = 0 Then
                                        MsgBox "erreur, colonne inconnue", vbCritical, .Cells(1, j).Value
                                   Else
                                        C.Offset(, R - 1).Value2 = .Cells(2, j).Resize(Lignes).Value2     'copier colonne du TS salarié au TS "ALL_IN_ONE"
                                   End If
                              Next
                         End If
                    End With
                    WB.Close SaveChanges:=False     'fermer fichier salarié
               End If
          End If
     Next
     Application.StatusBar = False

     With LO
          If WorksheetFunction.CountBlank(.ListColumns(2).DataBodyRange) > 0 Then     'y-a-t-il des lignes sans "OF", alors supprimer !
               subClosingPopUp 2, "supprimer les lignes sans OF", "Attention !!!"
               .Range.AutoFilter 2, ""
               Application.DisplayAlerts = False
               .DataBodyRange.SpecialCells(xlVisible).Delete
               Application.DisplayAlerts = True
               .Range.AutoFilter
          End If

          If .ListRows.Count > 1 Then
               .ListRows(2).Range.Copy
               .ListRows(1).Range.PasteSpecial xlPasteFormats
          End If
          .Range.AutoFilter
          .Range.EntireColumn.AutoFit
          Application.CutCopyMode = False
          ' .Parent.Protect AllowFiltering:=True 'ne plus protéger les feuilles !!!!
          Application.Goto .Parent.Cells(1)

     End With
     subClosingPopUp 4, "Importation des Données Salariés terminée", "Summop86"
    With Worksheets("SUM_ALL")
      .ListObjects("TBL_SUM_ALL_IN_ONE").Sort.SortFields.Clear
      .ListObjects("TBL_SUM_ALL_IN_ONE").Sort. _
        SortFields.Add2 Key:=Range("TBL_SUM_ALL_IN_ONE[Salarié]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      .ListObjects("TBL_SUM_ALL_IN_ONE").Sort. _
        SortFields.Add2 Key:=Range("TBL_SUM_ALL_IN_ONE[OF]"), SortOn:= _
        xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
      With ActiveWorkbook.Worksheets("SUM_ALL").ListObjects("TBL_SUM_ALL_IN_ONE").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
      End With
    End With
End Sub

Daniel

Mais oui … désolé …
Je l’avais indiqué dans le post précédent et j’ai omis de te le redire!!
Pour que la macro fonctionne il faut que dans le même répertoire tu ai des fichiers qui vont de SUM1 à SUM10 (tiré du fichier SUM Vierge) avec les noms de fichier comme indiqué dans le tableau30 qui se trouve dans l’onglet XXX.

La macro va chercher les infos dans le tableau Recap_TPS de ces fichiers pour ensuite les importer dans SUM_ALL :confused:

Quel post ? C’est la première fois que je travaille sur ce tableau ! Partage ces fichiers que je puisse tester.

Daniel

Il y a un 21J sur "Tableau structuré en VBA …

SUM Vierge.xlsm (213,0 Ko)

Je fais quoi avec ce fichier ?

Daniel

Voilà la fonctionnement de la macro .. mais sinon ce n’est pas grave …

Oui, mais comment tu passes du SUM VIERGE aux SUM1, SUM2 etc ?

Daniel

En le renommant et en saisissant des informations :

Copie de PILOTAGE (TEST 3 François).xlsm (645,6 Ko)

SUM1 (Raphaël).xlsm (412,8 Ko)
SUM2 (Jérémy).xlsm (399,9 Ko)
SUM3 (Pierre).xlsm (420,3 Ko)
SUM4 (François).xlsm (442,2 Ko)
SUM5 (Valentin).xlsm (384,9 Ko)
SUM6 (Yanis).xlsm (426,2 Ko)
SUM7.xlsm (99,1 Ko)
SUM8.xlsm (258,6 Ko)
SUM9.xlsm (258,5 Ko)
SUM10 (Atelier).xlsm (732,4 Ko)

Tu peux regarder pourquoi j’ai des valeurs qui se mettent en double quand j’importe les données via la macro IMPORT_ALL_IN_ONE ??? notamment sur SUM1

Est-ce que c’est normal que, sur SUM1, tu aies apparemment des doublons ?

Daniel

Bonjour Daniel,

Non justement pas du tout …
et j’ai un soucis quand j’enregistre en SUM1 il me demande si je veux supprimer la ligne alors qu’avant je n’avait pas çà …