Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum 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 !
REM ***** BASIC *****
Option Explicit
Sub ListBox ()
DIM LeDoc As Object, LaFeuille As Object
DIM DrawPage As Object, Form As Object
DIM MonFormulaire As Object, MaListe As Object
DIM ListBox As Object
DIM id As Integer
DIM nom As String, prenom As String
LeDoc = ThisComponent 'Sélectionne le document en cours
LaFeuille = LeDoc.CurrentController.ActiveSheet' sélectionne la feuille activée
DrawPage = LaFeuille.DrawPage 'sélectionne la partie graphique de la feuille
Form = DrawPage.Forms.GetByIndex(0)'sélectionne les contrôle de formulaire
oListBox=Thiscomponent.drawpages.GetByindex(0).Forms.getByName("MonFormulaire").getByName("MaListe")
sResult=oListBox.Text
oBaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oBase = oBaseContext.getByName("mabase")
oConnection = oBase.getConnection( "", "" )
oSQL = oConnection.createStatement()
oSQL.ResultSetConcurrency = 1008
ResultatSet (oEnreg).
sString="SELECT " & chr(34) & "nom" & chr(34) & ", " & chr(34) & "prénom" & chr(34) & " FROM " & chr(34) & "MaTable" & chr(34) & " WHERE " & chr(34) & "id" & chr(34) & "=" & chr(39) & sResult & chr(39)
oEnreg= oSQL.executeQuery(sString)
oEnreg.first
sNomValeur=oEnreg.columns.getByName("nom").string
sPrenomValeur=oEnreg.columns.getByName("prenom").string
ThisComponent.sheets.getByIndex(0).getCellRangeByName.string("A1")=sNomValeur
ThisComponent.sheets.getByIndex(0).getCellRangeByName.string("A2")=sPrenomValeur
oEnreg.close
oSQL.close
oConnection.close
End Sub
2. Evite d'utiliser comme nom de variable des noms aussi proches des mots réservés... exemple Form (variable) et Forms (mot réservé), cela peut prêter à confusion quant tu écris ton programme...
3. ton code tel qu'il est va généré des tonnes d'erreurs, entre autres les variables que tu as déclaré ne sont pas celles que tu utilises... comme tu as utilisé Option Explicit, toutes tes variables doivent être déclarées et correctement...
cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2
REM ***** BASIC *****
Option Explicit
Sub ListBox ()
DIM oListBox As Object
DIM sResult As string
DIM MonForlaire As Object, MaListe As Object
DIM id As Integer
DIM nom As String, prenom As String
REM Créer une macro avec tout le code suivant :
oListBox=ThisComponent.drawpages.getByIndex(0).Forms.getByName("MonForlaire").getByName("MaListe")
sResult=oListBox.Text
REM sResult récupère la valeur de la ListBox
oBaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oBase = oBaseContext.getByName("mabase")
oConnection = oBase.getConnection( "", "" )
oSQL = oConnection.createStatement()
oSQL.ResultSetConcurrency = 1008
REM on créé une requête SQL à partir des champs de la table avec le critère de sélection qui est la valeur de la Listbox
REM Cela donne un truc du genre :
REM SELECT "Nom", "Prénom" FROM "MaTable" WHERE "ID"='001'
REM Ensuite, on exécute la requête et on récupère le résultat dans un ResultatSet (oEnreg).
sString="SELECT " & chr(34) & "nom" & chr(34) & ", " & chr(34) & "prenom" & chr(34) & " FROM " & chr(34) & "MaTable" & chr(34) & " WHERE " & chr(34) & "id" & chr(34) & "=" & chr(39) & sResult & chr(39)
oEnreg= oSQL.executeQuery(sString)
oEnreg.first
sNomValeur=oEnreg.columns.getByName("nom").string
sPrenomValeur=oEnreg.columns.getByName("prenom").string
REM Les 2 variables créées récupèrent les valeurs souhaitées selon le critère de liste.
REM Ensuite, on écrit ces valeurs quelque part, par exemple :
ThisComponent.sheets.getByIndex(0).getCellRangeByName.string("A1")=sNomValeur
ThisComponent.sheets.getByIndex(0).getCellRangeByName.string("A2")=sPrenomValeur
REM On ferme ensuite toutes les connexions de la requête créée :
oEnreg.close
oSQL.close
oConnection.close
End Sub
suite aux indications de cris59 j'ai ré-ecris le code de la 1 er parti.
Base a été très nettement améliorée, sur la version OOo2.xx
Essaie le bouquin 2 de Marcelly sur OOo2
il y aura sans doute + d'info sur base ...baisse pas les bras, mais commence par des petites choses pour t'habituer au langage (sur Calc ou sur Writer)
cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2
Dans le texte initial de ton message, tu sembles vouloir transférer les données du champ d'une Table de OOo Base vers les cellules d'une feuille Calc.
Je suppose que tu veux ensuite faire des calculs dans Calc sur ces données.
Tu peux, si cela correspond à ce que tu veux faire, déposer ta colonne de Table directement dans Calc par "drag and drop" (tirer et laisser tomber)
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Ce que tu souhaites faire (d'après ce que j'ai vu ldans la feuille) pourrait correspondre à cette demande dont la réponse a été apportée par François sur la liste users :
> Bonjour,
> Avec un liste déroulante, comment faire afficher le résultat dans une autre cellule ?
> ex:
> liste déroulante en A1, je souhaiterai afficher le résultat choisi en B3
>
> Si quelqu'un a la réponse je le remercie de me la communiquer
>
>>
Il suffit d'indiquer dans la propriété "Cellule liée" la référence à la cellule.
En mode édition:
Sélectionner le contrôle (zone de liste ou zone combinée),
Clic droit : Contrôle
Sélectionner l'onglet "Données"
Définir la cellule dans "Cellule liée" >
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox