[Résolu][Calc] Copier une feuille modèle sous un autre nom

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 !
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

[Résolu][Calc] Copier une feuille modèle sous un autre nom

Message par TARTINE46 »


La modération vous a écrit: Postant dans la section Macro et API, dans MACRO est inutile dans le titre. Nous l'avos supprimé

Bonjour,

Je viens vers vous car je tourne en rond depuis plusieurs jours. J'ai fouillé sur votre forum mais je n'ai pas réussi à trouver la solution à mon problème :
1) j'ai créée une matrice pour la facturation
2) j'ai prévue une macro pour copier une feuille et la recopier dans le même classeur
3) le but est de renommer cette matrice avant son utilisation, avec des données explicites, par exemple (nom client, numéro de facture....)
4) Par exemple si je renomme ce tableau "Matrice neutre" par "Dupont facture 1", dans ma macro pour copier une feuille apparaît toujours en args3(0).Value -"MATRICE Neutre" au lieu de "Dupont facture 1". Aussi ma feuille n'est pas rajoutée dans mon tableau "Dupont facture 1"
Désolée, je suis débutante en macro et ne maitrise pas du tout le langage technique :?

Code : Tout sélectionner

rem ----------------------------------------------------------------------
dim args3(2) as new com.sun.star.beans.PropertyValue
args3(0).Name = "DocName"
args3(0).Value = [u][color=#FF0000]"MATRICE Neutre" [/color] [/u]
args3(1).Name = "Index"
args3(1).Value = 32767
args3(2).Name = "Copy"
args3(2).Value = true
Ci-joint mes 2 fichiers.
Je vous remercie d'avance pour vos réponses :D
La modération vous a écrit: Code balisé pour faciliter la lecture

Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 - Windows 11 Famille
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 10096
Inscription : 28 août 2010 08:45

Re: Modification automatique Nom tableau dans MACRO

Message par micmac »

Bonjour et bienvenue sur le forum,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : sutra27295.html#27295

N'oubliez pas que les termes Macro, OpenOffice ne doivent pas être employés car il sont implicites. Essayez de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci en ajoutant la balise [Calc] mais lors de votre prochaine question, nous vous remercions de le faire vous-même au risque de voir votre sujet verrouillé.
.
Dans votre signature il y a écrit : OpenOffice 4.1.15
Votre signature est incomplètement renseignée.

Dans votre signature il est nécessaire d'indiquer :
  1. la version exacte de AOO ou LibO (AOO 4.1.15, LibO 25.2.5 par exemple) ;
  2. la version exacte du système d'exploitation (Windows XP SP3, Vista SP2, Windows 7 SP1, Win 8.1, Win 10, Win 11, Ubuntu 24.04, macOS (Intel, Silicon) 15.7 Sequoïa par exemple).
Accès direct à votre signature pour la corriger.

Cordialement
Touche Ctrl de Windows = touche cmd⌘ sur Mac
OpenOffice > Outils > Options sur Windows = OpenOffice > Préférences sur macOS
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Merci pour vos modifications. Je suis désolée mais je n'avais pas tout compris :)
J'espère faire mieux à l'avenir :D
OpenOffice 4.1.15 - Windows 11 Famille
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Bonjour,

Je suis désolée mais je viens de m'apercevoir en cherchant encore la solution à mon problème, que les fichiers que je vous ai envoyés hier n'étaient pas bien paramétrés. Les macros affectées aux boutons n'étaient pas celles créées au niveau du fichier et du coup elles ne fonctionnaient pas.
Aussi je vous renvoie en pièces jointes, les 2 fichiers rectifiés :)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 - Windows 11 Famille
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Modification automatique Nom tableau

Message par Dude »

Salut,
TARTINE46 a écrit : 23 sept. 2025 15:06 une macro pour copier une feuille et la recopier dans le même classeur
Avec zBasic installé, c'est très simple :

Code : Tout sélectionner

GlobalScope.BasicLibraries.loadLibrary ("zBasic")
zFeuille.Copie("Matrice Neutre", "Dupont Facture 1")
Note aussi que des facturiers existent déjà dans ce forum : viewforum.php?f=26
Pas la peine de réinventer l'eau chaude.
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Merci pour votre réponse.
J'ai bien téléchargé le ZBASIC et inséré votre macro mais cela ne fonctionne pas, j'ai le message : sBasic : zFeuille.Copie "Cette feuille n'existe pas".
Mais je pense aussi que je me suis mal exprimée.
Je souhaiterai qu'à chaque fois que je renomme ma matrice, je puisse créer plusieurs feuilles dans mon nouveau tableau.
En reprenant ma macro d'origine :
Par exemple dans le fichier "Dupont Facture 1", je souhaite pouvoir recopier l'onglet "Feuil1" plusieurs fois suivant les besoins. Pour l'instant lorsque je clique sur le bouton "COPIE FEUILLE", cela recopie la feuille dans le fichier "MATRICE Neutre" au lieu de l'enregistrer dans le même fichier "DUPONT facture 1".
OpenOffice 4.1.15 - Windows 11 Famille
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Modification automatique Nom tableau

Message par Dude »

TARTINE46 a écrit : 24 sept. 2025 09:58 mais cela ne fonctionne pas
Cette phrase n'aide pas à comprendre. Fournis un document avec la macro.
Accompagne le d'une copie d'écran du résultat final que tu veux obtenir.
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Je vais essayer d'être plus explicite :)
J'ai un classeur nommé "MATRICE Neutre" avec des macros qui sert de modèle pour la facturation.
Je copie donc ce classeur en le renommant par le nom d'un client, par exemple "DUPONT" dans mon exemple. Dans ce classeur je dois établir toutes les factures le concernant.
Donc à chaque nouvelle facture à établir je créée une nouvelle feuille dans ce classeur.
J'ai créeé une macro me permettant de faire un "COPIER" feuille pour reporter les données, les mises en forme et les macros.
Mais lorsque j'exécute cette macro, la feuille est recopiée dans le classeur "MATRICE Neutre" et non dans le classeur "DUPONT" (voir ARGS3(0).Value = "MATRICE Neutre"). Il faudrait donc que la Value soit modifier automatiquement par le nom du classeur actuel soit, dans mon exemple "DUPONT".
Je vous joins les fichiers "MATRICE NEUTRE" et "DUPONT".
J'espère que j'aurai réussi à me faire comprendre car je ne suis pas une pro du language et de l'utilisation des macros :)

Code : Tout sélectionner

REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Protect"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:Protect", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Nr"
args2(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(2) as new com.sun.star.beans.PropertyValue
args3(0).Name = "DocName"
args3(0).Value = [color=#FF0000]"MATRICE Neutre"[/color]
args3(1).Name = "Index"
args3(1).Value = 32767
args3(2).Name = "Copy" 
args3(2).Value = true

dispatcher.executeDispatch(document, ".uno:Move", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$P$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "StringName"
args5(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;4;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$G$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "StringName"
args7(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;5;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "ToPoint"
args8(0).Value = "$G$8"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "StringName"
args9(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;6;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args9())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$G$10"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "StringName"
args11(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;7;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "ToPoint"
args12(0).Value = "$H$11"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "StringName"
args13(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;9;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args13())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "ToPoint"
args14(0).Value = "$H$12"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args14())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "StringName"
args15(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;10;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args15())

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "ToPoint"
args16(0).Value = "$H$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args16())
rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "StringName"
args17(0).Value = "=RECHERCHEV($O$3;'Base clients'.$A$2:$K$620;8;0)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args17())

rem ----------------------------------------------------------------------
dim args18(0) as new com.sun.star.beans.PropertyValue
args18(0).Name = "ToPoint"
args18(0).Value = "$C$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args18())

rem ----------------------------------------------------------------------
dim args19(0) as new com.sun.star.beans.PropertyValue
args19(0).Name = "Flags"
args19(0).Value = "SVD"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args19())

rem ----------------------------------------------------------------------
dim args20(0) as new com.sun.star.beans.PropertyValue
args20(0).Name = "ToPoint"
args20(0).Value = "$E$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args20())

rem ----------------------------------------------------------------------
dim args21(0) as new com.sun.star.beans.PropertyValue
args21(0).Name = "Flags"
args21(0).Value = "SVD"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args21())

rem ----------------------------------------------------------------------
dim args22(0) as new com.sun.star.beans.PropertyValue
args22(0).Name = "Protect"
args22(0).Value = true

dispatcher.executeDispatch(document, ".uno:Protect", "", 0, args22())


end sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 - Windows 11 Famille
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Modification automatique Nom tableau

Message par Dude »

Je te demandais le classeur avec la macro conçue avec zBasic.
Ainsi qu'une copie écran. :roll:
TARTINE46 a écrit : 24 sept. 2025 09:58 j'ai le message : sBasic : zFeuille.Copie "Cette feuille n'existe pas".
L'erreur est explicite : aucune feuille du nom "Matrice Neutre".
Ta feuille s'appelle "Feuil1" donc il faut logiquement corriger avec ce nom.
Ensuite, tu veux récupérer l'information de la cellule O3 pour copier sous ce nouveau nom.
Ce qui donne :

Code : Tout sélectionner

GlobalScope.BasicLibraries.loadLibrary ("zBasic")
sFeuilDepart = "Feuil1"
sFeuilArrive = zCellule.Lit(sFeuilDepart, "O3", "C")
zFeuille.Copie(sFeuilDepart, sFeuilArrive)
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Désolée,
Mais je ne comprends pas du tout votre réponse :(
Pourquoi me parlez-vous de la cellule 03 ?
Je vous explique en image mon problème :
Dans le Classeur "MATRICE Neutre", je clique sur COPIE FEUILLE (Feuil1) et j'obtiens une nouvelle feuille (Feuil1_2).
Par contre ceci ne marche pas dans mon Classeur "DUPONT" car la feuille se copie dans le Classeur "MATRICE Neutre".
Il a donc un problème dans mon paramétrage de la macro COPIEFEUILLE à la ligne args3(0).Value qui ne réactualise pas le nom du Classeur actif.
Image
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 - Windows 11 Famille
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Modification automatique Nom tableau

Message par Dude »

TARTINE46 a écrit : 24 sept. 2025 16:12 Mais je ne comprends pas du tout votre réponse :(
Ton document qui reprend stricto sensu la macro avec zFeuille.Copie sur le bon nom :
DUPONT.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Merci pour votre retour.
Mais cela ne correspond toujours pas à ce que je souhaiterai.
Dans le classeur "DUPONT" je dois pouvoir copier autant de feuille que je souhaite. C'est pourquoi je voudrais copier la feuille active et que la nouvelle feuille créée se nomme "Nom de la feuille active + 2).
Dans votre fichier rectifié, si je clique sur COPIEFEUILLE, j'ai un message me disant que la feuille est déjà créée. Je suis donc limité à 2 feuilles.
Désolée :)
OpenOffice 4.1.15 - Windows 11 Famille
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Modification automatique Nom tableau

Message par Dude »

TARTINE46 a écrit : 24 sept. 2025 17:10 Mais cela ne correspond toujours pas à ce que je souhaiterai.
C'est pourtant ta question de départ. Relis ton 1er message. :?
TARTINE46 a écrit : 24 sept. 2025 17:10Dans le classeur "DUPONT" je dois pouvoir copier autant de feuille que je souhaite.
Voici une nouvelle information, il faut donc récupérer le nombre de feuilles avec zFeuille.Enumere.
Mais tu seras forcément limité puisqu'un classeur ne peut contenir que 256 feuilles.

Code : Tout sélectionner

sFeuilDepart = "Feuil1"
nFeuille = UBound(zFeuille.Enumere)
sNom = "Dupont Facture "
sFeuilArrive = sNom & nFeuille
zFeuille.Copie(sFeuilDepart, sFeuilArrive)
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Effectivement dans mon premier message je n'étais pas assez précise et n'indiquais pas que je souhaitais pouvoir copier plusieurs feuilles dans le classeur.
Par contre je ne comprends pas comment utiliser le zfeuilleénumère, à quel endroit le copier dans ma macro et comment modifier le zbasic :oops:
OpenOffice 4.1.15 - Windows 11 Famille
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Désolée,
Ne pas tenir compte de mon message précédent, je n'avais pas vu le code que vous avez publié en dessous de votre dernier message :)

La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite.
Vous avez un bouton "petit crayon" pour éditer votre message et ajouter le complément d'information.

OpenOffice 4.1.15 - Windows 11 Famille
TARTINE46
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 23 sept. 2025 09:19

Re: [Calc] Modification automatique Nom tableau

Message par TARTINE46 »

Merci beaucoup,
Ca marche :super:
Par contre je ne peux copier que la première feuille et non la feuille active :?
Je vous remercie beaucoup :bravo:
OpenOffice 4.1.15 - Windows 11 Famille