IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Remplir un combobox avec des données excel


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut Remplir un combobox avec des données excel
    Bonjour, je suis débutant en programmation C#.
    Je voudrais remplir les items d'un combobox avec des données récupérées dans un fichier Excel.
    Pour le moment mon code est le suivant mais ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     //méthode permettant de sélectionner le fichier sur lequel on va réaliser le traitement
            private void buttonDataSource_Click(object sender, EventArgs e)// ce qu'il se passe quand on clique sur le bouton de recherche
            {
                string fichier;
                string connectionProvider;
                string requete;
     
                OpenFileDialog ofn = new OpenFileDialog ();// ouvrir une fenêtre de recherche et de sélection de fichier
                ofn.Filter = "Fichiers Excel (*.xls;*.xlsx)|*.xls;*.xlsx";// filtre permettant de choisir quel type de fichier on souhaite afficher
                ofn.Title = "Choix du fichier de données";// titre de la fenêtre
                while (true)
                    if (ofn.ShowDialog() == DialogResult.OK)// ce qu'il se passe quand l'utilisateur clique sur Ouvrir
                    {
                        textBoxDataSource.Enabled = true;// dévérouille la zone de texte
                        textBoxDataSource.Text = ofn.FileName;// récupère le chemin du fichier et l'inscrit dans la zone de texte
                        textBoxDataSource.Enabled = false;// revérouille la zone de texte
                        return;// ferme la fenêtre de recherche
                    }
                    else// ce qu'il se passe quand il fait autre chose
                    {
                        return;// ferme la fenêtre de recherche
                    }
     
                fichier = textBoxDataSource.Text;
                connectionProvider = "provider=Microsoft.Jet.OLEDB.4.0;data source=fichier;Extended Properties=Excel 8.0";
                requete = "select * from [Feuil1$]";
     
                DataSet ds;
                OleDbDataAdapter ThisCommand;
     
                ThisCommand = new OleDbDataAdapter(requete, new OleDbConnection(connectionProvider));
                ds = new DataSet();
                ThisCommand.Fill(ds);
                foreach (DataColumn c in ds.Tables[0].Columns)
                comboBoxY.Items.Add(c);
            }
    Ce code s'exécute lorsque je clique sur un bouton de recherche de fichier.
    La partie recherche du fichier fonctionne très bien mais c'est après que ça ne marche plus.
    Je vous met une image de mon interface en copie, peut-être que ça vous aidera.
    Images attachées Images attachées  

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    ça ne repond pas à ta question,
    mais juste une tite remarque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    textBoxDataSource.Enabled = true;// dévérouille la zone de texte
    textBoxDataSource.Text = ofn.FileName;// récupère le chemin du fichier et l'inscrit dans la zone de texte
    textBoxDataSource.Enabled = false;// revérouille la zone de texte
    je pense que tu n'as pas besoin de déverrouiller/reverrouillier ta textBox,
    le Enabled à false, la verrouille pour l'utilisateur,
    mais tu peux toujours la modifier par le code...

    voilà, ça pourra toujours d'aider...
    (d'avoir 2 lignes de code à taper en moins quand tu voudras modifier le contenu d'une textbox)

    bon courage pour la suite,
    moi, je ne m'y connais pas en récupération de données dans excel...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Merci pour ta remarque.
    J'avais déjà remarqué cette optimisation et en effet elle marche.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    ok!

    sinon, pour essayer de t'aider,
    quand tu dis :
    La partie recherche du fichier fonctionne très bien mais c'est après que ça ne marche plus.
    ça ne marche plus comment?
    - ça plante?
    - ça lance une exception? laquelle?
    - ça fait rien du tout?
    - ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Ca ne fait rien du tout, l'application se lance correctement, je peux sélectionner mon fichier mais après quand normalement je clique sur mon combobox, à l'intérieur il devrait y avoir les noms des colonnes de mon fichier excel sélectionné. Mais là rien.
    Visual Studio ne me génère aucune erreur et aucun avertissement.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    tu as essayé le pas à pas pour voir si ton DataSet contient bien les données de ta feuille excel?

    et puis ça m'étonne que visual accepte de mettre des DataColumn dans un combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach (DataColumn c in ds.Tables[0].Columns)
    comboBoxY.Items.Add(c);
    ...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    J'ai bien voulu essayer, mais je ne sais pas comment faire du pas à pas pour vérifier le contenu de mon dataset.

    Peux-tu m'expliquer comment faire.

    Pour l'histoire des Column dans le dataset, je n'en sais rien si ça marche, j'avais juste mis ça pour essayer.

    mais avant de faire tout ça, dans mon code j'ai rajouté une sorte de test pour voir si je pouvais bien ajouter des données dans mon combobox.
    J'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBoxY.Items.Add("Aucune");
    et ça ne marche pas, ça ne m'ajoute rien dans mon combobox.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    tu es donc aussi novice en visual, alors !

    Tu mets un point d'arrêt en cliquand dans la marge devant la lign où tu veux que ça s'arrête...
    tu lances,
    ça s'arrête puis tu avances avec F10/F11...

    tu peux voir les membres des objets en passant la souris dessus...

    j'espère que j'ai été claire...
    bon courage

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    En fait mon code qui concerne la connexion au fichier Excel ne s'exécute jamais.
    Une fois que ma fenêtre de recherche de fichier se ferme, il ne fait plus rien.
    Bon je fais une pause là et je m'y remttrais cette après-midi.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    En fait, je ne t'avais pas prévenu mais mon code a changé. Il ne se trouve plus au même endroit.
    Il s'exécute quand je clique sur la flèche de déroulement de mon combobox.
    Ca donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      private void comboBoxY_SelectedIndexChanged(object sender, EventArgs e)
            {
                string fichier = textBoxDataSource.Text;
                string connectionProvider = "provider=Microsoft.Jet.OLEDB.4.0;data source=fichier;Extended Properties=Excel 8.0";
                string requete = "select * from [Feuil1$]";
     
                comboBoxY.Items.Add("Aucune");
                DataSet ds;
                OleDbDataAdapter ThisCommand;
     
                ThisCommand = new OleDbDataAdapter(requete, new OleDbConnection(connectionProvider));
                ds = new DataSet();
                ThisCommand.Fill(ds);
                foreach (DataColumn d in ds.Tables[0].Rows)
                    comboBoxY.Items.Add(d);
            }

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    ah oui,
    je comprends mieux pourquoi il ne s'exécute pas...

    là, ta méthode est appelée sur l'évènement 'SelectedIndexChanged', c'est à dire quand l'item sélectionné change...
    mais comme tu n'as pas d'items dans ta combobox, tu risques pas d'en changer!...

    il faudrait associer ta méthode à l'évènement 'MouseClick '

    voilà qui a plus de chance de fonctionner...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    mais est-ce vraiment judicieux de recharger les items à chaque fois que tu cliques sur le combobox?

    je pense que c'était mieux avant
    de le faire quand tu choisis/modifies le fichier source...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Merci, je venais de m'en rendre compte et finalement je l'ai remis dans la partie qui s'exécute quand je clique sur mon bouton de recherche de fichier.
    J'ai exécuter mon code pas à pas et apparemment c'est ma requête qui ne fonction pas. Il dit qu'il ne trouve pas l'objet 'Feuil1'.
    Voilà mon nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    private void buttonDataSource_Click(object sender, EventArgs e)// ce qu'il se passe quand on clique sur le bouton de recherche
            {
                OpenFileDialog ofn = new OpenFileDialog ();// ouvrir une fenêtre de recherche et de sélection de fichier
                ofn.Filter = "Fichiers Excel (*.xls;*.xlsx)|*.xls;*.xlsx";// filtre permettant de choisir quel type de fichier on souhaite afficher
                ofn.Title = "Choix du fichier de données";// titre de la fenêtre
                while (true)
                    if (ofn.ShowDialog() == DialogResult.OK)// ce qu'il se passe quand l'utilisateur clique sur Ouvrir
                    {
                        textBoxDataSource.Text = ofn.FileName;// récupère le chemin du fichier et l'inscrit dans la zone de texte
                        comboBoxY.Items.Add("Aucune");
                        string fichier = textBoxDataSource.Text;
                        string connectionProvider = "provider=Microsoft.Jet.OLEDB.4.0;data source=fichier;Extended Properties=Excel 8.0";
                        string requete = "select * from [Feuil1]";
     
                        DataSet ds;
                        OleDbDataAdapter ThisCommand;
     
                        ThisCommand = new OleDbDataAdapter(requete, new OleDbConnection(connectionProvider));
                        ds = new DataSet();
                        ThisCommand.Fill(ds);
                        foreach (DataColumn d in ds.Tables[0].Rows)
                            comboBoxY.Items.Add(d);
     
                        return;// ferme la fenêtre de recherche
                    }
                    else// ce qu'il se passe quand il fait autre chose
                    {
                        return;// ferme la fenêtre de recherche
                    }
            }

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    oui,
    eh bien désolée, c'est ici que va s'achever mon aide...
    les requêtes et moi, ça fait 2...

    en espérant qu'une âme charitable te viendra en aide...

    bon courage

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    merci quand même pour ton aide

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    apparemment, ça serait [Feuil1$] qu'il faudrait mettre
    plutôt que [Feuil1]

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    J'ai essayer avec [Feuil1$] et ça marche pas mieux.
    Pour le lien que tu m'as passé en aide, bin ça ne m'aide pas trop. C'est déjà ce que j'ai fait. Donc ça ne m'apprend rien de plus.
    Mais merci quand même.
    Pour la requête, ça me marque :
    Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet 'Feuil1$'. Assurez-vous que l'objet existe et que vous avez correctement saisi son nom et son chemin d'accès. Et ça me marque ça au niveau de la ligne

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    C'est bon, je viens de résoudre mon problème ! Enfin au moins la première partie, j'arrive à remplir mon dataset.
    Ca ne marchait pas parce que je sélectionnais un fichier .xlsx et apparemment ça ne marche pas. Donc j'ai recréer le meme fichier en .xls et là c'est bon ça marche.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Je viens également de réussir à remplir mon combobox à partir de mon dataset.
    Le code est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                        {
                            comboBoxY.Items.Add(ds.Tables[0].Columns[i].ColumnName);
                        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir un formulaire WORD avec des données Excel
    Par Giant25 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/02/2015, 16h31
  2. Remplir Combobox Avec des données Access
    Par hackman61 dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/03/2011, 18h01
  3. Remplir un combobox avec des données en dur
    Par hotsizzle dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/10/2008, 18h16
  4. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03
  5. [VBA-A]Remplir une textbox avec des données de tables.
    Par cuicui08 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2006, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo