Tim D
-
20 mai 2015 à 11:48
pijaku
Messages postés12263Date d'inscriptionjeudi 15 mai 2008StatutModérateurDernière intervention15 mars 2023
-
29 mai 2015 à 10:36
-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.
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.
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
Whismeril
Messages postés18624Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 septembre 2023629 26 mai 2015 à 10:35
Message transféré dans le forum VBA
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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.
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
pijaku
Messages postés12263Date d'inscriptionjeudi 15 mai 2008StatutModérateurDernière intervention15 mars 202314
>
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