Champs base vers cellule calc

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 !
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Champs base vers cellule calc

Message par priskim »

perdu mon poste :cry:

j'ai fais quelques essais sur une db qui se nomme "mabase" une table "MaTable". Jai aussi suivit le lien que tu as donné.

j'ai donc une macro comme ça.

Code : Tout sélectionner

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

mais içi

Code : Tout sélectionner

oListBox=Thiscomponent.drawpages.GetByindex(0).Forms.getByName("MonFormulaire").getByName("MaListe")
j'ai l'erreur suivante Runtime error Basic variable indéfinie[/quote]
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Tu as déclaré dim ListBox au lieu de dim oListBox...

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

merci c'est bon pour cette erreur

j'en ai une autre qui se cache

Runtime error BASIC
Exception
Type : com.sun.star.container.NosuchelementException Message ,
:x
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Tu as appelé un object qui n'existe pas,

vérifie si les noms (Name ou Nom) de ton formulaire et de ta listbox sont bien ceux que tu getByName dans ta ligne...

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Juste un petit conseil (pas pour être désagréable... juste pour te donner un coup de main)

1. quand tu récoltes du code, essaie de le déchiffrer....exemple

Code : Tout sélectionner

oListBox=Thiscomponent.drawpages.GetByindex(0).Forms.getByName("MonFormulaire").getByName("MaListe")
cette ligne est redondante avec les 4 lignes qui précèdent

Code : Tout sélectionner

oListBox= Form.getByName("MaListe")

aurait suffit...

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

http://www.cpserv.net/
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

Code : Tout sélectionner

 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.

il me reste une erreur

Code : Tout sélectionner

sResult=oListBox.Text
propriété ou méthode introuvable ?
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Code : Tout sélectionner

sResult=oListBox.CurrentValue
cala devrait être mieux

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

effectivement ça vas mieux.

mais comme y a encore des erreur je vais prendre tout à zero si j'ai le temps :).

merci a tous.

pour info l'erreur

Code : Tout sélectionner

oBaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
variable indéfinie
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Code : Tout sélectionner

DIM MonForlaire As Object, MaListe As Object
DIM id As Integer
DIM nom As String, prenom As String 
ça tu ne déclares pas, il s'agit de nom interne (Name) d'objet

relis le 3. des conseils

dans le code que tu as récupéré les variables commencent par o ou s, regarde bien...

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

Comme a chaques lignes y a des erreurs je stop ... déjà que je n'y connais rien en macros, si en plus faut que je trouves les erreurs ...

dommage
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Tu n'as jamais programmé?

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

très peu !

j'ai bien le 1 er livre de marcelly, mais y a rien sur Base normal :)
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

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

http://www.cpserv.net/
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17084
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

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
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

Non juste afficher les données nom, prénom, adresse, ville, cp c'est tout.

mais avoir une liste box qui me donne le renseignement "nom " puis qui m'affiche "nom, prénom, adresse, ville, cp" dans zone calc.


http://oooforum.free.fr/cijoint/fichier ... 025600.ods
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17084
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

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
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17084
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

Voilà une copie d'écran qui sera plus "parlante" :

Image
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
priskim
Membre hOOnoraire
Membre hOOnoraire
Messages : 129
Inscription : 02 mars 2006 19:51

Message par priskim »

y a comme un problème, le champ de la cellule lie est grisé ?
XP SP 2 OOo 2.04.
Ubuntu OOo 2.04.
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17084
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

Tu veux dire la cellule F6 de la feuille ?
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox