Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Jackfly

XLDnaute Nouveau
Bonjour,

J'ai créé un listview de plusieurs lignes et colonnes (ex: 10 lignes et 4 colonnes).
Je souhaiterais pouvoir modifier des valeurs dans ce tableau en cliquant directement sur la cellule choisie.

Ainsi, si je clique sur la cellule de la 3ème ligne et 2ème colonne, j'arrive à récupérer le numéro de la ligne, mais pas celui de la colonne... ?

pour connaître le numéro de la ligne sur laquelle j'ai fait un clic :
ligne = ListView1.SelectedItem.Index
mais comment fait-on pour connaître le numéro de la colonne :
colonne = ???

et puis, je vais modifier la valeur de la cellule (ligne = 3, colonne = 2 ) :
With ListView1
.ListItems(ligne).ListSubItems(colonne).Text = nouvelle valeur de la cellule
End With

Comment obtenir ce numéro de colonne ?

Merci pour votre aide
 
Dernière édition:
G

Guest

Guest
Re : LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Re,

voici le fichier modifié.
En effet l'évènement Initialize ne se lançait pas.
Il fallait juste le recréer et ré-enregistrer.

Le tableau est à déclarer en tête du module du userForm, inutile dans un module général.
Il contient les positions gauches (.left) des colonnes du ListView. La première étant forcément = 0

Pour le x il donne la position au moment ou le bouton de souris est relaché. Voir l'aide en ligne sur MouseUp

Pour le 1 de Match, voir l'aide en ligne d'excel sur la fonction EQUIV.
Extrait:
1 ou omis La fonction EQUIV recherche la valeur la plus élevée qui est inférieure ou égale à celle de l’argument valeur_cherchée. Les valeurs de l’argument matrice_recherche doivent être placées en ordre croissant, par exemple : ...-2, -1, 0, 1, 2, ..., A-Z, FAUX, VRAI.

La position x sur MouseUp est recherchée dans le tableau, et Match va trouver la valeur la plus élevée <= à x . (donc la limite gauche de la colonne) et renverra sa postion dans le tableau 1 2 ou 3

A+
 
Dernière modification par un modérateur:

Bebere

XLDnaute Barbatruc
Re : LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

une question à Hasco
Quelle syntaxe pour utiliser une listview dans une feuille de calcul
à l'ouverture du fichier ,il y a un x en rouge qui apparait à l'emplacement(excel2003)
 
G

Guest

Guest
Re : LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Re,

@Bebere, déjà avec un bonjour, cela irait mieux.

Je n'ai jamais utilisé de listview dans une feuille excel.
Il y a beaucoup de contrôle activeX qu'excel gère mal ou ne peut gérer sur les feuilles de calcul.

Sinon, boîtes à outils contrôles, cliquer sur le bouton 'autres contrôles" et choisir: Microsoft ListView Control Version 6.xx

A+
 
Dernière modification par un modérateur:

Jackfly

XLDnaute Nouveau
Re :[RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Re Hasco,

MERCI ! merci pour les précisions...
En te lisant, je viens "seulement" de me rendre compte que le "application.match" était l'utilisation dans VBA de la fonction EQUIV... ! oups...
Moi y en a comprendre un peu mieux maintenant !! Merci encore !

Extra... j'en apprends tous les jours un peu plus, merci à tous (surtout à Hasco) pour son aide, son temps...

Je fonce essayer d'appliquer tout ça dans mon pgm...
A bientôt

Jackfly

EDIT : SUPER ! ça fonctionne !
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bonsoir Jackfly, Bebere, et à ceux qui passeront par ici,

Au risque de déplaire aux puristes, je te joins une façon de faire
dont j'aurais tenté d'explorer le principe:

Voir le Classeur joint.

Les Labels récupérant les coordonnées des cellules concernées ne sont qu'accessoires.
L'utilisation de variables "Public" serait plus propre.

Par ailleurs, je n'applique pas la modification immédiate possible dans la ListView.
Je crois me souvenir que j'en ai montré l'exemple dans mon Classeur précédent.

Il y a deux écoles:
1) On apporte directement la modification dans la Feuille.
2) On change les Items, ou SubItems de la ListView et on écrit par la suite dans la base de données.

Tu sauras certainement adapter.

Il ne faut pas perdre de vue que je ne suis qu'un béotien qui tente d'aider avec ses moyens.

Amicalement, et au plaisir de te lire.

Yann
 

Pièces jointes

  • RE_TRUC.xls
    30 KB · Affichages: 160

YANN-56

XLDnaute Barbatruc
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bebere à 12h 15:
bonjour Yann,Hasco,Jacky

Bebere à 12h 40:
une question à Hasco
.......

Hasco à 12h58:
@Bebere, déjà avec un bonjour, cela irait mieux.

Sans commentaire sur les codes!!!

Yann
 

Jackfly

XLDnaute Nouveau
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bonjour Yann-56 et tous les autres qui me liront,

Chouette idée... j'en apprends tous les jours, c'est le but, hein ?
Seul petit bémol, il faut
a) fixer la taille des colonnes "en dur" et en déduire la valeur de "X" pour sa limite (je n'ai pas compris comment une largeur de 100 "obligeait" à fixer la limiter à ±130 ? Est-ce aussi lié à la taille de la police, y-a-t-il un algorithme qui permette de la calculer (la limite)) ?
B) limiter, voir empêcher de redimensionner les largeurs des colonnes sous peine d'avoir un résultat qui ne donne plus les bonnes valeurs.
En forçant les colonnes à rester aux valeurs prescrites, cela marche du tonnerre.

J'aime bien les différents points de vues abordés... on en apprend à chaque fois un peu plus... reste maintenant à retenir tout ça dans mon pauvre petit cerveau...

@+ Jackfly
 
G

Guest

Guest
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

bonjour le fil,
Bonjour Jackfly,

Si tu as des colonnes dont les largeurs peuvent varier la solution présentée au post #3 sera peut-être plus adaptée que celle qui utilise un tableau. A moins de recharger le Tableau dans l'évènement mouseDown? à voir.

A+
bonne programation
 

Jackfly

XLDnaute Nouveau
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bonjour Hasco & Cie

J'ai essayé ton code au post #3 mais, je pense, qu'il y a un End if mal placé... il faut qu'il y en ait un avant le Else... sinon je n'ai que les valeurs 1 ou 3.

Maintenant, en y regardant de plus près, je m'aperçois que le .item(h).left ne donne "que" la limite fixé en dur (= largeur) et que cela ne correspond pas du tout à la taille des colonnes...
Je joins le fichier de Yann-56 "bidouillé" à ma sauce de façon à ce que tu puisses voir la valeur de "X" et que la limite physique de la colonne n'est pas celle du .item(h).left.
-> fait qques clics pour que le X soit proche des 100 et tu verras qu'on passe d'une colonne à une autre sans respecter la limite physique...
Est-ce correct ou bien j'ai "merdé" qque part ?
Merci
 

Pièces jointes

  • RE_TRUC(bis).xls
    43.5 KB · Affichages: 52
G

Guest

Guest
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

RE,

Oui c'est normal la différence, elle est du aux unités de mesuires différente x en pixel et .left en point.

Si c'est vraiment important pour toi je ferai un truc pour corrigé ça dès que j'aurai le temps.

A+
 

YANN-56

XLDnaute Barbatruc
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bonsoir Jackfly, et à ceux qui passeront par ici,

Effectivement, ma précédente solution a des contraintes!

La modification des largeurs de colonnes peut être gérée par le pourcentage de celles-ci par rapport à celle de la ListView, mais là on entre dans des calculs un peu fastidieux.

La taille de la Police n'a aucune incidence, et le coefficient de traduction de la largeur de 100
en 130 n'est issu que de celle empirique des points en pixels. (Pour l'essai j'ai utilisé 1/0,75)
A noter qu'il risquerait aussi d'y avoir des soucis suivant la taille et les paramètres de l'écran.

Je me suis amusé à construire un autre exemple, qui lui a cependant aussi un impératif:
Venir préalablement cliquer sur l'entête de la colonne dans laquelle on souhaite apporter des modifications.
(Mais être en phase de Modification d'une base de données doit aussi être un acte volontaire)

Amicalement.

Yann

P.S. je n'avais pas lu les réponses précédentes dont tu as bénéficié
avant de rédiger ma présente.
Il serait bien aussi que tu lises les messages privés envoyés par des XLDNautes
à ton intention. (En haut à droite "Notifications"

Aussi, il ne faut jamais mettre "Résolu"
car en matière de VBA, cela ne l'est jamais totalement. Et aussi, il n'y a pas que nous, visibles, il y aussi ceux qui suivent.
 

Pièces jointes

  • RE_TRUC_1.xls
    46.5 KB · Affichages: 84
Dernière édition:

Jackfly

XLDnaute Nouveau
Re : [RESOLU] LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bonjour à tous,

Merci pour toutes ces propositions et ces différentes façons d'aborder le problème.

Je comprends le pq du "ne jamais mette Résolu"... je viens de l'enlever

Waouw... c'est fou les idées (et la maîtrise) que vous avez tous pour arriver à proposer qque qui fonctionne !. Je vous en remercie vivement !.

J'ai maintenant du pain sur la planche pour "assimiler" ces nouvelles donnes et les intégrer dans mon très modeste petit pgm pour le boulot. N'empêche qu'avec ça, je vais en épater plus d'un au boulot... ...moi en premier

Au plaisir de vous lire une prochaine fois. Encore merci

Jackfly
 

Charly88

XLDnaute Occasionnel
Re : LISTVIEW récupérer le numéro de colonne après un clic dans une cellule

Bonsoir à tous, je potasse le fil depuis 1h et, jusqu'à sa dernière proposition, toutes mes tentatives d'adaptation des codes d'Hasco (merci !), donnent des résultats erronés tout en ayant des largeurs de colonnes fixées au départ... Est-ce que cela peut venir du problème pixel / point ou est-ce que vous pensez que j'aurais du arriver à un résultat correct ?
J'ai 14 colonnes, la première a une largeur nulle, la 2è 30 points de large, la 3è 220 et les suivantes 40... Les clics sur la 3è colonne renvoie 3 valeurs de colonnes différentes, méthode avec ou sans variable tableau.


Ma vraie question porte sur l'API utilisée. Cette dernière solution fonctionne parfaitement mais elle dépasse mes connaissances. Est-ce qu'utiliser cet élément peut présenter un risque d'incompatibilité quelconque lié à Windows ? Mon environnement test est un excel 2007 -windows 7 mais j'utiliserai mon appli dans un environnement virtualisé Excel 2007 - windows server 2003.

Merci en tous les cas pour ces exemples... J'attends avec impatience d'éventuelles précisions pour savoir si je facilite ou non la vie de mon utilisateur en utilisant cette incroyable découverte qu'est la 2è dimension :-D !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…