

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
5 messages in org.openoffice.fr.prog[prog] Macro - Erreur 91| From | Sent On | Attachments |
|---|---|---|
| fabien macip | Feb 26, 2004 1:31 am | |
| Laurent Godard | Feb 26, 2004 1:43 am | |
| fabien macip | Feb 26, 2004 2:02 am | |
| Bernard Marcelly | Feb 26, 2004 5:09 am | |
| fabien macip | Feb 26, 2004 5:54 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | [prog] Macro - Erreur 91 | Actions... |
|---|---|---|
| From: | fabien macip (fata...@yahoo.fr) | |
| Date: | Feb 26, 2004 1:31:38 am | |
| List: | org.openoffice.fr.prog | |
Voici la macro que je tente d'exécuter, mais j'ai une erreur 91 "Object variable not set". ???
Sub agdref ' Dimensionnement de la valeur de retour de la fonction PubliPostage, ' pour savoir si la fonction s'est bien passée Dim RetourValeur as long
' Lancement de la procédure de publi-postage RetourValeur = Publipostage("G:/Program Files/OpenOffice.org1.1/share/template/", "trt", "trt")
If RetourValeur then ' Si problème, on informe l'utilisateur MsgBox("Un problème a eu lieu lors de la fonction PubliPostage. Vérifiez votre impression s'il vous plait.") endif
end sub
Function Publipostage(Chemin as string, ArgNomBase As String, ArgNomTable as String)
on error goto ErreurPubliPostage
' Ouverture du modèle et création d'un nouveau document Dim oDesktop As Object Dim oDocument As Object ' Nouveau document créé à partir du modèle dim tUrl as String ' Contiendra le chemin complet du fichier modèle Dim NoArgs() as New com.sun.star.beans.PropertyValue' Servira au chagrment du document...et encore on pourrait s'en passer. Dim oDocClose
' Nécessaire à la fermeture du fichier : on croit réver là ! Dim dispatcher as Object Dim parser as Object Dim disp as Object Dim url as new com.sun.star.util.URL Dim oFrame as Object
' Vérification si Chemin possède un "/" à la fin, si non, on en met un. On enlève les espaces devant/derriere. Chemin=trim(Chemin) If Right(Chemin,1) <>"/" then Chemin=Chemin+"/" endif
' Connexion au service, nécessaire pour le fonctionnement de toutes les propriétés et méthodes oDesktop = createUnoService("com.sun.star.frame.Desktop")
' Connexion à la base de données et récupération des enregistrements. ' Celle-ci doit avoir été renseignée dans le menu Outils/Source de données, avec les noms indiqués ' Dans la ligne decommande lançant la macro (généralement "trt", "trt"). ' Le premier terme désigne la base de données, le deuxième la table dans la base de données. dim oRowSet as object ' Equivalent d'un Dynaset, autrement dit ' une "image" dynamique de la table. dim ChaineSQL as String ' Chaine qui contiendra la requête SQL de chargement du RowSet
' Connexion au service de gestion des base de données oRowSet = createUnoService("com.sun.star.sdbc.RowSet")
' Définition de la base de données à atteindre oRowSet.SetPropertyValue("DataSourceName",ArgNomBase)
' Chargement de la chaîne contenant la requête SQL ChaineSQL = "select * from " + ArgNomTable
' Affectation de la requête SQL oRowSet.SetPropertyValue("Command",ChaineSQL)
' Exécution de la requête SQL oRowSet.execute
'Récupération du nom des colonnes dim mData as object ' Contiendra les données du RowSet
dim n as integer dim NbColonnes as integer ' Le nombre de colonnes du RowSet
mData = oRowSet.getMetaData() NbColonnes = mData.ColumnCount
dim NomColonnes(NbColonnes) As String ' Dimensionnement du tableau des noms de colonnes
if oRowSet.RowCount > 0 then ' S'il existe des lignes dans la table... oRowSet.next() for n=0 to NbColonnes - 1 NomColonnes(n) = mData.getColumnName(n+1) ' On charge le nom des colonnes (1ere ligne) next n endif
'Remplissage des champs Dim oChamps, tfm, InpFieldEnum, InpField As Object dim NomColonneChamps as String
do while not oRowset.isAfterLast ' Teste si Fin de fichier (EOF)
' Ouverture du document de la ligne d'enregistrement for n=0 to NbColonnes-1 if NomColonnes(n)="TYPCOUR" then ' Nom de la colonne contenant le nom du fichier modèle ' Chargement de l'Url menant au fichier modèle, il faudrait modifier le chemin absolu, ' Pour le placer en variale de ligne de commande par exemple tUrl="file:///" + Chemin + oRowSet.getString(n+1) +".sxw" endif next n
' Chargement du document oDocument = oDesktop.LoadComponentFromURL(tUrl,"_blank",0,NoArgs())
' Important : on charge dans oChamps tous les champs du modèle, ' Comprendre les champs qui peuvent être modifiés dans le document modèle. oChamps = oDocument.getTextFields
' Création d'une énumération des champs texte du modèle InpFieldEnum = oChamps.createEnumeration()
do while InpFieldEnum.hasMoreElements ' Tant qu'il reste des champs texte pas énumérés InpField = InpFieldEnum.nextElement() ' Champ suivant : cela signifie que l'énumération ' ne positionne pas au premier champ : IMPORTANT
' Aucune idée de l'utilité de cette condition... if InpField.supportsService("com.sun.star.text.TextField.Database") then tfm = InpField.getTextFieldMaster() ' Aucune idée de l'utilité de cette ligne... ' Apparemment, connecte un objet au champ, pour pas s'en servir... ' un peu l'impression qu'on charge beaucoup ' trop de valeurs la-dedans...
' Chargement du nom du champ texte dans le modèle, pour vérification ensuite avec le nom des colonnes ' dans la base de données NomColonneChamps = InpField.getTextFieldMaster.getPropertyValue("DataColumnName") for n=0 to NbColonnes-1 ' De la première à la dernière colonne de la base données... if NomColonneChamps = NomColonnes(n) then ' Le nom de la colonne est-il le nom du champ texte ? InpField.Content = oRowSet.getString(n+1) ' Si oui, la valeur du champ est chargée depuis la BDD exit for ' et on sort de la boucle endif next n endif loop
oChamps.Refresh ' Rafraichir tous les champs du document modèle
oDocument.print(NoArgs()) ' Impression...
oDocClose=StarDesktop.ActiveFrame.Dispose ' Fermeture du document courant
oRowset.next ' On passe à la ligne suivante loop ' Retour case départ wait 2000 PubliPostage=0
Goto FinPubliPostage
ErreurPubliPostage: PubliPostage = ERR MsgBox ("Erreur" & ERR & "." & chr$(13) & ERROR$)
FinPubliPostage: End Function
Yahoo! Mail : votre e-mail personnel et gratuit qui vous suit partout ! Créez votre Yahoo! Mail sur http://fr.benefits.yahoo.com/
Dialoguez en direct avec vos amis grâce à Yahoo! Messenger !Téléchargez Yahoo!
Messenger sur http://fr.messenger.yahoo.com







