Interaction ListView / Classeur / ListBox

Résolu
Tim D - 20 mai 2015 à 11:48
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
- 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.

2 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 20/05/2015 à 17:50
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.
0
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
0
Whismeril
Messages postés
17471
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
29 juin 2022
599
26 mai 2015 à 10:35
Message transféré dans le forum VBA
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
26 mai 2015 à 14:49
Bonjour,

Si je comprends bien, tu pourrais utiliser Split avec la virgule comme séparateur. Ensuite, il te suffit de boucler le tableau généré et rechercher le même texte dans la listbox. Quand la valeur est trouvée,
Listbox.Selected(variable de boucle) = True 
pour cocher.

Ça prend donc une boucle pour lire chaque item généré par le Split et une autre boucle pour trouver cette valeur dans la listbox pour la cocher.
0
Merci bien je peux placer le sujet dans résolu je ne connaissais pas le Split et c exactement ce dont j'avais besoin.
0
Voila ce que sa donne pour les curieux:

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
GoTo Suivant
End If
Next j
Suivant:
Next i
End If
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
14 > 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
0