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 :

Comment peut-on copier le contenu d'une liste dans un tableau ?


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut Comment peut-on copier le contenu d'une liste dans un tableau ?
    Bonjour a tous,

    je m'apelle jonathan et je suis nouveau

    je suis en train de faire un petit programme et dans celui-ci j'aimerais recopier le contenu d'une liste dans un tableau, seulement je n'y arrive pas, je me suis tenté a écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tCommande(nbCommande).nomClient = cli.nom            
    For n = 0 To LstPanier.Items.Count - 1               
    tCommande(nbCommande).tProduit(n).designation = LstPanier.Text(n)
    Next
    le tableau tCommande est une structure contenant une chaine de caracteres ou je stocke le nom du client, et un tableau de produit, tableau dans lequel j'aimerais stocker la liste dont je parlais (correspondant aux achats du clients) de maniere, en fin d'application a pouvoir afficher chaque client qui a commandé et ce qu'il a commandé.

    seulement cela ne fonctionne pas, pouvez-vous m'aider s'il vous plait ?
    merci beaucoup

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux nous mettre les déclarations qui vont avec et préciser s'il y a erreur ou que les variables sont vides ou autre ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Voici mes déclarations:

    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
    Module Module1
        Public Structure Client
            Dim nom As String
            Dim adresse As String
            Dim codepostal As String
            Dim ville As String
            Dim telephone As String
            Dim dateDernierAchat As Date
            Dim nbAchat As Integer
            Dim totalAchat As Single
        End Structure
        Public Structure Produit
            Dim designation As String
        End Structure
        Public Structure Commande
            Dim nomClient As String
            Dim tProduit() As Produit
            Dim totalAchat As Single
        End Structure
        Public FileNum As Integer = FreeFile()
        Public nbCleEnregistrement As Integer
        Public numClient As Integer
        Public cli As Client
        Public nbCommande As Integer = 0
        Public tCommande(5) As Commande
    End Module
    Quand au code que j'ai posté précédemment, à l'éxécution, je rencontre l'erreur :
    La référence d'objet n'est pas définie à une instance d'un objet.

    merci d'avoir répondu je commencais à perdre espoir

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ce message veut dire que t'as oublié un new en général
    genre as new client
    quelle ligne plante exactement ?

    et sinon à la place d'une structure tu peux faire une classe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    C'est la ligne
    tCommande(nbCommande).tProduit(n).designation = LstPanier.Text(n)
    qui plante

    je ne sais pas, je n'ai vu les classes que en C++ et j'aimerais garder cette structure, tu pense savoir comment je peux résoudre ? :$

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'ai dit des conneries, pas besoin de new pour une structure
    par contre j'ai pris ton code et il manque
    ReDim tCommande(1).tProduit(5) par exemple
    ou redim tCommande(i).tProduit(list.count - 1)
    car dans ta structure Commande tProduit est défini en tableau variable
    mais il faut le dimensionné après
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    il ne vaut mieux pas
    redim preserve tCommande(i).tProduit(list.count - 1) pour ne pas perdre les données ? :$

    For n = 0 To LstPanier.Items.Count - 1
    redim preserve tCommande(i).tProduit(list.count - 1)
    tCommande(nbCommande).tProduit(n).designation = LstPanier.Text(n)
    Next

    d'apres toi ceci est bon ? :$

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    redim preserve sert à ne pas perdre les données, dans le cas d'un redimensionnement c'est utile
    mais dans le cas d'un 1er dimensionnement c'est pas utile

    dans le code que tu viens de mettre, c'est "bete" de redimensionner à chaque passage de boucle
    tu sais avant combien il t'en faut avec le count donc tu le dimensionne avant le FOR (avec redim ou non c'est toi qui voit)

    ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    redim preserve tCommande(i).tProduit(LstPanier.Items.Count - 1)
    For n = 0 To LstPanier.Items.Count - 1
        tCommande(nbCommande).tProduit(n).designation = LstPanier.Text(n)
    Next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Merci pour tes explications j'ai compris, j'ai donc utilisé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ReDim Preserve tCommande(nbCommande).tProduit(LstPanier.Items.Count - 1)
    For n = 0 To LstPanier.Items.Count - 1
    tCommande(nbCommande).tProduit(n).designation = LstPanier.Text(n)
    Next
    on redimensionne donc le tableau pour qu'il contienne autant de ligne qu'il y a d'item dans la listen, et pour 0 au nombre d'item - 1 on recopie chaque ligne de la liste dans la tableau, seulement, en éxécutant, je recontre l'erreur

    L'index se trouve en dehors des limites du tableau.

    meme si il n'y a qu'un élément dans la liste.
    je ne vois pas pourquoi. le probleme fait toujours reference a la meme ligne, je me suis demandé si c'etait pas un probleme de syntaxe pour recopier bien le texte de l'item dans le tableau mais ca n'a aucun rapport avec les indices.

    Aurais-tu une idée ? :$
    merci beaucoup pour ton aide

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    quand tu es sur un erreur il faut comprendre ce qu'elle veut dire

    en l'ocurrence tu parles d'une variables tableau qui ne vas pas jusque là
    exemple : tu as un tableau(8)
    donc de 0 à 8
    si tu fais tableau(9) ca va dire ce message d'erreur

    et ensuite chercher d'où vient l'erreur, quand tu passes ta souris sur une variable, tu vas savoir combien elle contient

    là à mon avis ca plante sur lstpanier.text(n)
    ca doit etre lstpanier(n).text, non ? je ne pense pas qu'il y a plusieurs text pour un lstpanier...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    excuse moi mais je n'ai pas tres bien compris ton exemple :$

    par contre je pensais comme toi pour LstPanier(n).Text cependant cela produit une erreur
    La classe 'System.Windows.Forms.ListBox' ne peut pas être indexée, car elle n'a pas de propriété par défaut.

    je ne comprends pas, il faut que je donne une valeur par défaut à la liste ?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    lstpanier tu peux pas mettre lstpanier(n) car c'est pas un tableau
    et text non plus
    par contre essaye ca: lstpanier.Items.Item(n).tostring
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    je ne sais vraiment pas quoi dire, si ce n'est merci beaucoup sperot51, avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ReDim Preserve tCommande(nbCommande).tProduit(LstPanier.Items.Count - 1)
    For n = 0 To LstPanier.Items.Count - 1
    tCommande(nbCommande).tProduit(n).designation = LstPanier.Items.Item(n).ToString
    Next
    plus aucune erreur et cela fonctionne, jai essayer de verifier en affichant le contenu avec un msgbox car je n'arrivais pas a voir l'evolution du tableau dans les variables locales mais ca a l'air de fonctionner a merveille.
    un énorme merci a toi

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pense à mettre le topic à résolu (bouton en bas du thread j'crois)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2008, 09h23
  2. vba excel:copier le contenu d'une feuil dans une autre feuil
    Par yucf_miagiste dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/09/2007, 19h53
  3. Comment appeller par code le contenu d'une liste
    Par sakia dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/05/2007, 19h50
  4. copier le contenu d'une forme dans word
    Par didami dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 11/05/2007, 15h35
  5. Copier le contenu d'une cellule dans une variable sous excel
    Par franckB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/04/2007, 19h54

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