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

OpenOffice & LibreOffice Discussion :

Macro pour copier-coller un cadre texte.


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club
    Homme Profil pro
    Artiste
    Inscrit en
    février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artiste

    Informations forums :
    Inscription : février 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Macro pour copier-coller un cadre texte.
    Bonjour à tous & à toutes,
    Je suis nouveau sur ce site & grand débutant en basic.
    J’ai sous la main LibreOffice Writer version 6.0.7.3, aussi je viens d’écrire une petite macro qui devrait me permettre de sélectionner un cadre (TextFrame) par son index, d’en modifier des paramètres de le copier & le coller où se trouve le curseur (à mon avis, c’est ici que ce trouve le problème), pour enfin de rendre au cadre premier ses paramètres d’origines.
    La voici :

    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
    sub Cadre
     
    dim document   as object
    dim dispatcher as object
    dim oFrame     as object
     
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    Rem Définir la fonction d'appel du cadre par son index.
    oFrame     = ThisComponent.textFrames.getbyIndex(0)
     
    Rem Appeler le cadre par son index & le modifier.
    	With oFrame
    Rem Le rendre imprimable.
    	.setPropertyValue("Print", True)
    Rem Retirer la protection du contenu.
    	.Text.ContentProtected = False
    Rem Changer le nom du cadre.
    	.Name = "Nouveau nom"
    Rem Changer le texte contenu dans le cadre.
    	.setString( "Nouveau texte" )
    Rem Protéger le contenu.
    	.Text.ContentProtected = True
    Rem Terminer les modifications
    	End With
     
    Rem Sélectionner le cadre.
    ThisComponent.CurrentController.select(oFrame)
    Rem Copier le cadre.
    dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    Rem Coller le cadre, ça ne fonctionne pas du tout !!!
    dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
     
    Rem Sélectionner le cadre d'origine & lui rendre ses paramètres.
    oFrame     = ThisComponent.textFrames.getbyIndex(0)
    	With oFrame
    	.setPropertyValue("Print", False)
    	.Text.ContentProtected = False
    	.Name = ""
    	.setString( "Vide" )
    	.Text.ContentProtected = True
    	End With
     
    End sub
    Ayant fini de m’arracher les cheveux, faute de combattants, sur un simple copier-coller, je viens à vous humble & glabre.
    Et c’est en remerciant par avance tous ceux qui auront la bonté de se pencher sur ce problème, dont le ridicule assassine mon amour propre, que je vous salut.

    Édit :
    Je viens de progresser un peu, donc je vous en fais part, le copier-coller est résolu mais je n'arrive pas sélectionner le cadre copié...
    Voici la nouvelle macro :

    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
    sub Cadre
     
    dim doc as object, oDisp as object, oDoc as object, oCont as object, oCurs as object, oSelect as object
    dim oFrame as object
     
    oDoc       = ThisComponent
    oCont      = oDoc.CurrentController
    doc        = oCont.Frame
    oDisp      = createUnoService("com.sun.star.frame.DispatchHelper")
    oCurs      = oDoc.currentSelection()'Enregistrer la position du curseur.
    oFrame     = oDoc.textFrames.getbyIndex(0)'Choisir un cadre de texte par son index.
     
    oCont.select(oFrame)'Sélectionner un cadre de texte par son index.
    oDisp.executeDispatch(doc, ".uno:Copy", "", 0, Array())'Le Copier.
    oDisp.executeDispatch(doc, ".uno:Escape", "", 0, Array())'Échapper à un grand malheur ou autre chose mais quoi ?
    oCont.select(oCurs)'Revenir à la position initiale du curseur.
    oDisp.executeDispatch(doc, ".uno:Paste", "", 0, Array())'Coller le cadre copier.
    oSelect    = oCont.getCurrentSelection()'Cela devrait permettre de garder la sélection courante,
    'à savoir le cadre, mais non...
     
    	With oSelect
    	.setPropertyValue("Print", True)
    	.Text.ContentProtected = False
    	.Name = "Nouveau nom."
    	.setString("Nouveau texte.")
    	.Text.ContentProtected = True
    	End With
     
    oCont.select(oCurs)'Désélectionne le cadre...
     
    End sub
    Fred.

  2. #2
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2009
    Messages : 109
    Points : 148
    Points
    148
    Par défaut Macro pour copier-coller un cadre texte
    Bonjour,
    Pas sur d'avoir tout compris. Dans le code modifié ont peut en fin de macro, sélectionné le dernier cadre inséré.
    Cordialement

    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
    sub Cadre
     
    dim doc as object, oDisp as object, oDoc as object, oCont as object, oCurs as object, oSelect as object
    dim oFrame as object
     
    oDoc       = ThisComponent
    oCont      = oDoc.CurrentController
    doc        = oCont.Frame
    oDisp      = createUnoService("com.sun.star.frame.DispatchHelper")
    oCurs      = oDoc.currentSelection()'Enregistrer la position du curseur.
    oFrame     = oDoc.textFrames.getbyIndex(0)'Choisir un cadre de texte par son index.
    oCont.select(oFrame)'Sélectionner un cadre de texte par son index.
    oDisp.executeDispatch(doc, ".uno:Copy", "", 0, Array())'Le Copier.
    oDisp.executeDispatch(doc, ".uno:Escape", "", 0, Array())'Échapper à un grand malheur ou autre chose mais quoi ?
    oCont.select(oCurs)'Revenir à la position initiale du curseur.
    oDisp.executeDispatch(doc, ".uno:Paste", "", 0, Array())'Coller le cadre copier.
    '-----------------------------------------------------------------------------------------------
    'La ligne ci-dessous est "neutralisée""
    'oSelect    = oCont.getCurrentSelection()'Cela devrait permettre de garder la sélection courante,
    'à savoir le cadre, mais non...
    '------------------------------------------------------------------------------------------------ 
    	With oFrame
    	.setPropertyValue("Print", True)
    	.Text.ContentProtected = False
    	.Name = "Nouveau nom2."
    	.setString("Nouveau texte.")
    	.Text.ContentProtected = True
    	End With
     
    '--------------------------------------------------------------------------------- 
    oFrame     = oDoc.textFrames.getbyIndex(1) ' Nouveau cadre qui a été copié
    'Sélection du nouveau cadre
    oCont.select(oFrame)
    'oCont.select(oCurs)'Désélectionne le cadre...
     
    End sub
    Libre Office Version: 6.3.4.2 (x64)
    Windows 10

  3. #3
    Candidat au Club
    Homme Profil pro
    Artiste
    Inscrit en
    février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artiste

    Informations forums :
    Inscription : février 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci Mobydick_62,
    d'abord pour avoir pris le temps de regarder ces dysfonctionnements, mais surtout pour avoir souligné la "neutralisation".
    Est-il possible de la contourner, et surtout comment ?
    Car le changement de nom que je prévoyais devait se faire automatiquement & nom manuellement ?
    Cordialement.
    Fred.

  4. #4
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2009
    Messages : 109
    Points : 148
    Points
    148
    Par défaut Macro pour copier-coller un cadre texte
    Bonjour,
    Désolé mais j'ai du mal à comprendre. Je reprend ton premier post.
    Donc je décortique :

    une petite macro qui devrait me permettre de sélectionner un cadre (TextFrame) par son index
    Ok pas de problème je comprends.

    d’en modifier des paramètres
    OK là aussi

    de le copier & le coller où se trouve le curseur
    Là aussi pas de problème.

    pour enfin de rendre au cadre premier ses paramètres d’origines.
    Là je ne comprend pas.
    Pourquoi ne pas copier et coller le cadre et ensuite prendre la main sur ce nouveau cadre pour lui donner de nouvelles propriétés. Et comme çà le cadre premier garde ses paramètres d'origine.

    Cordialement
    Libre Office Version: 6.3.4.2 (x64)
    Windows 10

Discussions similaires

  1. [XL-2007] Macro pour Copier coller des colonnes a partir d'une référence sur une ligne
    Par laurasoe dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/07/2014, 12h10
  2. [Toutes versions] Macro pour copier coller un fichier excel
    Par info009 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/05/2014, 00h48
  3. Pb de macro pour copier coller 100 fichier
    Par petit-ours dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/08/2011, 16h31
  4. [XL-2000] Macro pour copier-coller valeur avec un while
    Par golghot dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/06/2010, 17h52
  5. [XL-2007] macro pour copier coller des selections multiples
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/06/2009, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo