[Résolu] [Calc] combobox liees dans boite de dialogue

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

[Résolu] [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonjour,

J'essaie d'adapter le supreme de code trouvé sur votre forum https://forum.openoffice.org/fr/forum/v ... 15&t=13602.
En effet, j'avais reussi à imbriquer quelques codes trouvés sur ce forum pour inserer du texte dans un tableau à l'aide d'une boite de dialogue et cela fonctionne. Cependant j'aimerais dans 2 combobox (en rouge dans le dialogue de mon fichier test) les liéer ensemble afin de simplifier grandement les possibilités de choix dans ma boite de dialogue.
resultat.png
Comme dit précédemement, je me suis inspiré du supreme de code en créant une feuille de données et definir les noms mais j'obtients des messages d'erreurs.
resultat.png
Le problème c'est que j'ai pas les compétences pour adapter mon code actuel avec celui du du supreme de code pour que cela fonctionne.
Il faudrait fusionner le code de mon fichier exemple:

Code : Tout sélectionner

Global Dialog5 As Object 
  

Sub Dialogue_service

  Dim lesCellules As Object , Plage As Object 
  Dim Cellule As Object 
  Dim X As Long 
  
  
  DialogLibraries.LoadLibrary( "Standard" ) 
  'Dialog1 est le nom de la Form (clic-droit sur l'objet / propriétés / onglet Général / Nom) 
  oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog5 ) 
  
  'Indique la colonne A dans la feuille 
  Colonne = ThisComponent.Sheets.getByName("minute meeting").Columns(0) 
  Colonne1 = ThisComponent.Sheets.getByName("minute meeting").Columns(1) 
  lesCellules = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") 
  lesCellules1 = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  lesCellules.insertByName("",Colonne) 
  lesCellules1.insertByName("",Colonne1) 
  
  Plage = lesCellules.Cells.createEnumeration 
  Plage1 = lesCellules1.Cells.createEnumeration 
  
  'Boucle sur les cellules de la colonne A. 
  While Plage.hasMoreElements 
    Cellule = Plage.nextElement 
  
    '--- Remplissage de la ListBox: 
      'AddItem (Donnée à ajouter , Position dans ListBox ) 
      '0 correspond à la 1ere ligne de la ListBox 
    oDialog1.getControl("ComboBox5").AddItem (Cellule.String, X ) 
    '----------------------------- 
  
    X = X + 1
  Wend 
  
  'Affiche la boîte de dialogue 
  'oDialog1.Execute() 
  
  While Plage1.hasMoreElements 
    Cellule1 = Plage1.nextElement 
  
    '--- Remplissage de la ListBox: 
      'AddItem (Donnée à ajouter , Position dans ListBox ) 
      '0 correspond à la 1ere ligne de la ListBox 
    oDialog1.getControl("ComboBox4").AddItem (Cellule1.String, X ) 
    '----------------------------- 
  
    X = X + 1
  Wend 
  
  'Affiche la boîte de dialogue 
  'oDialog1.Execute() 
  
  
  

 dim   oCurseur As Object, oSh As Object
   Dim col As Integer, i As Integer, Validation As Integer
   Dim Lig As Long
   Dim Zone As Object, ZonesVides As Variant
   
   
   
   
     
     'Attribution des variables     
     Validation = com.sun.star.ui.dialogs.ExecutableDialogResults.OK     
     oDoc = ThisComponent
     
 
       
     'Recuperation et remplissage          
   oSh = oDoc.Sheets.getByName("MINUTE MEETING")
'   oCurseur = oSh.createCursor
'   oCurseur.GoToEndOfUsedArea(True)
'   DerLig = oCurseur.rangeAddress.endRow+1
   Zone = oSh.getCellRangeByName("N54:BQ1057")
   ZonesVides = Zone.queryEmptyCells.RangeAddresses
   Lig = ZonesVides(1).StartRow 'ZonesVides(0)est la Première zone Vide
   
   If oDialog1.Execute()  = Validation then      
   
      With oSh
         .getCellByPosition(13, Lig).String = oDialog1.getControl("ComboBox1").Text      
         .getCellByPosition(14, Lig).String = oDialog1.getControl("ComboBox2").Text
         .getCellByPosition(15, Lig).String = oDialog1.getControl("ComboBox3").Text
        .getCellByPosition(25, Lig).String = oDialog1.getControl("ComboBox4").Text 
         .getCellByPosition(24, Lig).String = oDialog1.getControl("ComboBox5").Text 
        .getCellByPosition(21, Lig).String = oDialog1.getControl("TextField5").Text 
        .getCellByPosition(16 ,Lig).String = oDialog1.getControl("TextField1").Text      
        .getCellByPosition(68, Lig).String = oDialog1.getControl("TextField2").Text      
        
      End With
   
   End If

End Sub
avec le code du supreme:

Code : Tout sélectionner

REM  *****  BASIC  *****
Global oDoc as object, oDlg as object

Sub Main
	oDoc = ThisComponent
	oBib = oDoc.DialogLibraries.GetByName("Standard")
	zDlg = oBib.GetByName("Dialog5") 
	oDlg = CreateUnoDialog(zDlg)
	aMarque = RecupMarque("A1:C1")
	RemplirListe("lMarque", aMarque)

	cOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
	if oDlg.Execute = cOK then
		sRet = oDlg.getControl("lMarque").SelectedItem & " " & _
				 oDlg.getControl("lModele").SelectedItem
		oDlg.dispose
		oDoc.CurrentSelection.String = sRet
	else
		exit Sub
	end if
	
End Sub

Sub RemplirListe(sListe, sTab)
	oListe = oDlg.getControl(sListe)
	oListe.Model.stringItemList = sTab
	oliste.selectItemPos(0, true)
End Sub

Function RecupMarque(sZone)
	oFeuil = oDoc.Sheets(1) ' La 1ere feuille est indexée à 0
	oPlage = oFeuil.getCellRangeByName(sZone)
	aTab = oPlage.DataArray
	nMax = UBound(aTab(0))
	Dim sTab(nMax)
	For i = 0 to nMax
		sTab(i) = aTab(0)(i)
	Next i
	RecupMarque = sTab 
End function

Function RecupModele(sMarque)
	oPlages = oDoc.NamedRanges
	oPlage = oPlages.getByName("Z_" & sMarque).getReferredCells()
	aTab = oPlage.DataArray
	nMax = UBound(aTab)
	Dim sTab(nMax)
	For i = 0 to nMax
		if sTab(i)(0) = "" then exit for
		sTab(i) = aTab(i)(0)
	Next i
	RecupModele = sTab
End Function

Sub ChangeListe(oEvt)
	oSrc = oEvt.Source
	sMarque = oSrc.SelectedItem
	aModele = RecupModele(sMarque)		
	RemplirListe("lModele", aModele)
End Sub	

Ci-joint mon fichier exemple:
BOITE DIALOGUE.ods
Pourriez-vous m'aidez svp?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par kikoo74910 le 08 déc. 2021 18:00, modifié 3 fois.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12660
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Calc] combobox liees dans boite de dialogue

Message par Bidouille »

Bonjour,

Pour être aidé efficacement par les bénévoles et surtout leur faire gagner du temps, veuillez fournir les éléments suivants :
  1. insérer dans le corps du message le code de la macro exposant le problème
  2. joindre un document explicatif intégrant cette macro avec les données de départ (feuille1) et le résultat à obtenir (feuille2)
  3. fournir un mode pas-à-pas permettant de reproduire ce qui a été fait ou ce que vous cherchez à faire pour arriver au problème
  4. ajouter des copies écran (situation avant / après) si cela permet de mieux comprendre
Merci de publier ces informations à la suite.
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonjour,

Modifié, j'espère que cela est désormais plus claire.

Merci de votre aide.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Calc] combobox liees dans boite de dialogue

Message par Dolev »

Bonjour,

Le suprême fonctionne avec des zones de liste.
Pourquoi utiliser des boîtes combinées ?
Elles n'ont logiquement pas les mêmes propriétés.
Open Office 4.1.15 sous Windows 11
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonjour,

N'étant pas expérimentée, j'avais choisie une combobox, mais je ne m'oppose pas à une listebox.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Calc] combobox liees dans boite de dialogue

Message par Dolev »

kikoo74910 a écrit :mais je ne m'oppose pas à une listebox.
Dans ce cas, il faut refaire ton document avec les bons contrôles :lol:
Open Office 4.1.15 sous Windows 11
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonsoir,

J'ai remplacé les 2 combobox par 2 listbox.
exemple2.ods
Par contre je n'arrive pas avoir de selection dans la listbox "sub service". J'ai pourtant bien crée les zones de noms Z_xxxxxxx
resultat.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 529
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Calc] combobox liees dans boite de dialogue

Message par Noonours »

Bonjour
kikoo74910 a écrit :Par contre je n'arrive pas avoir de selection dans la listbox "sub service". J'ai pourtant bien crée les zones de noms Z_xxxxxxx
Si tu décortiques le suprême de Dude, tu verras qu'Il faut assigner la macro "ChangeListe" à ta première ListBox.
Dans ton dialog5, onglet "Évènements" > "Exécuter l'action".

COOordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 24.8.7.2 et OpenOffice 4.1.15 sous Windows 10
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonjour,

Merci nounours, effectivement je n'avais pas vue.
Donc dans le fichier joint,la correction. Par contre je n'arrive pas a fusionner les 2 codes pour inserer mes donnéées dans le tableau.
dialogue .ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Calc] combobox liees dans boite de dialogue

Message par Dolev »

Re,
kikoo74910 a écrit :Par contre je n'arrive pas a fusionner les 2 codes pour inserer mes donnéées dans le tableau.
Je ne vois plus trop le rapport avec le problème initial.

De quel code s'agit-il ?
Colle la macro dans un message.

Comment faut-il insérer les données ?
Donne des captures d'écran du résultat.
Open Office 4.1.15 sous Windows 11
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonjour,

Le problème c'est que je n'arrive pas inserer les données de la boite de dialogue dans le tableau car je ne sais pas combiner le code que j'avais initialement avec le code du supreme de code.
Le code que j'utilise actuellement et le code du supreme sont dans le premier message. Le résultat que je souhaite obtenir est le meme que dans le fichier du premier message mais avec des combobox ou listbox liées
Le code que j'utilise actuellement permet d'inserer dans le tableau ce qu'il y a dans la boite de dialogue mais celui-ci presente quelques problèmes quand à la multitude choix que je peux faire et le rend fastidieux . C'est pour cela que souhaite lier les box ensemble. Cela me permetterias de limiter les possibilités de choix et rendre la boite de dialogue beaucoup plus fonctionnelle.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Calc] combobox liees dans boite de dialogue

Message par Dolev »

Et bien ton document est sans doute très clair pour toi mais il faudrait au minimum nous fournir un mode d'emploi.
Donc
Dolev a écrit :De quel code s'agit-il ?
Colle la macro dans un message.

Comment faut-il insérer les données ?
Donne des captures d'écran du résultat.
Open Office 4.1.15 sous Windows 11
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonjour,

Le code que j'utilise actuellement est

Code : Tout sélectionner

Global Dialog5 As Object
 

Sub Dialogue_service

  Dim lesCellules As Object , Plage As Object
  Dim Cellule As Object
  Dim X As Long
 
 
  DialogLibraries.LoadLibrary( "Standard" )
  'Dialog1 est le nom de la Form (clic-droit sur l'objet / propriétés / onglet Général / Nom)
  oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog5 )
 
  'Indique la colonne A dans la feuille
  Colonne = ThisComponent.Sheets.getByName("minute meeting").Columns(0)
  Colonne1 = ThisComponent.Sheets.getByName("minute meeting").Columns(1)
  lesCellules = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  lesCellules1 = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  lesCellules.insertByName("",Colonne)
  lesCellules1.insertByName("",Colonne1)
 
  Plage = lesCellules.Cells.createEnumeration
  Plage1 = lesCellules1.Cells.createEnumeration
 
  'Boucle sur les cellules de la colonne A.
  While Plage.hasMoreElements
    Cellule = Plage.nextElement
 
    '--- Remplissage de la ListBox:
      'AddItem (Donnée à ajouter , Position dans ListBox )
      '0 correspond à la 1ere ligne de la ListBox
    oDialog1.getControl("ComboBox5").AddItem (Cellule.String, X )
    '-----------------------------
 
    X = X + 1
  Wend
 
  'Affiche la boîte de dialogue
  'oDialog1.Execute()
 
  While Plage1.hasMoreElements
    Cellule1 = Plage1.nextElement
 
    '--- Remplissage de la ListBox:
      'AddItem (Donnée à ajouter , Position dans ListBox )
      '0 correspond à la 1ere ligne de la ListBox
    oDialog1.getControl("ComboBox4").AddItem (Cellule1.String, X )
    '-----------------------------
 
    X = X + 1
  Wend
 
  'Affiche la boîte de dialogue
  'oDialog1.Execute()
 
 
 

dim   oCurseur As Object, oSh As Object
   Dim col As Integer, i As Integer, Validation As Integer
   Dim Lig As Long
   Dim Zone As Object, ZonesVides As Variant
   
   
   
   
     
     'Attribution des variables     
     Validation = com.sun.star.ui.dialogs.ExecutableDialogResults.OK     
     oDoc = ThisComponent
     

       
     'Recuperation et remplissage         
   oSh = oDoc.Sheets.getByName("MINUTE MEETING")
'   oCurseur = oSh.createCursor
'   oCurseur.GoToEndOfUsedArea(True)
'   DerLig = oCurseur.rangeAddress.endRow+1
   Zone = oSh.getCellRangeByName("N54:BQ1057")
   ZonesVides = Zone.queryEmptyCells.RangeAddresses
   Lig = ZonesVides(1).StartRow 'ZonesVides(0)est la Première zone Vide
   
   If oDialog1.Execute()  = Validation then     
   
      With oSh
         .getCellByPosition(13, Lig).String = oDialog1.getControl("ComboBox1").Text     
         .getCellByPosition(14, Lig).String = oDialog1.getControl("ComboBox2").Text
         .getCellByPosition(15, Lig).String = oDialog1.getControl("ComboBox3").Text
        .getCellByPosition(25, Lig).String = oDialog1.getControl("ComboBox4").Text
         .getCellByPosition(24, Lig).String = oDialog1.getControl("ComboBox5").Text
        .getCellByPosition(21, Lig).String = oDialog1.getControl("TextField5").Text
        .getCellByPosition(16 ,Lig).String = oDialog1.getControl("TextField1").Text     
        .getCellByPosition(68, Lig).String = oDialog1.getControl("TextField2").Text     
       
      End With
   
   End If

End Sub
Et fonctionne avec le fichier suivant:
BOITE DIALOGUE.ods
Il permet que losque que j'insère les données suivantes:
DIALOGUE.png
Cela donne:
RESULTAT.png
Mais moi, j'aimerais que cela fonctionne avec les listebox liés mais cela ne fonctionne pas (pas de collage de texte dans le tableau) car il faudrait le fusionner avec le supreme:

Code : Tout sélectionner

REM  *****  BASIC  *****
Global oDoc as object, oDlg as object

Sub Main
   oDoc = ThisComponent
   oBib = oDoc.DialogLibraries.GetByName("Standard")
   zDlg = oBib.GetByName("Dialog5")
   oDlg = CreateUnoDialog(zDlg)
   aMarque = RecupMarque("A1:C1")
   RemplirListe("lMarque", aMarque)

   cOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
   if oDlg.Execute = cOK then
      sRet = oDlg.getControl("lMarque").SelectedItem & " " & _
             oDlg.getControl("lModele").SelectedItem
      oDlg.dispose
      oDoc.CurrentSelection.String = sRet
   else
      exit Sub
   end if
   
End Sub

Sub RemplirListe(sListe, sTab)
   oListe = oDlg.getControl(sListe)
   oListe.Model.stringItemList = sTab
   oliste.selectItemPos(0, true)
End Sub

Function RecupMarque(sZone)
   oFeuil = oDoc.Sheets(1) ' La 1ere feuille est indexée à 0
   oPlage = oFeuil.getCellRangeByName(sZone)
   aTab = oPlage.DataArray
   nMax = UBound(aTab(0))
   Dim sTab(nMax)
   For i = 0 to nMax
      sTab(i) = aTab(0)(i)
   Next i
   RecupMarque = sTab
End function

Function RecupModele(sMarque)
   oPlages = oDoc.NamedRanges
   oPlage = oPlages.getByName("Z_" & sMarque).getReferredCells()
   aTab = oPlage.DataArray
   nMax = UBound(aTab)
   Dim sTab(nMax)
   For i = 0 to nMax
      if sTab(i)(0) = "" then exit for
      sTab(i) = aTab(i)(0)
   Next i
   RecupModele = sTab
End Function

Sub ChangeListe(oEvt)
   oSrc = oEvt.Source
   sMarque = oSrc.SelectedItem
   aModele = RecupModele(sMarque)      
   RemplirListe("lModele", aModele)
End Sub   
avec le code de mon fichier actuel:

Code : Tout sélectionner

Global Dialog5 As Object
 

Sub Dialogue_service

  Dim lesCellules As Object , Plage As Object
  Dim Cellule As Object
  Dim X As Long
 
 
  DialogLibraries.LoadLibrary( "Standard" )
  'Dialog1 est le nom de la Form (clic-droit sur l'objet / propriétés / onglet Général / Nom)
  oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog5 )
 
  'Indique la colonne A dans la feuille
  Colonne = ThisComponent.Sheets.getByName("minute meeting").Columns(0)
  Colonne1 = ThisComponent.Sheets.getByName("minute meeting").Columns(1)
  lesCellules = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  lesCellules1 = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  lesCellules.insertByName("",Colonne)
  lesCellules1.insertByName("",Colonne1)
 
  Plage = lesCellules.Cells.createEnumeration
  Plage1 = lesCellules1.Cells.createEnumeration
 
  'Boucle sur les cellules de la colonne A.
  While Plage.hasMoreElements
    Cellule = Plage.nextElement
 
    '--- Remplissage de la ListBox:
      'AddItem (Donnée à ajouter , Position dans ListBox )
      '0 correspond à la 1ere ligne de la ListBox
    oDialog1.getControl("ComboBox5").AddItem (Cellule.String, X )
    '-----------------------------
 
    X = X + 1
  Wend
 
  'Affiche la boîte de dialogue
  'oDialog1.Execute()
 
  While Plage1.hasMoreElements
    Cellule1 = Plage1.nextElement
 
    '--- Remplissage de la ListBox:
      'AddItem (Donnée à ajouter , Position dans ListBox )
      '0 correspond à la 1ere ligne de la ListBox
    oDialog1.getControl("ComboBox4").AddItem (Cellule1.String, X )
    '-----------------------------
 
    X = X + 1
  Wend
 
  'Affiche la boîte de dialogue
  'oDialog1.Execute()
 
 
 

dim   oCurseur As Object, oSh As Object
   Dim col As Integer, i As Integer, Validation As Integer
   Dim Lig As Long
   Dim Zone As Object, ZonesVides As Variant
   
   
   
   
     
     'Attribution des variables     
     Validation = com.sun.star.ui.dialogs.ExecutableDialogResults.OK     
     oDoc = ThisComponent
     

       
     'Recuperation et remplissage         
   oSh = oDoc.Sheets.getByName("MINUTE MEETING")
'   oCurseur = oSh.createCursor
'   oCurseur.GoToEndOfUsedArea(True)
'   DerLig = oCurseur.rangeAddress.endRow+1
   Zone = oSh.getCellRangeByName("N54:BQ1057")
   ZonesVides = Zone.queryEmptyCells.RangeAddresses
   Lig = ZonesVides(1).StartRow 'ZonesVides(0)est la Première zone Vide
   
   If oDialog1.Execute()  = Validation then     
   
      With oSh
         .getCellByPosition(13, Lig).String = oDialog1.getControl("ComboBox1").Text     
         .getCellByPosition(14, Lig).String = oDialog1.getControl("ComboBox2").Text
         .getCellByPosition(15, Lig).String = oDialog1.getControl("ComboBox3").Text
        .getCellByPosition(25, Lig).String = oDialog1.getControl("ComboBox4").Text
         .getCellByPosition(24, Lig).String = oDialog1.getControl("ComboBox5").Text
        .getCellByPosition(21, Lig).String = oDialog1.getControl("TextField5").Text
        .getCellByPosition(16 ,Lig).String = oDialog1.getControl("TextField1").Text     
        .getCellByPosition(68, Lig).String = oDialog1.getControl("TextField2").Text     
       
      End With
   
   End If

End Sub
Encore merci de votre aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Calc] combobox liees dans boite de dialogue

Message par Dolev »

Euh comment veux-tu que cela fonctionne ?
Il n'existe pas de contrôle ComboBox puisque tu les as remplacé par des zones de liste. :roll:
Open Office 4.1.15 sous Windows 11
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Bonsoir,

Meme si je prends mon code d'origine:

Code : Tout sélectionner

Sub Dialogue_service

  Dim lesCellules As Object , Plage As Object 
  Dim Cellule As Object 
  Dim X As Long 
  
  
  DialogLibraries.LoadLibrary( "Standard" ) 
  'Dialog1 est le nom de la Form (clic-droit sur l'objet / propriétés / onglet Général / Nom) 
  oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog5 ) 
  
  'Indique la colonne A dans la feuille 
  Colonne = ThisComponent.Sheets.getByName("minute meeting").Columns(0) 
  Colonne1 = ThisComponent.Sheets.getByName("minute meeting").Columns(1) 
  lesCellules = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") 
  lesCellules1 = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  lesCellules.insertByName("",Colonne) 
  lesCellules1.insertByName("",Colonne1) 
  
  Plage = lesCellules.Cells.createEnumeration 
  Plage1 = lesCellules1.Cells.createEnumeration 
  
  'Boucle sur les cellules de la colonne A. 
  While Plage.hasMoreElements 
    Cellule = Plage.nextElement 
  
    '--- Remplissage de la ListBox: 
      'AddItem (Donnée à ajouter , Position dans ListBox ) 
      '0 correspond à la 1ere ligne de la ListBox 
    oDialog1.getControl("ComboBox5").AddItem (Cellule.String, X ) 
    '----------------------------- 
  
    X = X + 1
  Wend 
  
  'Affiche la boîte de dialogue 
  'oDialog1.Execute() 
  
  While Plage1.hasMoreElements 
    Cellule1 = Plage1.nextElement 
  
    '--- Remplissage de la ListBox: 
      'AddItem (Donnée à ajouter , Position dans ListBox ) 
      '0 correspond à la 1ere ligne de la ListBox 
    oDialog1.getControl("ComboBox4").AddItem (Cellule1.String, X ) 
    '----------------------------- 
  
    X = X + 1
  Wend 
  
  'Affiche la boîte de dialogue 
  'oDialog1.Execute() 
  
  
  

 dim   oCurseur As Object, oSh As Object
   Dim col As Integer, i As Integer, Validation As Integer
   Dim Lig As Long
   Dim Zone As Object, ZonesVides As Variant
   
   
   
   
     
     'Attribution des variables     
     Validation = com.sun.star.ui.dialogs.ExecutableDialogResults.OK     
     oDoc = ThisComponent
     
 
       
     'Recuperation et remplissage          
   oSh = oDoc.Sheets.getByName("MINUTE MEETING")
'   oCurseur = oSh.createCursor
'   oCurseur.GoToEndOfUsedArea(True)
'   DerLig = oCurseur.rangeAddress.endRow+1
   Zone = oSh.getCellRangeByName("N54:BQ1057")
   ZonesVides = Zone.queryEmptyCells.RangeAddresses
   Lig = ZonesVides(1).StartRow 'ZonesVides(0)est la Première zone Vide
   
   If oDialog1.Execute()  = Validation then      
   
      With oSh
         .getCellByPosition(13, Lig).String = oDialog1.getControl("ComboBox1").Text      
         .getCellByPosition(14, Lig).String = oDialog1.getControl("lMarque").Text
         .getCellByPosition(15, Lig).String = oDialog1.getControl("lModele").Text
        .getCellByPosition(25, Lig).String = oDialog1.getControl("ComboBox4").Text 
         .getCellByPosition(24, Lig).String = oDialog1.getControl("ComboBox5").Text 
        .getCellByPosition(21, Lig).String = oDialog1.getControl("TextField5").Text 
        .getCellByPosition(16 ,Lig).String = oDialog1.getControl("TextField1").Text      
        .getCellByPosition(68, Lig).String = oDialog1.getControl("TextField2").Text      
        
      End With
   
   End If

End Sub
J'obtiens désormais une message depuis que j'ai remplace les 2 combobox par les 2 listbox
RESULTAT.png
exemple.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Version: librroffice 7.5.9; windows 10(x64)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Calc] combobox liees dans boite de dialogue

Message par Dolev »

kikoo74910 a écrit :J'obtiens désormais une message depuis que j'ai remplace les 2 combobox par les 2 listbox
Normal puisque comme je te l'indique plus haut :
Dolev a écrit :Elles n'ont logiquement pas les mêmes propriétés.
Pour une zone de liste, c'est SelectedItem

Tu devrais installer XRay pour voir ce qu'il faut utiliser :
https://forum.openoffice.org/fr/forum/v ... f=8&t=3234
C'est l'outil indispensable quand on débute.
Open Office 4.1.15 sous Windows 11
kikoo74910
Membre hOOnoraire
Membre hOOnoraire
Messages : 176
Inscription : 03 août 2012 09:45

Re: [Calc] combobox liees dans boite de dialogue

Message par kikoo74910 »

Merci Dolev. L objet initial de ma demande etant résolu et pour ne avoir de problème avec les modérateurs je clôture donc ce post. Je vais sans doute en ouvrir un autre pour l insertion de donnée dans le tableau.
Version: librroffice 7.5.9; windows 10(x64)