[Résolu][Calc] Intégrer du DDE pour lier un autre classeur

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 !
Seigneurscoconuts
NOOuvel adepte
NOOuvel adepte
Messages : 10
Inscription : 15 juil. 2013 07:25

[Résolu][Calc] Intégrer du DDE pour lier un autre classeur

Message par Seigneurscoconuts »

Bonjour,
Dans une macro je cherche à intégrer la fonction DDE afin d'aller chercher des informations dans un autre document.
Je cherche à faire une boucle qui irait chercher cellule après cellule dans le fichier source et qui me le rentre dans mon fichier cible la aussi cellule après cellule.
J'ai donc essayer de programmer la fonction DDE mais je n'arrive pas à la faire marcher, certainement pour un problème de définition de variable (en fait je ne sais pas comment typer serveur, fichier, plage j'ai essaye en string et variant mais ça ne passe pas). Egalement je ne sais pas comment typer mon retour (string, Integer etc. sachant que mes données du fichier source se présentent sous plusieurs formes).

Je vous met mon code, la plage visée sur le fichier cible est facultative pour le moment :

Code : Tout sélectionner

REM  *****  BASIC  *****
Option Explicit
Sub Main

Dim oDocument As Object, oSheet As Object, oCell As Object

Dim i As Integer 
Dim j As Integer 
Dim mode As Integer

Dim serveur As String
Dim plage AS String
Dim fichier As String


oDocument = ThisComponent
oSheet = oDocument.Sheets.getByName("janvier2013")

fichier = "file:///C:/Users/tdanquigny-adc/Desktop/ORR4MAD/R4_218/R4_218_INTERNE_201303.ods"
serveur = "soffice"
mode = 0


i = 3
	for j = 7 To 15  
		plage = "01 - Données agrégées.I" & str(j)
		oCell = oSheet.getCellByposition(j,i)
		oCell.String = FuncDDE(serveur,fichier,plage,mode)  
	next

End Sub


Function FuncDDE(serveur As String, fichier as String, Plage As String, mode As Integer) As String
Dim acceder As Object
acceder = CreateUnoService("com.sun.star.sheet.FunctionAccess")
FuncDDE = acceder.callFunction("DDE",serveur,fichier,plage,mode)
End Function 
Ps: je ne met pas tout de suite de document test car les données en question sont confidentielles. Je ferai un fichier test si la réponse n'est pas évidente.
En vous remerciant d'avance.
LibreOffice 3.5.7.2 sous windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Intégrer la fonction DDE dans une macro

Message par Piaf »

Bonsoir
Seigneurscoconuts a écrit :Je cherche à faire une boucle qui irait chercher cellule après cellule dans le fichier source et qui me le rentre dans mon fichier cible la aussi cellule après cellule
DDE ne fonctionne que sous Windows. Donc étant sous Linux !
Mais déjà, il me semble que l'adresse du fichier source ne doit pas être passé sous forme d'URL.
Une solution éventuelle sans passer par DDE

Code : Tout sélectionner

Option Explicit
Sub Main
Dim AdresseSource as String, maFeuille as Object, Liens as Object
Dim CelluleSource as String, CelluleArrivee as Object, j as Integer
	AdresseSource = ConvertToURL("L'adresse du fichier source")
	maFeuille = thisComponent.Sheets.getByName("Feuille1")
	liens = thisComponent.AreaLinks
	For j = 2 To 5
		CelluleSource = "Inventaire.B" & j
		CelluleArrivee = maFeuille.getCellRangeByName("A" & j -1).CellAddress
		liens.insertAtPosition(CelluleArrivee, AdresseSource, CelluleSource, _
		"", "",com.sun.star.sheet.SheetLinkMode.VALUE ) 'ou com.sun.star.sheet.SheetLinkMode.NORMAL
	Next
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Seigneurscoconuts
NOOuvel adepte
NOOuvel adepte
Messages : 10
Inscription : 15 juil. 2013 07:25

Re: [Résolu][Calc] Intégrer la fonction DDE dans une macro

Message par Seigneurscoconuts »

Bonjour,
Désolé de ne pas avoir répondu plus tôt à ta réponse qui, après test, semble marcher. Merci beaucoup pour cette solution!!
LibreOffice 3.5.7.2 sous windows 7