none
WPF Utilisation de AutoFilter pour filtrer des données d'un classeur Excel RRS feed

  • Question

  • Bonjour, dans un projet WPF j'utilise un Button qui exécute un code pour filtrer des données d'un classeur excel via la méthode AutoFilter

    J'ai un 2eme Button qui est sensé enlever les filtres sélectionnés et fermer Excel Via la méthode AutoFilterMode.

    Le problème c'est que tous les filtres disparaissent et lors de la réouverture de ce classeur par le 1er Button j'obtient une erreur me disant que la méthode Filter de la classe Range à échouée.

    Comment puis-je juste remettre les filtres à zéro avnt de fermer le classeur?

    Voici le code :

    Imports Excel = Microsoft.Office.Interop.Excel
    Imports System.IO
    
    Class MainWindow
    
        Dim XlApp As New Excel.Application
        Dim Xlbook As Excel.Workbook
        Dim Xlsheet As Excel.Worksheet
        Dim Classeur As String = " C:\Dropbox\2015 Produits CongelésVersionTest.xlsm"
    
    
        Private Sub Filtre_Click(sender As Object, e As RoutedEventArgs)
            If File.Exists(Classeur) = True Then
                Xlbook = XlApp.Workbooks.Open("C:\Dropbox\2015 Produits CongelésVersionTest.xlsm")
                XlApp.Visible = True
                Xlsheet = Xlbook.Sheets("POLY BLOCS")
                Xlsheet.Activate()
                With Xlsheet
                    .Range("E2:E6000").AutoFilter(Field:=5, Criteria1:=Produits.Text, [Operator]:=Excel.XlAutoFilterOperator.xlFilterValues)
                    .Range("P2:P6000").AutoFilter(Field:=16, Criteria1:="=", [Operator]:=Excel.XlAutoFilterOperator.xlFilterValues)
                End With
                ValueFiltre.Content = ("Filtre de recherche : " & Produits.Text)
            End If
    
        End Sub
    
        Private Sub EffFiltre_Click(sender As Object, e As RoutedEventArgs)
            If Xlsheet.AutoFilterMode Then
                Dim mess = MessageBox.Show("Would you like to " &
                    "turn off the filter?", "Example", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Cancel)
                If mess = MessageBoxResult.Yes Then
                    Xlsheet.AutoFilterMode = False
                Else
                    If mess = MessageBoxResult.No Then
                        Exit Sub
                    End If
                End If
            End If
            Xlbook.Save()
            Xlbook.Close()
            XlApp.Quit()
            Runtime.InteropServices.Marshal.ReleaseComObject(XlApp)
            ValueFiltre.Content = Nothing
        End Sub


    JF Collombet ® CreateSpecificCulture

    samedi 23 avril 2016 11:53

Réponses

  • J'ai trouvé la solution :

    je remplace

     Private Sub EffFiltre_Click(sender As Object, e As RoutedEventArgs)
            If Xlsheet.AutoFilterMode Then
                Dim mess = MessageBox.Show("Would you like to " &
                    "turn off the filter?", "Example", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Cancel)
                If mess = MessageBoxResult.Yes Then
                    Xlsheet.AutoFilterMode = False

    par :

     Private Sub EffFiltre_Click(sender As Object, e As RoutedEventArgs)
            If Xlsheet.AutoFilterMode Then
                Dim mess = MessageBox.Show("Would you like to " &
                    "turn off the filter?", "Example", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Cancel)
                If mess = MessageBoxResult.Yes Then
                    With Xlsheet
                        .Range("A1:Q6000").AutoFilter(Field:=5)
                        .Range("A1:Q6000").AutoFilter(Field:=16)
                    End With

    et cela enlève tous les filtres de la feuille.

    Voilà si cela peut aider d'autre personne c'est avec plaisir! 


    JF Collombet ® CreateSpecificCulture

    samedi 23 avril 2016 12:22