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

VB.NET Discussion :

transposition code vba en vb.net pour remplir combobox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Par défaut
    Bon j'ai crée un projet allégé avec seulement la problématique via le .zip si dessous
    ARIANE TEST.zip

    En espérant que cela fonctionne maintenant !

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Re,

    J'ai bien reçu ton projet et je peux l'exécuter.
    Il y a effectivement un problème : je ne comprends pas pourquoi ComboBox2.DataSource = MonDico.Keys ne fonctionne pas dans ce code, alors que cela fonctionne par ailleurs. Je chercherai dans la soirée si je peux comprendre.

    En attendant, j'ai remplacé cette ligne de code par un remplissage "manuel" du ComboBox. Cela se fait en mémoire interne (sans accès à XLS) et sans nécessiter de tri (le SortedList fait le travail). Cette solution te dépannera en gardant une grande rapidité d'exécution.

    J'ai placé le remplissage de la SortedList dans un bloc Try parce que, si d'aventure, il devait y avoir un doublon dans les données, cela provoquerait une erreur. Avec le Try, celle-ci ne bloquera pas le programme.

    Attention, dans la procédure ComboBox2_SelectedValueChanged(...) tu as encore un appel à SupprDoublon(). Il faut retirer ces appels dès lors que tu travailles avec la SortedList.


    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
     
    ' ... ... ...
            For Me.lngCnt = 2 To range.Rows.Count
                If f.Range("A" & lngCnt).Text <> ("") Then
                    Try    ' Adsn un Try pour éviter les erreurs d'exécutions sur doublons.
                        MonDico.Add((f.Range("A" & lngCnt).Text), "")
                        '           ComboBox2.Items.Add(f.Range("A" & lngCnt).Text)
                    Catch
                    End Try
                Else
                End If
                ProgressBar2.Value = (lngCnt - 1) + 1 'incremente la ProgressBar pour chaque ligne
            Next
     
            '  *** '  ComboBox2.DataSource = MonDico.Keys
     
            ' Puisque le DataSource ne focntionne pas, je le remmplace par les 3 lignes suivante :
            For I As Integer = 0 To MonDico.Count - 1
                ComboBox2.Items.Add(MonDico.Keys(I))
            Next
     
    ' ... ... ...
    J'espère que ceci te permettra d'avancer ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Par défaut
    ok, j'essaye ...

    Comme tu as put le voir, il y a plusieurs ComBobox en cascade et c'est surtout pour charger la 3e combobox (apres choix dans la 2e) que cela prends du temps

    Et oui je vais supprimer le code de Supprdoublon

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Eureka qu'il a dit, parait-il ...

    La propriété Sorted du ComboBox est à TRUE dans ton programme. Ce n'est pas sa valeur par défaut. Si tu la remets à FALSE, alors le code ComboBox2.DataSource = MonDico.Keys fonctionne parfaitement et te dispense de ma boucle de dépannage.

    Nom : Sorted.jpg
Affichages : 274
Taille : 66,0 Ko

    Il est inutile de modifier cette propriété du ComboBox puisque la SortedList est toujours ordonnée sur les KEYS.

    Si dans un autre ComboBox tu présentes les Values (ComboBox2.DataSource = MonDico.Values), ou d'autres valeurs, et que tu veux qu'elles soient ordonnées, alors d'accord d'affecter TRUE à la propriété Sorted du ComboBox. Mais dans ce cas, il ne faut pas appeler un procédure de tri, c'est le ComboBox a ce qu'il faut.
    Enfin, si je peux me permettre, pour modifier les valeurs par défaut des propriétés des composants, il est préférable de le faire dans le code ComboBoxN.Sortde = True, généralement dans le Form_Load. S'il en avait été ainsi avec le ComboBox2, j'aurais constaté le problème ce matin ...

    ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Par défaut
    Effectivement ça marche mieux !
    Le nouveau problème c'est que le chargement de chaque Combobox affiche un item et donc les autres combobox se lancent aussi ...
    Et pas de gain de temps avec ce nouveau code ou en tout cas pas instantanée comme sur VBA excel ...
    Merci cependant pour ton implication !

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 561
    Par défaut
    bonjour,
    sans vouloir offenser personne, retranscrire un code VBA comme deux goute d'eau en vb.net je n'adhère pas!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim XLS As Object = XlApp.Workbooks.Open("C:\Test\test.xlsm")
            Dim R As Array = XLS.Sheets("Feuil1").range("A1:A997920").value
            Dim T As Object = R.Cast(Of Object).ToArray.ToList.Distinct.ToArray()
            Array.Sort(T)
            Me.ComboBox1.DataSource = T

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Par défaut
    En fait, Thumb down, c'était plutôt pour faciliter la compréhension de la problématique et non pour transposer à tout prix !
    Peu importe le code, tant que les combobox en cascade fonctionne (chargement du suivant à chaque sélection manuelle du précèdent)
    et que le chargement soit quasi instantané ! car la 8000 cellules en 20 secondes c'est trop !
    D'ailleurs la solution de Phil Rod n'a pas accéléré le processus et donc au final je garde le simple ComboBox2.Items.Add(f.Range("A" & lngCnt).Text) !

    Et comme tu peux le vois par mon nombre de contribution à ce forum, ce sont mes débuts en VB.NET et donc je me raccroche à ce que je connais, c'est à dire du codage VBA !

Discussions similaires

  1. [PPT-2010] Récupérer le code VBA d'un modèle pour incorporer dans Excel
    Par fidecourt dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 01/02/2011, 09h35
  2. traduire un code vba vers vb.net
    Par houssine77100 dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/11/2010, 13h15
  3. [XL-2003] code VBA pr choix magasion pour impression
    Par tony020422 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/06/2009, 14h55
  4. Inclure du code vba dans vb.net
    Par l_achraf dans le forum VB.NET
    Réponses: 8
    Dernier message: 20/04/2009, 19h53
  5. [code VBA]passage de variable pour une requête paramétrée
    Par christrabin dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/04/2007, 14h30

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