listview click

eneru

XLDnaute Nouveau
listview

Bonjour tout le monde,

J'explique mon probleme, j'ai une listview qui affiche un résultat à partir de 4feuilles du classeur excel (via une combobox qui contient comme choix : feuil1, Feuil2, Feuil3, Feuil4).
Dans chaque feuilles les titres des colonnes sont différents.
J'ai créé des textbox correspondant aux titres des colonnes de chaque feuille du classeur dans l'userform qui contient la listview.

Voila ce que je cherche à faire :
- clicker sur une ligne de la listview pour que les differentes parties s'affiches dans les textbox correspondantes. Sachant que, par exemple, la colonne 1 sera différente selon la feuille selectionner dans la listview.

Pour l'instant le code que j'ai ne prend pas en compte les differences de titre des colonnes des differentes feuilles :

Private Sub ListView1_Click()
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Selected = True Then
TextBox12 = ListView1.ListItems(i).Text
TextBox11 = ListView1.ListItems(i).ListSubItems(2).Text
TextBox4 = ListView1.ListItems(i).ListSubItems(3).Text
TextBox9 = ListView1.ListItems(i).ListSubItems(4).Text
End If
Next
End Sub

je sais pas si j'ai été très claire.
Je joint un bout de mon fichier pour plus de visibilité.
 

Pièces jointes

  • test1.zip
    46.7 KB · Affichages: 102
  • test1.zip
    46.7 KB · Affichages: 97
  • test1.zip
    46.7 KB · Affichages: 100
Dernière édition:

MuscatMimi

XLDnaute Accro
Re : listview click

Salut eneru

Tiens regarde en piéce jointe le brouillon d'une partie d'une appli que j'avais commencé
je pense que cela te conviendra , a toi de l'adapter a tes besoins

Bonne nuit
 

Pièces jointes

  • ListView Double Cliq 13 Colonnes OK.xls
    128.5 KB · Affichages: 192
Dernière édition:

eneru

XLDnaute Nouveau
Re : listview click

Merci vaucluse immo pour ta réponse.
Malheuresement j'ai toujours pas réussi ce que je veux.

En fait pour être plus claire, ce que je voudrais c'est par exemple :
texbox12 = feuil 1, colonne 1
texbox13 = feuil 2, colonne 1
texbox14 = feuil 1, colonne 2
texbox15 = feuil 2, colonne 2
...

Pour l'instant mon code ne prend en compte que les titres de la feuil1. Alors que les titres des colonnes sont differentes sur les autres feuilles (j'ai créé des textbox correspondant à chaque colonne).
 

bqtr

XLDnaute Accro
Re : listview click

Bonsoir eneru, vaucluse immo

Si je comprends bien essaye ceci :

Place le nom de tes colonnes dans la propriété "Name" de chaque TextBox.
Ensuite remplace ta procédure "ListView1_Click()" par cell-ci :
Code:
Private Sub ListView1_Click()
  For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Selected = True Then
       Controls(ListView1.ColumnHeaders(1).Text) = ListView1.ListItems(i).Text
       For j = 1 To ListView1.ColumnHeaders.Count - 1
         Controls(ListView1.ColumnHeaders(j + 1).Text) = ListView1.ListItems(i).ListSubItems(j).Text
       Next
    End If
  Next
End Sub
De cette manière les TB correspondant au nom des colonnes de la Listview se rempliront et uniquement ceux là.

A+
 
Dernière édition:

eneru

XLDnaute Nouveau
Re : listview click

Bonjour bqtr,

Tout d'abord merci pour ta réponse.
J'ai essayé ce que tu m'as indiqué mais cela me provoque une erreur au niveau de la ligne surligné :

Code:
Private Sub ListView1_Click()
  For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Selected = True Then
       Controls(ListView1.ColumnHeaders(1).Text) = ListView1.ListItems(i).Text
       For j = 1 To ListView1.ColumnHeaders.Count - 1
         [COLOR="Red"]Controls(ListView1.ColumnHeaders(j + 1).Text) = ListView1.ListItems(i).ListSubItems(j).Text[/COLOR]
       Next
    End If
  Next
End Sub

Cela me met "objet spécifié introuvable"

voilà.
a+
 

bqtr

XLDnaute Accro
Re : listview click

Re,

Effectivement il y a des colonnes masquées dans la listview et à ces colonnes ne correspond aucun TB. De plus la propriété "Name" n'aime pas les espaces.

Voici une autre proposition :
Le seul TB vraiment commun dans la listview quelque soit la feuille sélectionnée et le TB "Désignation" (toujours en 1er). Donc nommer le TB (propriété "Name") => "Désignation"
Pour les autres TB utiliser la propriété "Tag", y mettre le nom de chaque colonne
Code:
Private Sub ListView1_Click()
Dim Ctrl As Control
Dim i As Integer, j As Byte
  For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Selected = True Then
       Controls(ListView1.ColumnHeaders(1).Text) = ListView1.ListItems(i).Text
       For j = 1 To ListView1.ColumnHeaders.Count - 1
           If j <> ListView1.ColumnHeaders.Count - 1 Then
              For Each Ctrl In Controls
                 If TypeName(Ctrl) = "TextBox" And Ctrl.Tag = ListView1.ColumnHeaders(j + 1).Text Then
                    Ctrl.Value = ListView1.ListItems(i).ListSubItems(j).Text
                 End If
              Next Ctrl
           End If
       Next
    End If
  Next
End Sub

Il faut aussi supprimer la colonne B de la feuille "Peinture" ou la placer ailleurs. Faire en sorte qu'elle ne soit pas prise en compte dans la Listview.
A+
 

eneru

XLDnaute Nouveau
Re : listview click

Cela marche, merci beaucoup.

Chaque colonne se met bien dans la bonne textbox, par contre quand je click sur une autre ligne, quand une cellule de cette ligne est vide, cela va garder la valeur qui était inscrite sur par la ligne précedemment selectionné.

EX :
Si je click sur une ligne, cela va prendre la valeur de la colonne commentaire et la placer dans la textbox correspondante :
COMMENTAIRE = BLABLA

Je click sur une autre ligne où il n'y a rien dans "commentaire", pourtant au lieu de laisser un blanc, cela garde la valeur précédente.
COMMENTAIRE = BLABLA au lieu de COMMENTAIRE =
 

bqtr

XLDnaute Accro
Re : listview click

Re,

Etrange comme comportement, en testant sur ton fichier je n'ai pas ce problème.
Si la colonne de la listview est vide, normalement le TB s'efface ce qui me parrait logique au vu du code.

Je ne vois pas trop quoi te dire, place un autre exemple de ton fichier avec le problème en PJ.

Bonne soirée.
A+
 

eneru

XLDnaute Nouveau
Re : listview click

Je me suis mal exprimé, excuse moi.

Ce que je voulais dire c'est qu'au changement d'index dans ma combobox, l'affichage de ma listview change (normal ^^). Donc quand une colonne se trouve dans la listview concernant tel index, et qu'elle ne s'y trouve pas dans un autre index, cela n'effacera pas ce qu'il y a dans la textox correspondante à la colonne de la ligne precedemment selectionné dans l'autre index.

EX :
Dans la barre "rechercher" tu tape "P", puis dans la combobox tu selectionne "PEINTURES".
Click sur la ligne affiché dans la listview, ensuite selectionne dans la combobox "MURAUX", reclick sur la ligne affiché. Tu verra que ce qui est affiché dans la textbox "conditions spécifiques" ne va pas s'effacer.
Du fait que cette colonne n'existe pas dans "MURAUX" et qu'il y a donc rien pour la remplacer.

J'espère avoir été claire ^^

A+

Mon fichier test : Cijoint.fr - Service gratuit de dépôt de fichiers
 

bqtr

XLDnaute Accro
Re : listview click

Re,

Je n'ai pas accés à Cijoint sur le PC où je suis donc :
Voici une procédure pour effacer tout les TB. (ceux qui ont la propriété "Tag" non vide, les autres seront ignorés)

Dans les macro "TextBox1_change" et "Combobx1_Change" fait appel à cette macro après l'instruction qui efface la listview.
Pense aussi à rajouter quelque chose dans la propriété "Tag" du TB "Désignation" si ce n'est pas déjà fait pour qu'il soit pris en compte.

Code:
Private Sub Efface_TB()
Dim Ctrl As Control
For Each Ctrl In Controls
   If TypeName(Ctrl) = "TextBox" And Ctrl.Tag <> "" Then Ctrl = ""
Next Ctrl
End Sub

A+
 

eneru

XLDnaute Nouveau
Re : listview click

ça marche impeccablement bqtr.

Encore une fois merci.

Juste une derniere chose. C'est un probleme different que j'ai depuis un bon bout de temps.

Quand je sélectionne un index dans ma combobox avant d'écrire ma recherche, cela provoque une erreur. J'ai pas réussi à résoudre ce probléme. Au cas où tu aurais une idée, je tente ma chance :).


Passe une bonne journée.
eneru (Yann)
 

bqtr

XLDnaute Accro
Re : listview click

Re,

C'est tout à fait normal au vu de ton code.
Quand tu sélectionnes un item dans la combobox (avant d'avoir entré une donnée dans le TB) tu déclenches la procédure "Combobox1_Change". Dans cette dernière tu écris que si le TB1 est vide alors on sort. Mais comme tu sors les variables "rWs" et "T" ne sont pas initialisées.

Quand ensuite tu entres une donnée dans le TB1 tu déclenches la procédure "Texbox1_Change" qui elle même déclenche la procédure "ChercheItem".
Cette dernière utilise les variables "rWs" et "T" mais comme elles ne sont pas initialisées tu as l'erreur. CQFD :D enfin je pense.

A+
 

eneru

XLDnaute Nouveau
Re : listview click

Et il y a un moyen de résoudre ce souci? Ou je vais devoir faire avec? (il y aura surment plusieurs personnes qui utiliseront ce fichier à l'avenir, sa m'embête de laisser ce petit inconvénient)

Petit remarque amusante (enfin c'est relatif :)), quand on effectue une recherche normal, qu'ensuite je remet à zero la listview (avec le bouton que j'ai mis pour cela), et que cette foi j'effectue la recherche en selectionnant un item en 1er dans ma combobox, à ce moment là plus aucune erreur apparaît.
 

bqtr

XLDnaute Accro
Re : listview click

Re,

Là encore c'est le fonctionnement normal si j'ose dire, les variables "rWs" et "T" ne sont pas remises à zéro donc le code ne génére pas d'erreur.

Pour ton problème, je pense qu'en ajoutant un bouton supplémentaire pour lancer la recherche cela le réglerait. (surtout si d'autres personnes doivent utiler le fichier)

Dans le code du bouton, tu vérifies si le TB1 et la ComboBox sont bien renseignés, si ce n'est pas le cas une petite MsgBox pour signaler le problème. Si c'est ok tu vides les TB, la listview puis tu lances ta recherche.
Cela évite les ennuis causés par les procédures "_Change" qui peuvent provoquer des résultat inattendus.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 889
Membres
101 831
dernier inscrit
gillec