Multi colone dans une listview

Bonjour,

je viens de m inscrire sur votre site car je travail sur un programme de calcul d heure de nuit en vb6 mais je suis bloquer avec un problème de listview et de colonne

explication en détail
j ais une form1 sur laquelle je remplie une listbox je souhaite envoyé cette liste dans une listview qui est placer sur une form2 comme pour un aperçu avant une impression sous forme de colonne
Configuration: Windows Vista
Firefox 3.0.3

9 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,
    Il n'y a pas de colonne dans un listView, c'est un affichage comme dans l'explorateur de fichier où tu ouvre et ferme des lignes.
    A+
    1. bonjour a toi lermite222
      merci pour ta rapidité alors qu elle est le meilleur moyen pour faire se type d aperçus

      je te mais mon codage pour que tu puisse voir mon probleme
      Private Sub Command1_Click()
      CalculMinuteFin = TxtMinuteFin
      CalculHeureFin = TxtHeureFin

      If TxtMinuteFin < TxtMinuteDebut Then
      CalculMinuteFin = TxtMinuteFin + 60
      End If

      If TxtHeureFin < TxtHeureDebut Then
      CalculHeureFin = TxtHeureFin + 24
      End If

      TxtHeureResultat = CalculHeureFin - TxtHeureDebut
      TxtMinuteResultat = CalculMinuteFin - TxtMinuteDebut
      Txtohsupp = TxtHeureResultat - 6
      Txtomsupp = TxtMinuteResultat - 30

      Textheurenuit = H2 - TxtHeureDebut

      Textminnuit = M2 - TxtMinuteDebut

      Text3.Text = DTPicker1 & " " & TxtHeureDebut & " H " & TxtMinuteDebut & " " & TxtHeureFin & " H " & TxtMinuteFin & " " & TxtHeureResultat & " H " & TxtMinuteResultat & " " & Txtohsupp & " H " & Txtomsupp & " " & Textheurenuit & " H " & Textminnuit & vbCrLf

      End Sub

      Private Sub Command2_Click()

      List1.Clear
      End Sub

      Private Sub Command3_Click()
      List1.AddItem Text3.Text
      End Sub

      Private Sub Command4_Click()
      Call Sauveliste(Me.List1)
      End Sub

      Private Sub Command5_Click()
      Call Ouvreliste(Me.List1)
      End Sub

      Private Sub Form_Load()

      End Sub

      Private Sub List1_Click()

      If List1.ListIndex <> -1 Then
      MsgBox List1.List(List1.ListIndex)
      End If

      End Sub

      Private Sub options_Click()
      Form2.Show
      End Sub

      Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
      If KeyCode = vbKeyReturn Then
      List1.AddItem Text3.Text
      Text3.SelStart = -1
      Text3.SelLength = Len(Text3.Text)
      End If
      End Sub
      Private Sub Sauveliste(LaListe As ListBox)

      Open App.Path & "\" & "laliste.lst" For Output As 1
      For i = 0 To List1.ListCount - 1
      LaListe.ListIndex = i
      Print #1, LaListe.Text
      Next
      Close 1
      End Sub
      Private Sub Ouvreliste(LaListe As ListBox)
      Open App.Path & "\" & "laliste.lst" For Input As 1
      Do Until EOF(1)
      Line Input #1, MaString
      LaListe.AddItem MaString
      Loop
      Close 1
      End Sub

      pour ma form2
      Private Sub Document1_GotFocus()
      Open App.Path & "\" & "laliste.lst" For Input As 1
      Do Until EOF(1)
      Line Input #1, MaString
      LaListe.AddItem MaString
      Loop
      Close 1
      End Sub

      Private Sub Command1_Click()

      End Sub

      Private Sub Form_Load()

      End Sub

      Private Sub Label1_Click()
      sa c est ma colonne date
      End Sub

      Private Sub Label2_Click()
      sa c est ma colonne heure embauche
      End Sub

      Private Sub Label3_Click()
      sa c est ma colonne fin de service
      End Sub

      Private Sub Label4_Click()
      sa c est ma colonne total heure jour
      End Sub

      Private Sub Label5_Click()
      sa c est ma colonne heure supp
      End Sub

      Private Sub Label6_Click()
      sa c est ma colonne total heure nuit
      End Sub

      Private Sub ListView1_Click()

      End Sub

      j espère que sa vas mieux te parler
      j attend vite une reponce de ta part et encore merci
      1. Contributeur
        Quand tu dit Form1 et Form2 c'est quoi ?
        Tu est en VB6 ?
        A+
        1. oui je travail en vb6

          form1 ma feuille principal
          form2 ma feuille secondaire
      2. Contributeur
        Donc, si j'ai compris tu veux mettre le contenu de la liste de la forme 1 dans la liste de la forme 2 ?
        A+
        EDIT:
        A tout hazard..
        'Dans Load de Form2
        Private Sub Form_Load()
            For i = 0 To Form1.List1.ListCount - 1
                List1.AddItem Form1.List1.List(i)
            Next i
        End Sub

        1. en gros oui sauf que dans la form2 c est une listview

          j ai tester ton code et sa me sort une erreur d exécution 424 ( un objet et requis ) pourquoi ?

          comme tu a pu le voir ma listbox1 est enregistre dans un dossier nome laliste on peut pas l ouvrir directement dans la listiew en ouvrant la form2 ?

          A BIENTOT
      3. Contributeur
        Re,
        Si, j'ai bien vu que tu employas un fichier, mais dans la forme 2 ce n'est pas nécessaire d'ouvrir le fichier à nouveau puisque les données sont déjà dans la liste de la forme 1
        et concernant la forme2, LaListe c'est une ListView ? Quel est l'intéret de mettre une ListView alors qu'il n'y a q'une seule "Node" ?

        pour la remplir voir...
        Il faut la lier avec un contrôle ImageList et y ajouter des images
           'Remplir le Treeview
           Dim nodX As Node
           Set nodX = TreeView1.Nodes.Add(, , "Clé", "Texte de la Node", 1)

        1 = le N° de l'icône dans ImageList1
        Tu dit...
        1. bonjour

          bon j en suis toujours au mémé point malgré ton aide qui est très bien

          mon fichier laliste est un enregistrement de ma liste1 et je souhaite que dans ma form2 la mise en page soit différente
          c est a dire avec des colonnes qui sépare chaque donnés avec aussi des entête sur chaque colonnes je penser qu avec une listview on pouvez le faire mais je vois que non alors avec quoi je peut le faire ?

          au secours j en est marre

          a bientôt
        2. Contributeur
          @ocejade17Re,
          Avec un FlexGrid, tu en met un sur la forme tu le sélectionne et tu tape F1, tu aurras les explications nécessaires pour commencer et quand tu bloque, revient.
          A+
        3. @lermite222salut a toi

          je suis sur l étude du flexgrid comme tu me la conseiller .c est vrai que c est mieux je peut crée mes colonnes et pour le reste pour l instant je rame car pour ouvrir mon fichier j ai pas encore trouver mais ça vas venir pour la touche f1 on oublie pas avec ma version de vb6 donc pas de msdn

          grâce a toi sa avance bien par contre si tu a teste mon code tu a due voir qu au niveau des heures supp çà coince tu en pense quoi ?

          a bientôt
      4. Contributeur
        L'approche pour le calcul des heures n'est pas fameuse, mais ça dépend de la façon dont tu les met dans le fichier.
        Faudrait que les variables soient déclarée en long et travailler avec des TimeSerial.
        Charge le projet Sur Cjoint tu le dézipe.
        Je crois que c'est un bon exemple pour travailler avec des dates et heures, il y a aussi un MSHFlexGrid qui devrait être une bonne démo.
        Il y a assez bien d'explications
        A+

        1. bonjour a toi

          bon je te répond tardivement car pas u le temps de travailler sur mon prog .
          ta ma conseiller un ms flexgrid ca marche mais je n arrive pas a centre mon texte dans la ligne deux .
          voici l exemple que j ais utiliser pour ouvrir mon fichier texte
          Private Sub Form_Load()
          Dim laliste As String
          Open App.Path & "\" & "laliste.lst" For Input As 1
          Do Until EOF(1)
          Line Input #1, mastring
          MSFlexGrid1.AddItem mastring
          Loop
          Close 1
          MSFlexGrid1.ColWidth(0) = 6500
          MSFlexGrid1.Row = 0
          MSFlexGrid1.Text = " date" & " " & " heures embauches " & " " & " fin services " & " " & " Heures supp " & " " & " Heures nuit " & vbCrLf

          MSFlexGrid1.Cols = 1
          'permet de mettre le titre sur 2 lignes
          MSFlexGrid1.WordWrap = True
          'on modifie la hauteur de la ligne de titre afin qu'il soit visible
          MSFlexGrid1.RowHeight(0) = 600
          'on se place sur la 1re ligne
          MSFlexGrid1.Row = 0
          'pour chaque colonne:
          For c = 1 To MSFlexGrid1.Cols - 1
          MSFlexGrid1.Col = c
          'on centre le titre
          MSFlexGrid1.CellAlignment = 4

          MSFlexGrid1.CellAlignment = flexAlignLeftCenter
          Next c
          End Sub

          Sub Format_Grille()
          Set Fg = Grille
          'écrit le titre des colonnes
          '< = le contenu de la colonne est alligné à gauche
          '> = le contenu de la colonne est alligné à droite
          s$ = "<Code|<Titre|<Nom des Auteurs|>Quantité"
          Fg.FormatString = s$
          'permet de mettre le titre sur 2 lignes
          Fg.WordWrap = True
          'on modifie la hauteur de la ligne de titre afin qu'il soit visible
          Fg.RowHeight(0) = 500
          'on se place sur la 1re ligne
          Fg.Row = 0
          'pour chaque colonne:
          For c = 0 To Fg.Cols - 1
          Fg.Col = c
          'on centre le titre
          Fg.CellAlignment = 4
          'on définit la largeur des colonnes
          Fg.ColWidth(c) = 960
          Next c

          End Sub

          donne moi le conseille qu il me manque s il te plait
          a bientot
      5. Contributeur
        CellAlignement n'intervient que sur la cellule active déterminée par Col et Row
        pour aligner par colonne voir
            Fg.ColAlignment(x) = flexAlignCenterCenter 'pour centre/Centrer les colonnes 'normales'
            Fg.ColAlignmentFixed(x) = flexAlignCenterCenter ' idem pour colonnes titres

        Tu emploi un Grid mais tu met tout dans une seule colonne ? je ne vois pas l'intérèt de pratiquer comme cela, tu devrais mettre chaque titres dans une colonne et chaque données dans des colonnes séparées!
        Je te rappel que ta première idée était de mettre dans des colonnes séparées !!

        Si tu veu faire un Clip avec ton entrée fichier...(il faut 5 colonnes)
        mastring  = "date" & vbTab  & " heures embauches " & vbTab   & " fin services " &  vbTab  & " Heures supp " &  vbTab  & "Heures nuit " 
            with MSFlexGrid1
                .ro = 0 : .Col = 0
                .Text = mastring  
            end with

        Et pour sauver tes données ou les lire voir du côté de la propriété Clip, mais je vais pas tout dire d'une fois,
        A+
        1. bonjour lermite 222

          je reviens ver toi pour plus de conseille sur le flexgrid j ais trouver l exemple qui suit mais je peux pas faire un row de titre et puis explique moi comment entre ma listbox dans mais cellule ???

          exemple
          Option Explicit
          Private Sub Command1_Click()

          Dim oWord As Word.Application
          Dim oDoc As Word.Document
          Dim oRange As Word.Range

          'Dim oWord As Object
          'Dim oDoc As Object
          'Dim oRange As Object
          Dim row As Integer
          Dim col As Integer
          Dim i As Integer
          Dim n As Integer
          Dim sTemp As String
          Dim arr() As String

          ReDim arr(MSFlexGrid1.Rows - 1, MSFlexGrid1.Cols - 1)

          'Créer une instance de word
          Set oWord = CreateObject("Word.Application")

          'rendre le document word visible
          oWord.Visible = True

          'Ouivrir un nouveau document
          Set oDoc = oWord.Documents.Add

          For row = 0 To MSFlexGrid1.Rows - 1
          n = 0
          For col = 0 To MSFlexGrid1.Cols - 1
          arr(i, n) = MSFlexGrid1.TextMatrix(row, col)
          n = n + 1
          Next
          i = i + 1
          Next

          'ENregistrer sur un tableau
          For i = LBound(arr, 1) To UBound(arr, 1)
          For n = LBound(arr, 2) To UBound(arr, 2)
          sTemp = sTemp & arr(i, n)
          If n = UBound(arr, 2) Then
          sTemp = sTemp & vbCrLf
          Else
          sTemp = sTemp & vbTab
          End If
          Next
          Next

          'Avoir l'emplacelent sur le document
          Set oRange = oDoc.Bookmarks("\EndOfDoc").Range

          oRange.Text = sTemp

          'Convertire le format et le texte
          oRange.ConvertToTable vbTab, Format:=wdTableFormatColorful2

          Set oRange = Nothing

          End Sub

          Private Sub Form_Load()

          Dim i As Integer
          Dim n As Integer
          'Alimenter FlexGrid
          With MSFlexGrid1
          .MergeCells = 1
          MSFlexGrid1.MergeRow(1) = True
          .Rows = 2
          .Cols = 6
          .MergeCells = 0
          .MergeRow(0) = True

          .ColWidth(1) = 1100
          .ColWidth(2) = 1100
          .ColWidth(3) = 1100
          .ColWidth(4) = 1100
          .ColWidth(5) = 1100
          .TabStop = False
          'Ajouter filds

          .row = 0

          .Text = "relever d heures "
          .row = 1
          .col = 0
          .Text = "date "
          .row = 1
          .col = 1
          .Text = "heure embauche "
          .row = 1
          .col = 2
          .Text = "fin service "
          .row = 1
          .col = 3
          .Text = "total jour "
          .row = 1
          .col = 4
          .Text = "heure supp "
          .row = 1
          .col = 5
          .Text = "heure nuit "
          'Ajouter des données
          For i = 1 To 31
          .Rows = .Rows + 1
          .row = .Rows - 1
          .col = 0
          .Text = DTPicker1
          For n = 1 To 5
          .col = n
          .Text = "Row " & i & ",Col " & n
          Next
          Next
          End With

          End Sub
          j espere avoir vite de tes nouvelles et encore merci
      6. Contributeur
        Re,

        Met les formes , le projet et un fichier, enfin tout le répertoir quoi.. dans un zip et met sur Cjoint.
        Parce que comme ça ça peut durer longtemps.
        Ensuite tu met le lien dans un poste suivant.
        1. bonjour a toi lermite 222

          comme tu me la demander voila l adresse ou ce trouve mon projet https://www.cjoint.com/?bukYL5LrCt
          tu pourras mieux comprendre mes problème et pouvoir m aider plus efficacement
          enfin grasse a toi j ais énormément progresser

          je reste dans l attente de t on soutien

          a bientot
      7. Contributeur
        Bonjour,
        Tu peu pas me metrtre ça en ZIP, j'ai pas de logiciel installé pour les Rar
        1. bonjour lermite 222

          j ais fait ce que tu m a dit mais je n ais pas vus si tu avait bien reçu ma source.
          parce que je l ais déposer sur le site codes-sources a ce lien https://codes-sources.commentcamarche.net/ regarde si tu peut m aider avec le flexgrid (a enregistrer et a ouvrir les donner)

          j espéré avoir de tes nouvelles bientôt et encore merci