none
Problème de récupération de données excel RRS feed

  • Discussion générale

  • Bonjour à toutes et à tous,
     
    Ayant un problème depuis quelque temps, je me résout à demander votre aide.
    Mon objectif est de créer un form dynamique sous visual basic 2010.
    Pour cela, j'utilise un fichier excel auquel j'applique un filtre.
    Seulement, j'ai un problème pour récupérer les valeurs de excel pour les afficher dans une combobox sur mon formulaire. Celle-ci affiche seulement 'True'.
    J'ai trouvé des solutions en language vba mais je n'arrive pas à trouver un language vb 2010 qui marche.
    Voici mon code:
     
    Imports Microsoft.Office.Interop.Excel
     
    Public Class Form1
        Public MonXl As Application
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim MonXl As Object
            MonXl = CreateObject("Excel.Application" )
            'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
            MonXl.Visible = False
            'Ouverture d'un Classeur Existant
            MonXl.Workbooks.Open(FileName:="C:\base de données V2 fr excel.xls" )
            'sélection d'une feuille du classeur en cours
            MonXl.Sheets(1).Select() 'selectionne la premiere feuille du classeur
            Dim Liste As String
     
            If ComboBox1.Text = "monovalent" Then
                MonXl.Range("B2:B14" ).Select()
                MonXl.Selection.AutoFilter()
                MonXl.Selection.AutoFilter(Field:=1, Criteria1:="=*s" )
     
     
            ElseIf ComboBox1.Text = "bivalent" Then
                MonXl.Range("B2:B14" ).Select()
                MonXl.Selection.AutoFilter()
                MonXl.Selection.AutoFilter(Field:=1, Criteria1:="=*sc*" )
     
            ElseIf ComboBox1.Text = "electrique" Then
                MonXl.Range("B2:B14" ).Select()
                MonXl.Selection.AutoFilter()
                MonXl.Selection.AutoFilter(Field:=1, Criteria1:="=*se*" )
     
            Else : MsgBox("veuillez selectionnez un type d'appoint" )
     
     
            End If
            Liste = MonXl.Sheets(1).Range("B2:B14" ).Select()
            ComboBox2.Text = Liste
     
        End Sub
     
         
     
    End Class
     
     
    En espérant que vous puissiez m'aider, merci de votre temps.

    • Type modifié Ciprian Duduiala mardi 10 mai 2011 06:38 pas de réponse de l'utilisateur qui a lancé la question
    mardi 3 mai 2011 14:09

Toutes les réponses

  • Bonjour,

    C'est normal vous demandez que a faire la sélection et vu que la sélection est faite cela vous retourne true
    il faut trouvé comment faire pour qu'il retourne un tableau de correspondance et la je sais pas trop comment faire sur l'instant ... le mieux serait d'aller demander aux expert d'excel dans leurs forum

    la question qui faut leurs pauser sera je pense : comment faire pour récupérer que les valeurs qui son afficher par le filtre dans un popup

    et a partir de la ça sera facile a refaire dans Visual Basic

     

    A bientôt


    Cordialement,
    Xavier
    Alias Troxsa My M@iL
    mardi 3 mai 2011 21:17
    Auteur de réponse
  • Bonjour, Papestar,

    Avez-vous réussi à résoudre votre problème ou vous avez encore besoin d’aide ?

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 9 mai 2011 07:35
  • Oui, j'ai en effet trouver la solution à mon problème. La partie du code ci-dessous me permet donc de recupérer les valeurs des cellules que je souhaite. Mon objectif etait d'appliquer un filtre sur une liste de systèmes. Chaque système ayant des caractéristiques communes ou non. Ainsi, en fonction d'une ligne, j'applique un filtre selon la valeur de la colonne A, et cela affiche le nom du système situé en colonne B. J'espère avoir été assez claire.

    Private

     

    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

    Button1.Click

     

    'Instance des variables

    exlapp = CreateObject(

    "excel.application"

    )

     

    'Ouverture d'un Classeur Existant

    exldoc = exlapp.Workbooks.Open(

    "C:\base de données V2 fr excel.xls"

    )

    sheet = exldoc.Worksheets(1)

     

    'sélection d'une feuille du classeur en cours

    exlapp.Sheets(1).Select()

    ListBox1.Items.Clear()

     

    'Instance retour de ligne

     

    Dim rChariot As

    String

    rChariot = Chr(13) & Chr(10)

     

    Dim i As

    Integer

     

    Dim value1 As

    String

     

    Dim value2 As

    String

     

    Dim value3 As

    String

     

    Dim ballon As

    String

     

    For i = 2 To

    14

     

    'Instance de la boucle

    value1 = exlapp.ActiveWorkbook.Worksheets(

    "Capteur + Ballon").Range("A"

    & i).Value

     

    'value1 = value1 & rChariot

    value2 = exlapp.ActiveWorkbook.Worksheets(

    "Capteur + Ballon").Range("C"

    & i).Value

     

    'value2 = value2 & rChariot

    value3 = exlapp.ActiveWorkbook.Worksheets(

    "Capteur + Ballon").Range("D"

    & i).Value

     

    'value3 = value3 & rChariot

    ballon = exlapp.ActiveWorkbook.Worksheets(

    "Capteur + Ballon").Range("B"

    & i).Value

    ballon = ballon & rChariot

     

    If ComboBox1.SelectedItem = value1 And ComboBox2.SelectedItem = value2 And ComboBox3.SelectedItem = value3

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    If ComboBox1.Text = "" And ComboBox2.SelectedItem = value2 And ComboBox3.SelectedItem = value3

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    If ComboBox1.SelectedItem = value1 And ComboBox2.Text = "" And ComboBox3.SelectedItem = value3

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    If ComboBox1.SelectedItem = value1 And ComboBox2.SelectedItem = value2 And ComboBox3.Text = ""

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    If ComboBox1.SelectedItem = value1 And ComboBox2.Text = "" And ComboBox3.Text = ""

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    If ComboBox1.Text = "" And ComboBox2.Text = "" And ComboBox3.SelectedItem = value3

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    If ComboBox1.Text = "" And ComboBox2.SelectedItem = value2 And ComboBox3.Text = ""

    Then

    ListBox1.Items.Add(ballon)

     

    End

    If

     

    Next

     

     

    exldoc.Close()

    exlapp.Quit()

    releaseObject(exlapp)

    releaseObject(exldoc)

    releaseObject(sheet)

     

     

     

     

     

    Cependant, comme vous pouvez le voir dans mon code ********** If ComboBox1.Text = "monovalent" Then **************, il faut que je remplisse moi-même le text dans la combobox et si le texte est le même dans la cellule de la colonne A, alors le filtre s'applique. Seulement, j'aimerai avoir un code évolutif. Si dans un an, je dois rajouter une caractéristique autre que 'monovalent', 'bivalent' ou 'electrique' , je souhaiterai juste à mettre à jour ma base de données sous excel et ne pas toucher au code. Est-il possible d'afficher dans un contrôle style combobox les caractéristiques d'une colonne excel sans afficher deux fois la même caractéristique?



    lundi 16 mai 2011 09:09