Interaction ListView / Classeur / ListBox [Résolu]

Tim D - 20 mai 2015 à 11:48 - Dernière réponse : pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention
- 29 mai 2015 à 10:36
Bonjour,

Tout d'abord j'explique rapidement mon contexte,

Je dispose d'une "BDD" mon classeur excel:

-7 onglets (Lundi, Mardi, [...], Vendredi, motifs, synthèse_hebdomadaire

-un formulaire de saisie avec une partie affichage ou il y a 5 onglets (Lundi, [...], Vendredi) dans lesquels se trouvent des ListView reprenant les onglets correspondant du classeur excel et une autre partie avec 6 champs de saisie:
-4 TextBox
-1 CheckBox "Retour"
-1 ListBox (affichée uniquement si la CheckBox est cochée) reprenant le contenu de l'onglet motif qui est une liste de motifs (en sachant qu'une variation du nombre de motif peut varier dans le temps) une colonne seulement, on peut sélectionner plusieurs motifs (c'est entre autre la raison de mon soucis)

Voilà, je souhaite que lorsque l'on double clique sur une ligne d'une ListView que les champs de mon formulaire se remplissent automatiquement, pour les TextBox et la CheckBox pas de soucis par contre pour la ListBox je ne vois pas comment savoir quelle ligne sélectionner en fonction du contenu de la cellule du classeur. Car lorsque je fais une saisie je peux choisir plusieurs éléments de la ListBox et dans la cellule je concatène par la suite chaque éléments sélectionnés que je sépare par une virgule et un espace (", "), voila j'aimerai savoir comment je pourrais récupérer chacun des éléments distinctement afin de pouvoir lorsque je double clique sur une des lignes de ma ListView que les bons motifs soient sélectionnés dans ma ListBox.

Merci d'avance pour vos réponses si vous avec des questions quelconques ou que vous souhaitez voir le code correspondant ou des captures d'écran n'hésitez pas.
Afficher la suite 

Votre réponse

11 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 20/05/2015 à 17:50
0
Utile
Bonjour,
Je crains fort que l'on s'y perde (et probablement toi aussi) dans ces explications qui s'apparentent à un labyrinthe !
Essaye d'aller à l'essentiel, en isolant la
seule
difficulté que tu rencontres (cette seule partie, en l'isolant de tout ton contexte).
Je ne comprends par ailleurs pas où intervient, dans cette affaire, le logiciel VB.Net (sous-forum dans lequel tu as ouvert la présente discussion)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
0
Utile
Bonjour,

je développe sous VBA et j'avoue que j'ai beaucoup de mal à exprimer mon besoin donc je vais essayer de faire au plus simple.

Je saisie des enregistrements dans mon classeur par le biais d'un formulaire, j'affiche toutes les enregistrements du classeur dans un ListView et je veux que lorsque je double clique sur une ligne de ma ListView que les champs du formulaire soient remplis automatiquement avec les valeurs de la ligne afin de les modifier.
Pas de soucis pour remplir automatiquement les TextBox et checkBox, par contre un des champs est une liste à choix multiple (ListBox), car en effet dans le classeur je ne dispose que d'une seule cellule par ligne pour ce champs donc je concatène les éléments sélectionnés l'un aprés l'autre séparés d'une virgule et un espace.
Seulement lorsque qu'il s'agit de "re-sélectionner" les éléments de la ListBox pour la modification je ne voit pas comment faire y'a-t-il une solution ou dois-je faire autrement ? Merci d'avance
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention > Tim D - 27 mai 2015 à 13:09
Bonjour,

Juste une petite incruste sur ce sujet pour une légère modification...
On peut éviter de se servir du Goto en sortant simplement de la boucle For j, Next :
If Me.Controls("ListView" & jour).SelectedItem.SubItems(5) <> "" Then
            'testArray = Split(Me.Controls("ListView" & jour).SelectedItem.SubItems(5), ", ")
            testArray = Split(testString, ", ")
            For i = 0 To UBound(testArray)
                For j = 0 To ListBoxMotifs.ListCount - 1
                    If testArray(i) = ListBoxMotifs.List(j) Then
                        ListBoxMotifs.Selected(j) = True
                        Exit For
                    End If
                Next j
            Next i
        End If
Merci :) Et petite question est ce que cela change quelque chose en temps d'exécution ? Ou en conso de ressources ? Merci d'avance
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention > Tim D - 28 mai 2015 à 13:40
Bonjour,

Cette méthode ne changera en rien ni le temps d'exécution, ni la conso en ressources. En même temps, à ce niveau là, c'est très faible.

Le GoTo est à utiliser avec parcimonie et précautions.
En effet, trop utilisé au sein d'un même code, transforme le-dit code en "plat de spaghetti" particulièrement ardu à maintenir.

Ce n'est pas le cas ici, bien sur. C'est pourquoi je te propose juste une alternative à l'utilisation de GoTo.
Bonjour,

Je me doutais que c'était surtout en rapport avec la clarté du code merci.
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention > Tim D - 29 mai 2015 à 10:36
Bonjour,

Maintenant, si ton sujet est résolu, il convient de le signaler à la communauté.
Pour cela, il te suffit de cliquer sur le bouton adéquat situé au niveau de ta demande, en haut de cette page.
A++
Commenter la réponse de Tim D

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.