Listview et Remplissage de textbox

JONEY76

XLDnaute Occasionnel
Bonjour à tous,

Petit problème de code

J'ai une listview et à coté, il y a 27 textbox

Erreur 35600 - problème d'index

J'ai mis ?? sur la ligne de l'erreur

Que dois je mettre exactement à la place des ??, j'ai tenté 27 comme le nombre de texbox et ça marque index hors limites


Code:
'#################################################
'REMPLIR LES TEXTBOX APRES AVOIR SELECTIONNER UNE LIGNE
'#################################################

Private Sub LSVB_Click()
Dim J
Dim Idx As Long
Dim LIGNE As Long


With LSVB
If .ListItems.Count = 0 Then Exit Sub
Idx = .SelectedItem.Index
LIGNE = CInt(.ListItems(.SelectedItem.Index).ListSubItems(??).Text)
TB2 = .SelectedItem
    For J = 1 To .ColumnHeaders.Count - 2
        Controls("TextBox" & J + 2) = .ListItems(.SelectedItem.Index).ListSubItems(J).Text
    Next
End With
End Sub
 

JONEY76

XLDnaute Occasionnel
Re : Listview et Remplissage de textbox

Voici mon code complet

Code:
'#################################################
'REMPLIR LES TEXTBOX APRES AVOIR SELECTIONNER UNE LIGNE
'#################################################

Private Sub LSVB_Click()
Dim J
Dim Idx As Long
Dim LIGNE As Long


With LSVB
If .ListItems.Count = 0 Then Exit Sub
Idx = .SelectedItem.Index
LIGNE = CInt(.ListItems(.SelectedItem.Index).ListSubItems(??).Text)
TB2 = .SelectedItem
    For J = 1 To .ColumnHeaders.Count - 2
        Controls("TextBox" & J + 2) = .ListItems(.SelectedItem.Index).ListSubItems(J).Text
    Next
End With
End Sub

'#################################################
'INITIALIZE
'#################################################
Private Sub UserForm_Initialize()

'pour ne pas faire apparaitre les messages d'erreur
Application.DisplayAlerts = False

On Error Resume Next

'adapter la taille de l'userform à la taille de l'écran
Me.Height = Application.Height
Me.Width = Application.Width

'Déclarer les variables
Dim txttotal2
Dim plage
Dim cel
Dim DTPicker1 As Object


DTPicker1.Value = Sheets("bd1").Range("I4")


With Me.LSVB   'Me=cet userform et LSVB =nom de la listview
        With .ColumnHeaders
            .Clear
            
            .Add , , "ARTICLE", 60 '60=dimension de la colonne de la listview
            .Add , , "DESIGNATION", 140
            .Add , , "DEV-LOG", 35 'devis/LOG
            .Add , , "METH", 35 'methodes
            .Add , , "MODE", 35 'modelage
            .Add , , "FOND", 35 ' fonderie
            .Add , , "PARA", 35 ' para
            .Add , , "CONT", 35 'controle
            .Add , , "CHANTIER", 40
            .Add , , "NUANCE", 40
            .Add , , "COULEE SPECIALE", 40
            .Add , , "CLIENT", 80
            .Add , , "QUANTITE", 60
            .Add , , , 0
           
        
        End With

        .View = 3                   ' type Report
        .Gridlines = True           ' affichage de lignes
        .FullRowSelect = True       ' sélection complète de la ligne
        .HideColumnHeaders = False  ' afficher les en-têtes de colonnes
        .LabelEdit = 1              ' ne pas autoriser la saisie
 
   End With
   

'effacer la listview
LSVB.ListItems.Clear

'Remplir la listview avec les données de la base de la feuille BD1
With Sheets("bd1")

'Afficher les données jusqu'à la dernière ligne trouvée
    Set plage = .Range("A4:A" & .Range("A65000").End(xlUp).Row)
    
    For Each cel In plage
        With LSVB
            .ListItems.Add , , cel
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 1)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 2)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 3)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 4)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 5)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 6)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 7)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 9)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 11)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 12)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 13)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 14)
         
        End With
    Next
End With


'inscrire le nombre de lignes trouvées dans le label12
txttotal2 = LSVB.ListItems.Count
Label12 = txttotal2


End Sub

'#################################################
'AFFICHER TOUTES LES LIGNES SAISIES
'#################################################
Private Sub CommandButton3_Click()


'Déclarer les variables
Dim txttotal2
Dim plage
Dim cel

On Error Resume Next


'Mettre les noms dans les entêtes
With Me.LSVB   'Me=cet userform et LSVB =nom de la listview
        With .ColumnHeaders
            .Clear
            
            .Add , , "ARTICLE", 60 '60=dimension de la colonne de la listview
            .Add , , "DESIGNATION", 140
            .Add , , "DEV-LOG", 35 'devis
            .Add , , "METH", 35 'methodes
            .Add , , "MODE", 35 'modelage
            .Add , , "FOND", 35 ' fonderie
            .Add , , "PARA", 35 ' para
            .Add , , "CONT", 35 'controle
            .Add , , "CHANTIER", 40
            .Add , , "NUANCE", 40
            .Add , , "COULEE SPECIALE", 40
            .Add , , "CLIENT", 80
            .Add , , "QUANTITE", 60
            .Add , , , 0
           
        
        End With
        .View = 3                   ' type Report
        .Gridlines = True           ' affichage de lignes
        .FullRowSelect = True       ' sélection complète de la ligne
        .HideColumnHeaders = False  ' afficher les en-têtes de colonnes
        .LabelEdit = 1              ' ne pas autoriser la saisie
 
   End With
   

'effacer la listview
LSVB.ListItems.Clear

'Remplir la listview avec les données de la base de la feuille BD1
With Sheets("bd1")

'Afficher les données jusqu'à la dernière ligne trouvée
    Set plage = .Range("A4:A" & .Range("A65000").End(xlUp).Row)
    
    For Each cel In plage
        With LSVB
            .ListItems.Add , , cel
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 1)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 2)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 3)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 4)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 5)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 6)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 7)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 9)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 11)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 12)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 13)
            .ListItems(.ListItems.Count).ListSubItems.Add , , cel.Offset(0, 14)
         
        End With
    Next
End With



'inscrire le nombre de lignes trouvées dans le label12
txttotal2 = LSVB.ListItems.Count
Label12 = txttotal2

End Sub

'#################################################
'RECHERCHE LA SAISIE DANS LA TEXTBOX
'#################################################
'partie1

Private Sub CommandButton4_Click()
'Déclarer les variables
Dim i As Long
Dim c As Range
Dim txttotal2

'vider la listview
LSVB.ListItems.Clear

'si texte de recherche ="" alors on sort
If TB2 = "" Then Exit Sub

'recherche
With Sheets("BD1")
    i = 4 'la 1ere ligne de données est à la ligne 4 du tableur
    Do
    For Each c In .Range(.Cells(i, 1), .Cells(i, 7))
            If UCase(CStr(c.Value)) = UCase(TB2.Value) Or InStr(CStr(c), TB2) > 0 Then
                IniLvw12 c.Row 'appel de la procédure inilvw12
                Exit For
            End If
    Next c
        i = i + 1
    Loop While .Cells(i, 1) <> ""
    
End With


'compter le nombre de lignes trouvées
    txttotal2 = LSVB.ListItems.Count
'inscrire le nombre de lignes trouvées dans le label
    Label12 = txttotal2
End Sub

'partie2
Sub IniLvw12(a As Long)
 On Error Resume Next

Dim x
Dim i
Dim J



With LSVB

    .ListItems.Add , , Sheets("BD1").Cells(a, 1)
    x = .ListItems.Count
    For i = 1 To 8
        .ListItems(x).ListSubItems.Add , , Sheets("BD1").Cells(a, i + 1)
    Next
    .ListItems(x).ListSubItems.Add , , a
    For i = 1 To .ListItems.Count
        If .ListItems(i) = TB2 Then .ListItems(i).Bold = True
        For J = 1 To .ColumnHeaders.Count - 1
            If .ListItems(i).ListSubItems(J).Text = TB2 Then
                .ListItems(i).ListSubItems(J).Bold = True
            End If
        Next J
    Next i
    
End With
With Me.LSVB   'Me=cet userform et LSVB =nom de la listview
        With .ColumnHeaders
            .Clear
            
            .Add , , "ARTICLE", 60 '60=dimension de la colonne de la listview
            .Add , , "DESIGNATION", 140
            .Add , , "DEV-LOG", 35 'devis
            .Add , , "METH", 35 'methodes
            .Add , , "MODE", 35 'modelage
            .Add , , "FOND", 35 ' fonderie
            .Add , , "PARA", 35 ' para
            .Add , , "CONT", 35 'controle

           
        
        End With
        .View = 3                   ' type Report
        .Gridlines = True           ' affichage de lignes
        .FullRowSelect = True       ' sélection complète de la ligne
        .HideColumnHeaders = False  ' afficher les en-têtes de colonnes
        .LabelEdit = 1              ' ne pas autoriser la saisie
 
   End With
End Sub


'#################################################
'BOUTON SUPPRIMER LIGNE SELECTIONNEE
'#################################################

Private Sub CommandButton5_Click() 'VISUALISATION  Supprim
'Déclarer les variables
Dim SuppLigne As Long

'Si erreur allez à "fin"
On Error GoTo fin

SuppLigne = Me.LSVB.SelectedItem.Index + 1
With Me.LSVB
.ListItems.Remove .SelectedItem.Index
Worksheets("bd1").Rows(SuppLigne).Delete Shift:=xlUp
End With

'gestion d'erreur
fin:
End Sub


Mon tableau complet fait plus de 50 colonnes

Je voulais faire apparaitre les 14 premeire en listview
et le reste en textbox modifiables
 

tototiti2008

XLDnaute Barbatruc
Re : Listview et Remplissage de textbox

Re,

Le plus simple serait sans doute de retenir le numéro de la ligne concerné (de ton tableau) et de lire le contenu de la cellule, non ?
Si ces informations n'ont pas à être affichées dans le Listview, pourquoi essayer de les lire dans le ListView ?
 

JONEY76

XLDnaute Occasionnel
Re : Listview et Remplissage de textbox

Re,

Je viens d'ajouter les 41 colonnes

Ca fonctionne sauf que j'ai un décalage dans la listview à partir de 300 lignes

Le décalage n'apparait pas dans le tableau, mais seulement dans la listview
 

Discussions similaires

Réponses
4
Affichages
1 K

Statistiques des forums

Discussions
312 156
Messages
2 085 819
Membres
102 991
dernier inscrit
justingr