1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

XL 2010 probléme sur configuration listview

Discussion dans 'Forum Excel' démarrée par reinruof77, 11 Janvier 2017.

  1. reinruof77

    reinruof77 XLDnaute Occasionnel

    Inscrit depuis le :
    23 Juin 2009
    Messages :
    210
    "J'aime" reçus :
    1
    Sexe :
    Masculin
    Habite à:
    noisy le grand
    Utilise:
    Excel 2010 (PC)
    bonjour a tous et BONNE ANNEE

    le fichier test ci joint fonctionne très bien mais je n'arrive pas a étendre la sélection a l'avoir sur les 48 colonnes.

    je fait une recherche via 2 combobox lier (via un module de classe) ce qui m'affiche dans la listview puis je clic sur la ligne et récupérer les données dans les textbox .

    mais je ne sait pas qu'elle ligne de code sont a modifier pour
    1) récupérer toute les colonnes
    2) quand je clic les recuperés dans mes textbox.

    je sait que je doit ajouté des textbox (48 en tout ) .
    voici le code .
    Code (Visual Basic):
    Option Explicit
    Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
    Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long

    Dim WithEvents CBL As ComboBoxLiés
    ' Dim TLgn() As Long ' Ce sera normalement la liste des numéros de lignes de CBL.PlgTablo copiées dans la ListView   ON N'EN A PEUT ÊTRE PAS BESOIN
    Dim LCou As Long ' Ligne courante dans CBL.PlgTablo, c'est à dire celle sélectionnée dans ListView1



    Private Sub TextBox1_Change()

    End Sub

    Private Sub UserForm_Initialize()
    Set CBL = New ComboBoxLiés
    CBL.Plage PlgUti(Feuil1.[A3])
    CBL.Add Me.ComboBox1, "N"
    CBL.Add Me.ComboBox2, "AB"
    CBL.Actualiser

    'Application.FullScreen = True
    'Application.WindowState = xlNormal

    With ListView1
       .View = lvwReport
       .FullRowSelect = True
       .Gridlines = True
       .ColumnHeaders.Add , , Cells(2, 1), 50 '1
       .ColumnHeaders.Add , , Cells(2, 2), 50 '1
       .ColumnHeaders.Add , , Cells(2, 3), 50 '2
       .ColumnHeaders.Add , , Cells(2, 4), 50 '3
       .ColumnHeaders.Add , , Cells(2, 5), 160 '4
       .ColumnHeaders.Add , , Cells(2, 6), 200 '5
       .ColumnHeaders.Add , , Cells(2, 7), 210 '6
       .ColumnHeaders.Add , , Cells(2, 8), 200 '7

       .ColumnHeaders.Add , , Cells(2, 9), 50 '9
      .ColumnHeaders.Add , , Cells(2, 10), 50 '10
    .ColumnHeaders.Add , , Cells(2, 11), 70 '11
       .ColumnHeaders.Add , , Cells(2, 12), 50 '12
      .ColumnHeaders.Add , , Cells(2, 13), 50 '13
       .ColumnHeaders.Add , , Cells(2, 14), 50 '14
       .ColumnHeaders.Add , , Cells(2, 15), 50 '15
       .ColumnHeaders.Add , , Cells(2, 16), 50 '16
       .ColumnHeaders.Add , , Cells(2, 17), 50 '17
       .ColumnHeaders.Add , , Cells(2, 18), 50 '18
       .ColumnHeaders.Add , , Cells(2, 19), 50 '19
       .ColumnHeaders.Add , , Cells(2, 20), 50 '20
       .ColumnHeaders.Add , , Cells(2, 21), 50 '21
       .ColumnHeaders.Add , , "Ligne", 50, lvwColumnLeft '22
       End With

    '   For I = 1 To 6
          ' Me("Textbox" & i).Visible = False
    '   Next

    End Sub

    Private Sub BtnEffacer_Click()
    CBL.Nettoyer
    End Sub

    Private Sub CBL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
    Me.ListView1.ListItems.Clear
    LCou = 0
    End Sub

    Private Sub CBL_Résultat(Lignes() As Long)
    Dim T() As Variant, N As Long, L As Long, C As Long
    T = CBL.PlgTablo.Resize(, 6).Value
    For N = 1 To UBound(Lignes)
       L = Lignes(N)
       With ListView1.ListItems.Add(Text:=T(L, 1))
          For C = 2 To 6: .ListSubItems.Add Text:=T(L, C): Next C
          .ListSubItems.Add Text:=L
          End With
       Next N
    End Sub

    Private Sub Listview1_ItemClick(ByVal Item As MSComctlLib.ListItem)
    Dim T(), C As Long
    LCou = ListView1.ListItems(Item.Index).ListSubItems(7 - 1).Text
    T = CBL.PlgTablo.Rows(LCou).Resize(, 6).Value
    For C = 1 To 6: Me("TextBox" & C).Text = T(1, C): Next C
    End Sub




    Public Function ScreenWidth() As Long
    Const SM_CXSCREEN As Long = 0
    ScreenWidth = GetSystemMetrics(SM_CXSCREEN)
    End Function
    Public Function PointsPerPixel() As Double
    Dim hdc As Long
    Dim lDotsPerInch As Long
    Const LOGPIXELSX As Long = 88, POINTS_PER_INCH = 0 'Pas trouvé ce truc POINTS_PER_INCH
    hdc = GetDC(0)
    lDotsPerInch = GetDeviceCaps(hdc, LOGPIXELSX)
    PointsPerPixel = POINTS_PER_INCH / lDotsPerInch
    ReleaseDC 0, hdc
    End Function
    Public Function ScreenHeight() As Long
    Const SM_CYSCREEN As Long = 1
    ScreenHeight = GetSystemMetrics(SM_CYSCREEN)
    End Function






    Private Sub CommandButton5_Click()
    strNom = Application.GetSaveAsFilename(ActiveSheet.Name, "Fichier Excel (*.xls),*.xls")
    Application.DisplayAlerts = False
      Sheets(Array("Feuil1")).Select
      Sheets(Array("Feuil1")).Copy
           
      ActiveWorkbook.SaveAs strNom
        ActiveWindow.Close
        ActiveWorkbook.Save
        Dim Var As String
    Var = "sauvegarde du fichier effectuer A BIENTOT."
    MsgBox Var
    'Application.Quit
    ActiveWorkbook.Close
    Unload Userform1
    End Sub




    Private Sub CommandButton1_Click()    'modifier ajouter
        Dim T(), C As Long
    If LCou = 0 Then
       LCou = CBL.PlgTablo.Rows.Count
       With CBL.PlgTablo.Rows(LCou): .Copy: .Insert: End With
       LCou = LCou + 1: End If
    ReDim T(1 To 1, 1 To 6)
    For C = 1 To 6: T(1, C) = Me("TextBox" & C).Text: Next C
    CBL.PlgTablo.Rows(LCou).Resize(, 6).Value = T
    CBL.Actualiser
    MsgBox "MODIFICATION EFFECTUER."
        Unload Me
        Userform10.Show
       
    End Sub




    Private Sub CommandButton4_Click()
        Unload Me
    End Sub
     

    merci de votre aide
    demande faite sur un autre forum rester sans réponse.
    https://forum.excel-pratique.com/excel/listview-et-modification-t87507.html
     

    Pièces jointes:

  2. ChTi160

    ChTi160 XLDnaute Barbatruc

    Inscrit depuis le :
    20 Février 2005
    Messages :
    4371
    "J'aime" reçus :
    60
    Sexe :
    Masculin
    Habite à:
    Savigny le Temple 77176
    Utilise:
    Excel 2010 (PC)
    Bonsoir reinruof77
    Bonsoir Le Fil,Le Forum
    Une Bonne Année à Toutes et Tous .
    petites demandes :
    Tu veux charger dans la ListView1 les 48 Colonnes ?
    et ensuite récupérer les données de la Ligne sélectionnée dans la ListView , dans la série de TextBox (48)
    dans l'attente .
    Bonne fin de Soirée
    Amicalement
    Jean Marie
     
  3. reinruof77

    reinruof77 XLDnaute Occasionnel

    Inscrit depuis le :
    23 Juin 2009
    Messages :
    210
    "J'aime" reçus :
    1
    Sexe :
    Masculin
    Habite à:
    noisy le grand
    Utilise:
    Excel 2010 (PC)
    Bonsoir chti160
    Oui c'est tout à fait ça
     
  4. Bebere

    Bebere XLDnaute Barbatruc

    Inscrit depuis le :
    8 Mai 2005
    Messages :
    5750
    "J'aime" reçus :
    70
    Habite à:
    Tongres
    Utilise:
    Excel 2003 (PC)
    bonsoir
    changer le 6 dans resize et les boucles en 48
    je pense que les fonctions(à la fin du code userform) doivent être dans un module
     

    Pièces jointes:

  5. reinruof77

    reinruof77 XLDnaute Occasionnel

    Inscrit depuis le :
    23 Juin 2009
    Messages :
    210
    "J'aime" reçus :
    1
    Sexe :
    Masculin
    Habite à:
    noisy le grand
    Utilise:
    Excel 2010 (PC)
    bonsoir Bebere

    Déja merci

    j'ai ajouté mes 48 textbox mais quand je clic sur la ligne de la lisview ce n'est pas les bonne donnée?????
     

    Pièces jointes:

  6. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    5159
    "J'aime" reçus :
    351
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Bonsoir et bonne année à tous.:)

    Sans avoir regardé le fichier. Un exemple

    Code (Visual Basic):

    Private Sub ListView1_ItemClick(ByVal item As MSComctlLib.ListItem)

        On Error Resume Next

        ListView1.SelectedItem = True

        With Sheets(1)
            For i = 1 To 7
                Set ItemProd = ListView1.SelectedItem
                rw = Application.Match(ItemProd.SubItems(1), .Columns(2), 0)
                Controls("TextBox" & i) = .Cells(rw, i)
            Next i
            TextBox4 = Format(.Cells(rw, 4), "dd.mm.yyyy")
            TextBox5 = Format(.Cells(rw, 5), "hh:mm")
            TextBox6 = Format(.Cells(rw, 6), "hh:mm")
        End With
    End Sub
     
     
  7. reinruof77

    reinruof77 XLDnaute Occasionnel

    Inscrit depuis le :
    23 Juin 2009
    Messages :
    210
    "J'aime" reçus :
    1
    Sexe :
    Masculin
    Habite à:
    noisy le grand
    Utilise:
    Excel 2010 (PC)
    bonsoir Lone-wolf

    je viens de regarder mais j'ai des messages d'erreur (variable non defini)
    merci tout de même.
     
  8. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    5159
    "J'aime" reçus :
    351
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Re reinrouf

    Désolé, il faut déclarer la variable ItemProd. Dim ItemProd As ListItem
     
  9. Bebere

    Bebere XLDnaute Barbatruc

    Inscrit depuis le :
    8 Mai 2005
    Messages :
    5750
    "J'aime" reçus :
    70
    Habite à:
    Tongres
    Utilise:
    Excel 2003 (PC)
    comme suit
    bonsoir Lone-wolf
    meilleurs voeux à tous
    emploi de la propriété key de listvieww
    Code (Text):
    Private Sub CBL_Résultat(Lignes() As Long)
    Dim T() As Variant, N As Long, L As Long, c As Long
    T = CBL.PlgTablo.Resize(, 48).Value
    For N = 1 To UBound(Lignes)
       L = Lignes(N)
       With ListView1.ListItems.Add(Key:="A" & L, Text:=T(L, 1))
          For c = 2 To 48: .ListSubItems.Add Text:=T(L, c): Next c
          .ListSubItems.Add Text:=L
          End With
       Next N
    End Sub

    Private Sub Listview1_ItemClick(ByVal Item As MSComctlLib.ListItem)
    Dim T(), c As Long
    LCou = Mid(ListView1.ListItems(Item.Index).Key, 2) 'ListSubItems(7 - 1).Text
    T = CBL.PlgTablo.Rows(LCou).Resize(, 48).Value
    For c = 1 To 48: Me("TextBox" & c).Text = T(1, c): Next c
    End Sub
     
     
  10. ChTi160

    ChTi160 XLDnaute Barbatruc

    Inscrit depuis le :
    20 Février 2005
    Messages :
    4371
    "J'aime" reçus :
    60
    Sexe :
    Masculin
    Habite à:
    Savigny le Temple 77176
    Utilise:
    Excel 2010 (PC)
    Bonsoir e fil
    une autre approche
    bonne fin de Soirée
    Amicalement
    Jean Marie
     

    Pièces jointes:

  11. fhoest

    fhoest XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2009
    Messages :
    1849
    "J'aime" reçus :
    75
    Page d'accueil :
    Utilise:
    Excel 2010 (PC)

Partager cette page