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 boucle avec listview


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut Problème boucle avec listview
    Salut a tous ! je suis en bts informatique et actuellement en stage je dois réaliser une appli en vb.net qui travail avec des fichiers excel .

    Pour expliquer simplement l'utilisateur via une combobox ajoute des lignes dans ma list view , jusque la pas de problème , Ensuite j'ai fait un bouton enregistré , qui doit enregistré la totalité de ma listview dans un fichier excel .

    Je travaille avec visual studio 2010 ultimate

    Quand j'utilise uniquement mon code pour enregistré une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Dim j As Integer
            dim i as Integer
     
            i = 3
            j = 0
     
            appli.Workbooks.Open(ClasseurFavoris) ' ouverture du fichier excel.
            Feuille = CType(appli.ActiveWorkbook.Worksheets(utilisateur), xls.Worksheet) ' je choisit l'onglet du classeur excel
            Feuille.Cells(i, 1).Value = (ListView_Favoris.Items(j).SubItems(0).Text)
            Feuille.Cells(i, 2).Value = (ListView_Favoris.Items(j).SubItems(1).Text)
            Feuille.Cells(i, 3).Value = (ListView_Favoris.Items(j).SubItems(2).Text)
    Cela fonctionne il enregistre bien la ligne complète de ma listview dans mon fichier excel a savoir 3 donné ( Affaire/Client/Intitulé)

    Ensuite j'ai donc fait une boucle pour pouvoir enregistré toutes mes lignes de ma listview

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     Private Sub Button_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Save.Click
     
            Dim j As Integer
            Dim b As Boolean
     
            i = 3
            j = 0
            b = False
     
            appli.Workbooks.Open(ClasseurFavoris) ' ouverture du fichier excel.
            Feuille = CType(appli.ActiveWorkbook.Worksheets(utilisateur), xls.Worksheet) ' choix de l'onglet à l'intérieur du classeur
     
            ' -----------------------------boucle qui enregistre la liste des favoris choisit par l'utilisateur dans un fichier excel . --------------------------------------
     
            While b = False
     
                If ListView_Favoris.Items(j) Is Nothing Then  
                    b = True                ' Si la case de la listview est vide alors on change la condition ( false => true) , quitte la boucle et on ferme excel
     
                    Try
                        appli.Visible = False           '
                        appli.Workbooks(1).Save()       '
                        appli.DisplayAlerts = False     '   fermeture d'excel
                        appli.Quit()                    '
                        appli = Nothing                 '
                    Catch ex As Exception
     
                    End Try
     
                Else
     
                    Feuille = CType(appli.ActiveWorkbook.Worksheets(utilisateur), xls.Worksheet)
                    Feuille.Cells(i, 1).Value = (ListView_Favoris.Items(j).SubItems(0).Text)
                    Feuille.Cells(i, 2).Value = (ListView_Favoris.Items(j).SubItems(1).Text)
                    Feuille.Cells(i, 3).Value = (ListView_Favoris.Items(j).SubItems(2).Text)
     
                    i = i + 1
                    j = j + 1
     
                End If
            End While
     
                    Try
                        appli.Visible = False           '
                        appli.Workbooks(1).Save()       '
                        appli.Workbooks(2).Save()       '
                        appli.DisplayAlerts = False     '   Fermeture d'excel
                        appli.Quit()                    '
                        appli = Nothing                 '
                    Catch ex As Exception
                    End Try
     
            i = 3
            j = 0
            b = False
     
        End Sub
    Et la j'ai un plantage j'imagine que c'est ma "boucle" qui est mauvaise , je crois que mon erreur est a la ligne " If ListView_Favoris.Items(j) Is Nothing Then " car sa me met l'index n'est pas une valeur disponible ...

    Merci d'avance de votre aide

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Ben faudrait déjà voir ou et comment tu remplis ListView_Favoris.Items

    Maintenant je pense que le test sur ta boucle n'est pas correct. Perso je travaillerais sur le nombre d'Items dans ListView_Favoris.Items

    un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cpt = 0
     
    While cpt < ListView_Favoris.Items.count -1 
    ...
    ...
    cpt = cpt + 1
    ..
    Au moins comme ça tu es sur qu'il sort quand il a traité tout les éléments de ta liste.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Pour ajouter les données dans ma listeview j'utilise se code ( qui fonctionne ^^)

    En gros la liste des affaires est dans un autre fichier excel ( sorte de "base de donnée" ) j'ai récupéré cette liste que j'ai mit dans une combobox , l'utilisateur choisie dans cette combobox l'affaire qu'il veux et en fonction de son choix j'affiche dans 2 label le client et l'intitulé de l'affaire (sorte de vérification pour lui que c'est bien cette affaire la qu'il souhaitais) ) ensuite quand il clique sur ok sa ajoute l'affaire le client et l'intitulé dans la listview une donné dans chaque colonne

    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
    Private Sub Button_Ajouter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Ajouter.Click
     
            Dim listing As New ListViewItem
            Dim b As Boolean
     
            b = False
     
            If ComboBox2.SelectedItem Is Nothing Then       ' test si une affaire est sélectionnée pour l'ajouter dans la listview
                MessageBox.Show("Veuillez sélectionner une affaire à ajouter", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
     
                listing.Text = ComboBox2.SelectedItem.ToString              '
                listing.SubItems.Add(Label_Client.Text.ToString)            ' Ajout des données dans la listview
                listing.SubItems.Add(Label_Intitule.Text.ToString)          '
                ListView_Favoris.Items.Add(listing)                         '
            End If
        End Sub
    Mon ajout fonctionne bien ^^ , Je prend note du .count en effet c'est pas idiot je n'y avais pas pensé

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Merci avec le .count sa fonctionne nickel ... moi qui m'étais embarqué dans un while + if ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While cpt < ListView_Favoris.Items.count -1
    par contre j'ai enlever le -1 car si j'avais 4 lignes dans mon listview il ne m'en enregistrait que 3 ^^ , la c'est parfait merci

    Maintenant il faut que avant chaque enregistrement je vide mon tableau excel car si par exemple la 1ere sauvegarde l'utilisateur avait choisit 5 ligne dans mon listeview , mais qu'a la suivante l'utilisateur en choisit que 4, ca va bien remplacer les 4 première ligne de la précédente sauvegarde par celle choisie par l'utilisateur mais la 5eme qui était la avant va resté ^^ mais bon sa devrait pas etre trop dur :p

    Encore merci pour le petit coup de pouce je m'en souviendrais de se .count ^^

  5. #5
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Déso pour le -1 habitude quand je code en vb6;-) Tant mieux si c'est ok ;-)
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. problème : boucles avec chaines
    Par zoscoy dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2014, 10h23
  2. [XL-2010] Problème boucle avec décompte négatif (Obtention de 9 au lieu de 09)
    Par Alasgard dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/04/2014, 14h14
  3. Problème boucle avec plusieurs conditions
    Par Naxence dans le forum Général VBA
    Réponses: 2
    Dernier message: 29/03/2012, 14h38
  4. Problème boucle avec affichage tableaux
    Par lamouette76 dans le forum C
    Réponses: 11
    Dernier message: 08/10/2007, 19h05
  5. [C#] Problème avec ListView
    Par yannick dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/06/2004, 17h29

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