Trier un TCD autre que par ordre Alphabétique ?

Bonjour le forum !

J'ai de nouveau un problème de tri !

Cette fois-ci, je souhaite effectuer un tri dans un TCD autre que par ordre alphabétique ...

Ci-dessous j'effectue un tri de ma base de donnée suivant un ordre précis : (la colonne FI/N? Fiche Intervention est trié suivant un ordre défini)

image

Ensuite je crée automatiquement un TCD mais la colonne de gauche du TCD est OT/Nom action et est triée par ordre alphabétique.

image

En effet, je souhaiterai trier cette colonne du TCD par ordre alphabétique mais aussi selon l'ordre défini dans ma base de donnée, c'est à dire par FI/N? Fiche Intervention.

Ci dessous mon fichier Excel simplifié :

10actions.zip (821.68 Ko)

Merci d'avance pour vos conseils, cordialement,

Bonjour

Il faut créer une liste personnalisée des items uniques de la source, classée dans l'ordre voulu : elle sera automatiquement utiliser pour le tri de tous tes TCD

Bonjour @78chris !

Merci pour votre retour.

Qu'entendez vous par là ? Désolé je ne suis pas encore très habile avec le language VBA

J'ai déjà une fonction liste personnalisée qui se crée automatiquement dans mon code à la place 5 :

Sub listeTri(FP As Worksheet)

FP.Activate

For i = 5 To 20 Step 1

    Application.DeleteCustomList (i)

Next i

    Application.AddCustomList listArray:=FP.Range(Cells(2, 1), Cells(2, 1).End(xlDown))

End Sub

Puis-je la réutiliser ?

Cordialement,

RE

Pas de code dans ton fichier ni de liste utilisable

Sachant que cette liste est attachée à ton PC, pas sûr de l'intérêt de la recréer par VBA...

De plus ce code détruit toutes les listes personnalisées donc si tu diffuses la classeur tu va mettre le souk sur les PC des utilisateurs...

Re,

Ci-dessous le fichier avec le code que j'utilise pour le tri.

Il faudrait que le tri soit identique pour le TCD ? J'ai cherché pas mal de temps mais je vois pas ...

Le problème est que ma liste personnalisée fait plus de 255 caractères et Excel ne veut pas la prendre en compte, j'avais déjà posté un sujet pour détourner cette limite avec le code présent dans le fichier.

Cordialement,

11actions.zip (836.06 Ko)

Re

Le nouveau classeur ne s'ouvre pas : Excel le signale comme vérolé

On aurait gagné du temps à rester sur le même fil ou en référençant le fil...

On t'as proposé une solution PowerQuery mais si tu n'en veux pas...

En plus ton TCD n'utilise ce champ qu'en filtre de page donc le filtre trié peut facilement être remplacé par un filtre de requête

Bonjour @78chris, le forum,

Je vais réessayé de le partager, bizarre

Le problème avec mon application c'est que mon fichier base de donnée est écrasé automatiquement toute les jours à minuit avant d’être ré-extrait d'une GMAO. C'est pourquoi il faut que je passe par un autre fichier avec VBA qui se mette à jour automatiquement en même temps. Ducoup PowerQuery ne convient pas, j'utilise également des invites de commandes pour fermer et ouvrir Excel automatiquement afin que tout se mette à jour à une heure donnée ...

Cordialement,

14actions.zip (836.06 Ko)

Bonjour

De 2 choses l'une :

  • ou bien le dernier fichier remplace les précédents et aucun problème pour PowerQuery à exploiter un fichier externe : si son nom change, il suffit de se référer au dossier
  • ou bien il faut compiler les n fichiers extraits et il suffit de les copier chaque jour dans un dossier

dans les 2 cas PowerQuery prend ce qu'il trouve dans le dossier et le traite : il suffit d'actualiser pour être à jour

Rien n'empêche d'actualiser par VBA selon le timing voulu

Re

J'ai essayé PowerQuery mais j'ai pas accroché du tout et je n'ai absolument rien compris

Ducoup étant assez têtu j'ai testé, testé et encore testé par VBA avec macro et tout ce qui va bien ... Et finalement hourra j'ai réussi à faire ce que je souhaité.

Merci quand même pour votre aide @78chris, quand j'aurais plus de temps devant moi je me remettrai à PowerQuery.

Ci-dessous mon code : (je pense qu'il peut être amélioré ?)

Public Sub ajoutTCD(N As String, SMX As Worksheet)

'Crée une nouvelle colonne et la met en forme -> N° semaine
SMX.Columns("J:J").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("J2", Cells(Rows.Count, "J").End(xlDown)).SpecialCells(xlCellTypeVisible).Select
    ActiveCell.FormulaR1C1 = "=ISOWEEKNUM(RC[-1])"
    Range(ActiveCell, Cells(Rows.Count, "J").End(xlDown)).FillDown

    Range("J1").Select
    ActiveCell.FormulaR1C1 = "OT/N°Sem"

    Columns("J:J").Select
    Selection.NumberFormat = "General"

'Crée une nouvelle colonne et la met en forme -> OT/Etat
SMX.Columns("H:H").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("H2", Cells(Rows.Count, "H").End(xlDown)).SpecialCells(xlCellTypeVisible).Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""Non realisee"",1,0)"
    Range(ActiveCell, Cells(Rows.Count, "H").End(xlDown)).FillDown

    Range("H1").Select
    ActiveCell.FormulaR1C1 = "OT/Etat"

    Columns("H:H").Select
    Selection.NumberFormat = "General"

'Crée une nouvelle feuille pour venir y ajouter un TCD
Workbooks(N).Sheets.Add After:=Sheets("SMX")
Workbooks(N).Sheets("Feuil2").Select
Workbooks(N).Sheets("Feuil2").Name = "TCD"
Workbooks(N).Sheets("TCD").Select
With Workbooks(N).Sheets("TCD").Tab
    .Color = 49407
    .TintAndShade = 0
End With

'Crée TCD
Workbooks(N).PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "SMX!R1C1:R65536C13", Version:=xlPivotTableVersion10).CreatePivotTable _
        TableDestination:="TCD!R3C1", TableName:="Tableau croisé dynamique 01", _
        DefaultVersion:=xlPivotTableVersion10

' Options TCD
    With Sheets("TCD").PivotTables("Tableau croisé dynamique 01")
        .ColumnGrand = True
        .HasAutoFormat = True
        .DisplayErrorString = False
        .DisplayNullString = True
        .EnableDrilldown = True
        .ErrorString = ""
        .MergeLabels = False
        .NullString = ""
        .PageFieldOrder = 2
        .PageFieldWrapCount = 0
        .PreserveFormatting = True
        .RowGrand = True
        .SaveData = True
        .PrintTitles = False
        .RepeatItemsOnEachPrintedPage = True
        .TotalsAnnotation = False
        .CompactRowIndent = 1
        .InGridDropZones = True
        .DisplayFieldCaptions = True
        .DisplayContextTooltips = True
        .ShowDrillIndicators = True
        .PrintDrillIndicators = False
        .SortUsingCustomLists = True
        .FieldListSortAscending = False
        .ShowValuesRow = True
        .RowAxisLayout xlTabularRow
    End With

    With Sheets("TCD").PivotTables("Tableau croisé dynamique 01")
        .ColumnGrand = False
        .RowGrand = False
        .ShowDrillIndicators = False
    End With

'Lignes

    With Sheets("TCD").PivotTables("Tableau croisé dynamique 01").PivotFields( _
        "FI/N? Fiche Intervention")
        .Orientation = xlRowField
        .Position = 1
    End With

    Sheets("TCD").PivotTables("Tableau croisé dynamique 01").PivotFields( _
        "FI/N? Fiche Intervention").Subtotals = Array(False, False, False, False, False, _
        False, False, False, False, False, False, False)

    Sheets("TCD").Range("$A$4").Sort Order1:=xlAscending, Type:=xlSortLabels, _
        OrderCustom:=6, Orientation:=xlTopToBottom
    With Sheets("TCD").PivotTables("Tableau croisé dynamique 01").PivotFields( _
        "FI/N? Fiche Intervention")
        .PivotItems("SMX-JOURNALIER").Visible = False
    End With

    With Sheets("TCD").PivotTables("Tableau croisé dynamique 01").PivotFields( _
        "OT/Nom action")
        .Orientation = xlRowField
        .Position = 2
    End With

'Colonnes
    With Sheets("TCD").PivotTables("Tableau croisé dynamique 01").PivotFields( _
        "OT/N°Sem")
        .Orientation = xlColumnField
        .Position = 1
    End With

'Contenu
    Sheets("TCD").PivotTables("Tableau croisé dynamique 01").AddDataField Sheets("TCD"). _
        PivotTables("Tableau croisé dynamique 01").PivotFields("OT/Etat"), _
        "Somme de OT/Etat", xlSum
    Sheets("TCD").Select

End Sub

Encore merci Cordialement,

Rechercher des sujets similaires à "trier tcd que ordre alphabetique"