none
Transcrire la méthode Excel.Worksheet.Sort de VBA à C# RRS feed

  • Question

  • Bonjour, dans un projet wpf je souhaite trier une feuille de calcul Excel par la colonne 5.

    En VBA j'ai ce code qui fonctionne parfaitement :

        ActiveWorkbook.Worksheets("STOCKS").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("STOCKS").Sort.SortFields.Add Key:=Range("E2:E3326" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("STOCKS").Sort
            .SetRange Range("A1:W3326")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("T3").Select
        ActiveSheet.Range("$A$1:$U$3326").AutoFilter Field:=20, Criteria1:="="
    End Sub

    Quand je tente de l'adapter en C#, il ne fonctionne pas et ne reconnais pas "SetRange"

     Impossible d'assigner à 'SetRange', car il s'agit d'un 'groupe de méthodes' 

     XlApp.Visible = true;
                    oSheetStock.Sort.SortFields.Clear();
                    oSheetStock.Sort.SortFields.Add(Key:oSheetStock.Columns[5], Order: Excel.XlSortOrder.xlAscending,SortOn:Excel.XlSortOn.xlSortOnValues,
                        DataOption: Excel.XlSortDataOption.xlSortNormal);
                    var _with1 = oSheetStock.Sort;
                    _with1.SetRange = oSheetStock.Range["A1:W3326"];
                    _with1.Header = Excel.XlYesNoGuess.xlYes;
                    _with1.MatchCase = false;
                    _with1.Orientation = Excel.XlSortOrientation.xlSortColumns;
                    _with1.SortMethod = Excel.XlSortMethod.xlPinYin;


    JF Collombet ® CreateSpecificCulture

    samedi 15 juillet 2017 04:29

Réponses

  • J'ai trouvé, si ca peut aider quelqu'un d'autre voici le code :

      oSheetStock.Sort.SortFields.Clear();
                    var AllRanges = oSheetStock.UsedRange;
                    Excel.Range FilterRange = oSheetStock.Columns[5];
                    AllRanges.Sort(FilterRange, Order1: Excel.XlSortOrder.xlAscending, Header: Excel.XlYesNoGuess.xlGuess, Orientation: Excel.XlSortOrientation.xlSortColumns,
                        SortMethod: Excel.XlSortMethod.xlPinYin, DataOption1: Excel.XlSortDataOption.xlSortNormal);

     

    JF Collombet ® CreateSpecificCulture

    samedi 15 juillet 2017 05:39

Toutes les réponses

  • J'ai trouvé un bout de code qui fonctionne à ceci près qu'il inclus la 1ere ligne de ma feuille qui contient les en-têtes de colonnes dans le tri.

      oSheetStock.Sort.SortFields.Clear();
                    var AllRanges = oSheetStock.UsedRange;
                    AllRanges.Sort(AllRanges.Columns[5], Excel.XlSortOrder.xlAscending);


    JF Collombet ® CreateSpecificCulture

    samedi 15 juillet 2017 05:19
  • J'ai trouvé, si ca peut aider quelqu'un d'autre voici le code :

      oSheetStock.Sort.SortFields.Clear();
                    var AllRanges = oSheetStock.UsedRange;
                    Excel.Range FilterRange = oSheetStock.Columns[5];
                    AllRanges.Sort(FilterRange, Order1: Excel.XlSortOrder.xlAscending, Header: Excel.XlYesNoGuess.xlGuess, Orientation: Excel.XlSortOrientation.xlSortColumns,
                        SortMethod: Excel.XlSortMethod.xlPinYin, DataOption1: Excel.XlSortDataOption.xlSortNormal);

     

    JF Collombet ® CreateSpecificCulture

    samedi 15 juillet 2017 05:39