Bonjour,
J'ai repris le suprème de code dans le lien fourni et c'est désormais beaucoup simple que le code utilisé auparavant,
Cela donne:
Code : Tout sélectionner
Option Explicit
Public Action as string, Wp as String, Reg as string, Priority as string, Note as string, Seq as string, Services as string , Subservices as string ' on doit récupérer cette valeur dans le module registre donc variable public
Sub lancedialogue
Dim Dlg As Object, bibli As Object
Dim monDialogue As Object, Validation As Integer
Dim ChampAction As Object, ChampWP as object, ChampReg as Object, ChampPriority as Object, ChampNote as Object, ChampSeq as Object, ChampsServices as Object, ChampsSubservices as Object
Validation = com.sun.star.ui.dialogs.ExecutableDialogResults.OK ' Clic sur Validation ===>OK
DialogLibraries.Loadlibrary("Standard") ' on charge l'ensemble de la Bibli Standard de ce document en mémoire
bibli = DialogLibraries.GetByName("Standard") ' On rérérence Bibli
monDialogue = bibli.GetByName("Dialog5") ' on référence Mon dialogue
Dlg = CreateUnoDialog(monDialogue)
ChampAction = Dlg.GetControl("Actions") 'action
ChampWP = Dlg.Getcontrol("Wp") 'wp
ChampReg = Dlg.Getcontrol("Reg")
ChampPriority = Dlg.Getcontrol("Priority")
ChampNote = Dlg.Getcontrol("Notes")
ChampSeq = Dlg.Getcontrol("Seq")
ChampsServices = Dlg.Getcontrol("Services")
ChampsSubservices = Dlg.Getcontrol("Subservices")
if Dlg.Execute = Validation then
Action = ChampAction.Text ' on assigne les valeurs de la boite
Wp = ChampWP.Text
Reg = ChampReg.Text
Priority = ChampPriority.Text
Note = ChampNote.Text
Seq = ChampSeq.Text
Services = ChampsServices.SelectedItem
Subservices = ChampsSubservices.SelectedItem
Dlg.Dispose
End Sub
End Sub
et
Code : Tout sélectionner
Sub Registre3
LireFichierConfig
MonDoc = ThisComponent 'Sélectionne le document en cours
MaFeuille = MonDoc.CurrentController.ActiveSheet 'Attribue la feuille en cours à la variable
oCurseur = MaFeuille.createCursor ' création du curseur
oCurseur.GotoEndOfUsedArea(True) ' Le curseur sur la dernière ligne
NumDerligne = oCurseur.getRangeAddress.EndRow'assignation à NumDerligne de sa valeur ( dernière ligne du tableau)
DerEnrg = MaFeuille.getCellByPosition(0,NumDerligne).Value '0 =colonne A auquel on va ajouter 1 pour incrémenter le numéro
Lancedialogue ' on lance la boite de dialogue1 dont le code se trouve dans le moduleDialog
MaFeuille.getCellByPosition(0,NumDerligne+1).string = Wp
MaFeuille.getCellByPosition(1,NumDerligne+1).string = Reg
MaFeuille.getCellByPosition(2,NumDerligne+1).string = Action
MaFeuille.getCellByPosition(3,NumDerligne+1).string = Priority
MaFeuille.getCellByPosition(4,NumDerligne+1).string = Note
MaFeuille.getCellByPosition(5,NumDerligne+1).string = Seq
MaFeuille.getCellByPosition(6,NumDerligne+1).string = Services
MaFeuille.getCellByPosition(7,NumDerligne+1).string = Subservices
End sub
Sub LireFichierConfig()
Dim f1 As Integer
Dim unTexte As String
f1 = FreeFile ' obtenir un numéro de fichier ouvert
On error resume next
Open nomFichier For Input As #f1
Input #f1, unTexte
Grade = unTexte
Input #f1, unTexte
Nom = unTexte
Input #f1, unTexte
Service = unTexte
Close #f1
End Sub
Ces codes permettent d'insérer les données de la boite de dialogue dans le tableau.
Cependant je n'arrive toujours pas a lier les listebox "services" et Subservices" en fonction de la feuille données (code du module 2):
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("Services", aMarque)
cOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
if oDlg.Execute = cOK then
sRet = oDlg.getControl("Services").SelectedItem & " " & _
oDlg.getControl("Subservices").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("Subservices", aModele)
End Sub
resultat1.png
Voici mon nouveau fichier:
LIE LIST.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.