Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Travailler un document Open Office élaboré


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Travailler un document Open Office élaboré
    Bonjour,

    Dans un logiciel de ma création (gestion de tournois de tarot), je générais un fichier Word "Liste des joueurs triés par numéro de table" sous Word.

    J'ai passé des heures à trouver les syntaxes correctes d'appel et de formatage, mais ça fonctionne.

    Exemple d'extrait de mon code (juste pour voir la complexité du truc" :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
      '--- Définit l'entête du document ---
      If oWord.ActiveWindow.View.SplitSpecial <> wdPaneNone Then
          oWord.ActiveWindow.Panes(2).Close
      End If
      If oWord.ActiveWindow.ActivePane.View.Type = wdNormalView Or oWord.ActiveWindow. _
          ActivePane.View.Type = wdOutlineView Then
          oWord.ActiveWindow.ActivePane.View.Type = wdPrintView
      End If
      oWord.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
      oWord.Selection.TypeText Text:=Prog$ & vbTab & vbTab
      oWord.Selection.InsertDateTime DateTimeFormat:="dd/MM/yyyy", InsertAsField:= _
        False, DateLanguage:=wdFrench, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False
      oWord.Selection.TypeParagraph
      oWord.Selection.TypeText Text:="Auteur : J. Vieillescaze" & vbTab & vbTab
      oWord.Selection.InsertDateTime DateTimeFormat:="HH:mm:ss", InsertAsField:=False, _
        DateLanguage:=wdFrench, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False
      oWord.Selection.TypeParagraph
      oWord.Selection.TypeText Text:=vbTab & NomTournoi$
      oWord.Selection.TypeParagraph
      oWord.Selection.TypeText Text:=vbTab & "LISTE DES TABLES DE LA MANCHE " & IndM
      oWord.Selection.TypeParagraph
      oWord.Selection.TypeText Text:=vbTab & "(triée par n° de table)"
      oWord.Selection.TypeParagraph
      oWord.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
     
      '--- Définit le pied de page du document ---
      With oWord.ActiveDocument
        For I = 1 To .Sections.Count
          With .Sections(I).Footers(wdHeaderFooterPrimary)
            .Range.Delete
            With .PageNumbers
              .Add PageNumberAlignment:=wdAlignPageNumberCenter
              .Item(1).Select
            End With
            With oWord.Selection
              .Frames.Delete
              .HomeKey unit:=wdLine
              .Range.Text = "Page "
              .ParagraphFormat.Alignment = wdAlignParagraphCenter
              .EndKey unit:=wdLine
              .MoveDown unit:=wdLine, Count:=1, Extend:=True
              .Delete
            End With
          End With
        Next I
      End With


    Le problème, c'est que tout le monde ne possède pas la suite Office, je voudrais donc réécrire mon code pour Open Office.

    J'ai trouvé des éléments ici :

    https://silkyroad.developpez.com/VBA/PiloterOpenOffice/

    Mais je voudrais aller beaucoup plus loin dans le formatage du document (voir un exemple en pièce jointe) : tableaux, cellules grisées, entête de page, pied de page, etc.

    Qui peut me conseiller une doc ou un spécialiste ?

    Merci par avance,
    Jack?

  2. #2
    Membre éprouvé
    Citation Envoyé par jack554 Voir le message
    Le problème, c'est que tout le monde ne possède pas la suite Office,
    Déjà, en le sauvegardant en .DOC (et non .DOCX) ça ouvre la porte à plus de gens . Et libre Office ouvre les .DOC

  3. #3
    Membre régulier
    Merci Daudet78, bonne idée, malheureusement je n'ai pas la main là-dessus.

    Avec VB6 je lance Word, je crée un document comme ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
      'Start Word and open the document template.
      If Not IsWordOpen Then Set oWord = CreateObject("Word.Application")
      oWord.Visible = True
      Set oDoc = oWord.Documents.Add


    Il m'ouvre un "Document1.docx", je n'ai pas le choix, je suppose que VB6 teste la version de Word installée sur mon PC (Office 2010) ...

    Mon projet est de tout réécrire en utilisant le swriter d'Open Office, mais je manque de tuyaux

  4. #4
    Membre éprouvé
    Citation Envoyé par jack554 Voir le message
    Il m'ouvre un "Document1.docx", je n'ai pas le choix, je suppose que VB6 teste la version de Word installée sur mon PC (Office 2010) ...(
    il n'ouvre pas, il le prépare . et, par défaut, c'est du .DOCX
    Mais, au moment de la sauvegarde, il est possible de faire "enregistrer sous" et de choisir xxxxx.DOC

    Autres solutions : tu ne changes pas ton soft VB6 . Tu ouvres manuellement le fichier résultant avec WOrd, et "enregistrer sous" en choisissant .doc

  5. #5
    Membre régulier
    L'utilisateur ne sauvegarde rien du tout, il imprime, mais là n'est pas la question : le problème est en amont : comme je le disais, tout le monde n'a pas Word, et tout mon code VB6 est orienté Word ! Donc chez l'utilisateur qui n'a pas Word, ça ne fonctionne pas du tout. D'où mon idée de réécrire le code VB pour Open Office.

    J'ai un début de solution avec ce code VB6 qui crée un fichier Open Office et écrit dedans depuis Excel :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub creerNouveauDocumentWriter()
        Dim oServiceManager As Object, oDispatcher As Object
        Dim Desktop As Object, Document As Object
        Dim args()
        Dim Chemin As String, Fichier As String
        Dim T As Date
     
        'Copie de la plage de cellules dans Excel
        Range("A1:A5").Copy
     
        'Création d'une instance Open Office
        Set oServiceManager = CreateObject("com.sun.star.serviceManager")
        Set Desktop = oServiceManager.createInstance("com.sun.star.frame.Desktop")
     
        'Création d'un nouveau document Writer
        Set Document = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, args)
     
        'Collage dans Open Office
        Set oDispatcher = oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
        oDispatcher.executeDispatch Document.currentController.Frame, ".uno<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />aste", "", 0, Array()
     
        'Conversion de l'emplacement de sauvegarde au format URL
        Chemin = Replace(ThisWorkbook.Path, "\", "/")
        Fichier = "file:///" & Chemin & "/essai.odt"
        '------
     
        'Sauvegarde du nouveau document Writer
        Document.storeAsURL Fichier, args()
        DoEvents
     
        '--------
        'ajoute une temporisation de 2 secondes pour empécher que le fichier
        'ne se ferme avant la fin de la création
        T = Timer + 2: Do Until Timer > T: DoEvents: Loop
        '--------
     
        'Fermeture du fichier
        'L'argument True indique que les modifications vont être sauvegardées à la fermeture
        Document.Close (True)
    End Sub


    Mais je voudrais aller beaucoup plus loin et gérer des caractéristiques de traitement de texte, insérer un tableau, gérer les entêtes et pied de page, etc, comme dans ma pièce jointe fournie plus haut.

  6. #6
    Membre éprouvé
    Citation Envoyé par jack554 Voir le message
    [COLOR="#0000FF"]L'utilisateur ne sauvegarde rien du tout, il imprime, mais là n'est pas la question : le problème est en amont : comme je le disais, tout le monde n'a pas Word, et tout mon code VB6 est orienté Word ! Donc chez l'utilisateur qui n'a pas Word, ça ne fonctionne pas du tout. D'où mon idée de réécrire le code VB pour Open Office.
    Sorry de ne pas avoir pigé ta question ...
    Mais ta question de départ
    Le problème, c'est que tout le monde ne possède pas la suite Office, je voudrais donc réécrire mon code pour Open Office.
    m'a laissé supposer que tu distribuais le fichier .DOCx à tes copains. En fait, c'est le soft .EXE de création que tu distribues à tes copains

  7. #7
    Membre éprouvé
    En fait, il y a deux concurrents à la suite Office de Microsoft :
    • Open Office
    • Libre Office


    Il semble que Libre Office soit plus actif que Open Office coté "mise à jour" et évolutions
    https://les-differences.com/differen...ce-openoffice/
    https://forum.pcastuces.com/open_off...-f23s36221.htm
    Donc il faudrait que tu fasses, dans ton logiciel, la triple compatibilité

  8. #8
    Membre éprouvé
    Après réflexions, je me demande si l'utilisation d'un "Machin Office" est un bon choix. Tu risques, suivant le Windows utilisé, suivant la version du "Machin Office" du client d'avoir des problèmes insurmontables .....

    Je pense que ce serait plus secure d'utiliser une PictureBox sur laquelle tu crées ta mise en page ( textes, dessins etc) et ensuite tu imprimes cette PictureBox avec Printer
    Voir (à partir de la réponse #6) https://www.developpez.net/forums/d1...sion-sous-vb6/

  9. #9
    Membre régulier
    Tu as raison Daudet78, même avec le "vrai" Office je commence déjà à avoir des problèmes parce que la dernière version (Office 2019) n'est plus du tout structurée comme les précédentes, adieu le C:\Program Files\Officexxx\winword.exe par exemple ...

    Je vais regarder attentivement ta proposition de solution avec une PictureBox, qui est très intéressante parce que ... indépendante de tous les Office possibles et imaginables ! Et je posterai sans doute un exemple ici .. si j'y arrive, parce que ce principe est tout nouveau pour moi.

    Donc merci et à bientôt !
    Jack.

  10. #10
    Membre éprouvé
    Citation Envoyé par jack554 Voir le message
    Et je posterai sans doute un exemple ici .. si j'y arrive, parce que ce principe est tout nouveau pour moi.
    Un forum, c'est la réunion d'une foule d'incompétence .... pour aboutir à un truc qui marche.

  11. #11
    Membre régulier
    Bien dit !

    Une question par contre me préoccupe déjà ... Avant de programmer mes sorties sous Word, je les réalisais en format texte, et j'utilisais le code hexadécimal "0C" pour changer de page à l'impression (les listes que je crée peuvent s'étendre sur plusieurs pages). Depuis un an ou deux, certains utilisateurs me disent que le changement de page ne fonctionne plus, et chez moi ils fonctionnent. Mais cela vient peut-être de leur imprimante ...

    En tout cas, je me demande si on peut gérer plusieurs pages avec la méthode du PictureBox

  12. #12
    Membre éprouvé
    Citation Envoyé par jack554 Voir le message
    En tout cas, je me demande si on peut gérer plusieurs pages avec la méthode du PictureBox
    Je n'ai pas testeé, mais je ferai une page dans PictureBox, printer, une autre page dans PictureBox, printer ... etc

###raw>template_hook.ano_emploi###