Sélection dans une listbox

Bonjour,

Je patine dans la semoule depuis 24 avec ce code qui est sensé m'afficher dans une variable à partir d'un DLG et un bouton valider
le choix dans une listbox mais qui ne provoque pas d'erreur mais qui me retourne ... rien !
Voici ce code :

Sub affich_choix_feuille()

      Dim MaBibli As Object
      Dim MonDlg As Object
      Dim MonControle As Object
      Dim MonChoix As String
      MaBibli = DialogLibraries.GetByName("Standard")
      MonDlg = MaBibli.getByName("Dialog1") ' nom du DLG
      MonControle = CreateUnoDialog(MonDlg)
      MonChoix = MonControle.getControl("ListBox1").SelectedItem ' ListBox1 nom du LSB
      MsgBox MonChoix

End Sub

Merci de votre aide
Cordialement
Michel

Bonjour

Ton code déclare et initialise des variables mais n'exécute pas le
dialogue donc il est normal que tu n'obtiennes rien.

Ton message et le nom de ta procédure me font supposer que le
dialogue est exécuté dans une autre procédure et qu'ici tu souhaites,
le dialogue étant toujours ouvert, cliquer sur un bouton et "traiter"
le choix fait par l'utilisateur.

Si c'est bien cela, il ne faut pas re-déclarer les variables et les
initialiser. Il faut avoir déclaré la variable "contrôle" en dehors
de la procédure de manière à la rendre accessible dans toutes les
procédures du module.

La procédure valider_dlg() ci-dessous illustre cela. Elle doit être
associée
à un bouton de type "par défaut" inséré dans le dialogue.

La procédure ouvr_dlg() ci-dessous illustre comment créer et exécuter
le dialogue puis tester le résultat.

Si l'utilisateur à fermé le dialogue par Ok (le dialogue doit
comprendre un bouton de type Ok) on affiche l'élément sélectionné
dans la liste.

option explicit

Dim MonControle As Object

Sub ouvr_dlg()
     Dim MonDlg As Object
     DialogLibraries.LoadLibrary("Standard")
     MonDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
     MonControle = MonDlg.getControl("ListBox1")
   with MonControle
     .removeItems(0, .ItemCount)
       .additems(thiscomponent.sheets.elementNames, 0)
     end with
     if MonDlg.Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
then
       msgbox MonControle.selectedItem
   end if
End Sub

sub valider_dlg()
  msgbox MonControle.selectedItem
end sub

DialogListeFeuilles.ods
<http://nabble.documentfoundation.org/file/n4019331/DialogListeFeuilles.ods>

Cordialement

Pierre-Yves

Pierre-Yves,
Merci pour ton aide

Je joins ci-dessous le code correct sur un bouton de type OK (label "Valider" pour l'utilisateur)

option explicit

Dim MonControle As Object

Sub ouvr_dlg()
      Dim MonDlg As Object
      Dim MonDoc As Object
      Dim LesFeuilles As Object
      Dim LaFeuille As Object
      Dim selectionFeuille As String
      MonDoc = ThisComponent
      DialogLibraries.LoadLibrary("Standard")
      MonDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
      MonControle = MonDlg.getControl("ListBox1")
      with MonControle
          .removeItems(0, .ItemCount)
          .additems(thiscomponent.sheets.elementNames, 0)
      end with
      if MonDlg.Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
          selectionFeuille = MonControle.selectedItem
          LesFeuilles = MonDoc.Sheets
          LaFeuille = LesFeuilles.getByName(selectionFeuille)
          MonDoc.CurrentController.ActiveSheet = (LaFeuille)
      end if
End Sub

Cordialement
Michel

Bonjour

Blanchard Michel wrote

Merci pour ton aide

:slight_smile:

Blanchard Michel wrote

Je joins ci-dessous le code correct sur un bouton de type OK

Attention, l'utilisateur peut très bien avoir cliqué sur Ok sans
sélectionner. On pourrait sélectionner par défaut et par programme
un élément mais ce n'est pas toujours le mieux (il peut arriver que
l'utilisateur veuille simplement *ne rien faire*. Dans ce cas il
suffit d'ajouter un test de la sélection du type :

if MonDlg.Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
     if MonControle.selectedItem <> "" then
           msgbox MonControle.selectedItem
    end if
end if

Merci,
A+
Cordialement
Michel

Bonjour,
Voir fichier ZIP reprenant quelques procédures de navigation dans les feuilles d'un le classeur.
Cordialement
Michel
http://www.inforbur.com/07_feuilles_dans_liste.zip