Erreur dans macro

Bonjour à tous,

Je suis en train de préparer une macro qui a pour but de recopier certaines données d’un fichier (DocSource) vers un autre (DocCible). Même si j’ai quelques notions de programmation, je suis complètement débutant en LibreOffice Basic et je me heurte à une erreur que je ne comprends pas dans la gestion des documents / feuilles de calcul.

Le code ci-dessous s’arrête à FeuilleCible = DocCible.Sheets(0) de la sous-routine RenommerFeuilleCible avec l’erreur “Variable d’objet non définie.” Je ne comprends pas… Merci de votre aide !

Sub CreerFichierCible
Dim Dummy() 
Dim Url As String
Url = "private:factory/scalc"
DocCible = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())
End Sub 

Sub RenommerFeuilleCible
FeuilleCible = DocCible.Sheets(0)
FeuilleCible.Name = "Reservation"
End Sub


Sub RoutinePrincipale

REM Déclaration des variables globales
Dim DocSource As Object
Dim DocCible As Object
Dim FeuilleCible As Object

REM Debut de la procedure
CreerFichierCible
DocCible = ThisComponent
RenommerFeuilleCible

End Sub

Bonjour,

Une variable déclarée à l’intérieur d’un ‘sub’ n’est connue que par celui-ci (donc jamais “globale”).
Si tu veux la partager avec une autre routine, tu as le choix :

  1. la passer explicitement comme argument à cette routine (préférable quant possible) :
Sub RenommerFeuilleCible(doc)
    FeuilleCible = doc.Sheets(0)
    FeuilleCible.Name = "Reservation"
End Sub

Sub RoutinePrincipale
    REM Déclaration des variables  globales
    Dim DocSource As Object
    Dim DocCible As Object
    Dim FeuilleCible As Object

    REM Debut de la procedure
    CreerFichierCible
    DocCible = ThisComponent
    RenommerFeuilleCible(DocCible)
End Sub
  1. déclarer la variable au niveau du module :
private DocCible As Object     

[...]

Sub RoutinePrincipale
    REM Déclaration des variables  globales
    Dim DocSource As Object
    Dim FeuilleCible As Object
     
    REM Debut de la procedure
    CreerFichierCible
    DocCible = ThisComponent
    RenommerFeuilleCible
End Sub

Cordialement.

Un grand merci pour cet éclairage.
Je pensais que la déclaration des variables globales se faisait dans la routine principale et que les sous-routines pouvaient les reconnaître.
Tout est plus clair dorénavant.
Je suis arrivé à finaliser ma macro en contournant ce problème : une seule routine, mais c’est très vilain d’un point de vue codage…

Un grand merci encore !