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 :

Problème ajout dans collection [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut Problème ajout dans collection
    Bonjour,

    J'essaye d'ajouter des éléments dans une collection de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                        For Module1.n = 0 To UBound(TAB)
                            If TAB(n) = Critere Then
                                On Error GoTo SkipAdd
                                Collec.Add(TAB(n), TAB(n))
    SkipAdd:
                                On Error GoTo 0
                            End If
     
                        Next
    Malgré, mon "SkipAdd", j'obtiens l'erreur suivante :"L'ajout a échoué. Une valeur de clé en double a été fournie."

    Quelqu’un aurait-il une solution?

    D'avance merci.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il aurait judicieux de préciser quel type de collection
    si c'est un dictionary, il n'accepte pas d'avoir plusieurs fois la même clé, le hashset l'autorise je crois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Hello,
    Je ne sais pas ce que tu veux faire exactement, mais à la lecture de ton code, quelques remarques me viennent à l'esprit :
    1- n'utilise pas "on error" mais plutôt l'instruction try-catch-finally pour gérer les erreurs ;
    2- utilise la méthode ContainsKey() pour tester si un dictionnaire contient déjà une clé ;
    3- n'utilise pas de dictionnaire si tu veux juste une collection mais une liste List(Of T), cela ne sert à rien de faire un dictionnaire dont la clé et la valeur sont identiques !

    Il se peut aussi que suivant ce que tu veux faire, tu puisses obtenir le même résultat en une ligne en utilisant linq... mais pour ça, il nous faut plus de détail sur ce qu'est TAB et à quoi va servir Collec.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    Oui tout à fait il s'agit bien de ce genre de collection, c'est pour cela que lorsque la routine tente d'ajouter une clé déjà présente, et donc qu'une erreur se produit, je m'attends à ce que la ligne soit sautée grâce à :

    Mais peut-être que je m'y prends mal.

  5. #5
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Donne-nous plus de détails sur Tab et Collec (cf mon message précédent), pour qu'on puisse de proposer une solution appropriée.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    on utilise pas les erreurs quand on peux éviter
    if not dico.containskey(laclé) then dico.add

    de plus comme précisé par plume13, il ne faut pas utiliser on error goto ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    En fait je cherche à créer une liste sans doublons à partir d'un tableau.
    J'ai opté pour la seconde solution qui fonctionne très bien (Je pense que LIST(of T) ne m'aurait pas permis d'éviter les doublons.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     		For Module1.n = 0 To UBound(TAB)
                        If TAB(n) = Critere Then
                            If Not Collec.Contains(Tab(n)) Then
                                Collec.Add(TAB(n), TAB(n))
                            End If
    			End If
                    Next
    J'éviterai également d'utiliser On Error ... (vieux réflexe de VBA).

    Merci beaucoup pour vos réponses

    A bientôt.

  8. #8
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Dans ce cas, pas la peine de réinventer la poudre, Distinct en linq le fait très bien...

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    Je ne connaissais pas du tout linq, je vais donc étudier le sujet.

    Merci encore.

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

Discussions similaires

  1. association ManyToMany : problème ajout dans table
    Par cecile38 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 19/07/2011, 10h18
  2. [PHP 5.0] problème ajout dans une table
    Par bernards111 dans le forum Langage
    Réponses: 10
    Dernier message: 15/04/2010, 15h04
  3. Réponses: 3
    Dernier message: 25/04/2009, 16h34
  4. Problème ajout dans un liste déroulante type DATE
    Par lerorodu51 dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/06/2008, 16h37
  5. [TPAbbrevia] Problème ajout de fichiers dans archive
    Par Pill_S dans le forum Composants VCL
    Réponses: 4
    Dernier message: 14/10/2005, 00h18

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