Bonjour à tous !
Ayant marre de me cogner toutes les présentations d'un plan sous forme de plusieurs feuillets, je me suis lancé dans la création d'une routine (la première de ma vie !) qui le fasse à ma place (duplication d'une présentation, attribution d'un nom sous la forme d'un nombre, décalage de l'espace objet dans la fenêtre de présentation).
J'ai réussi à sortir quelque chose de potable (pour moi). Je vous la soumets pour que vous me fassiez des remarques/suggestions.
Déjà quelques pistes d'évolution auxquelles j'ai pensé:
Reprendre à la suite d'un feuillet (ajout de feuillets)
Ajouter dans le nom de la présentation le numéro de plan (par exemple)
; Ce LISP permet de copier une présentation dans le cadre de la réalisation d'un carnet
; Fonctionnement : Copie de la présentation -> Décalage dans la fenêtre d'une valeur donnée -> Itération selon le nombre de page souhaitée
;-----------------------------------------------------------------------------
; Début de la commande permettant de réaliser un duplication des présentations
(defun c:FEUILLET ()
(setq FEUILLET_NomOriginal (getstring "\nDonnez le nom de la présentation à dupliquer :") ) ; Nom de la présentation dupliquée
(initget 1)
(setq FEUILLET_Nb (getint "\nDonnez le nombre de feuillets à créer :") ) ; Nombre de feuillets que l'on veut créer
(initget 1)
(setq FEUILLET_DecalageX (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant X :") ) ; Distance entre les feuillets dans l'espace objet suivant X
(initget 1)
(setq FEUILLET_DecalageY (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant Y :") ) ; Distance entre les feuillets dans l'espace objet suivant X
(setq FEUILLET_Num 1)
(setq FEUILLET_NomPrecedent (eval FEUILLET_NomOriginal) )
(setq FEUILLET_DecalageX (- FEUILLET_DecalageX) )
(setq FEUILLET_DecalageY (- FEUILLET_DecalageY) )
(setq FEUILLET_Pan (list (eval FEUILLET_DecalageX) (eval FEUILLET_DecalageY) ) )
(while (<= FEUILLET_Num FEUILLET_Nb)
(if (= FEUILLET_NomPrecedent FEUILLET_NomOriginal)
(progn
; On vérifie le nom du feuillet
(setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) )
; On "crée" le feuillet
(FEUILLET_Duplique FEUILLET_NomOriginal FEUILLET_NomFinal FEUILLET_Pan)
); fin de progn
(progn
; On vérifie le nom du feuillet
(setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) )
(FEUILLET_Duplique FEUILLET_NomPrecedent FEUILLET_NomFinal FEUILLET_Pan)
);fin de progn
); fin de if
(setq FEUILLET_NomPrecedent (eval FEUILLET_NomFinal))
(setq FEUILLET_Num (eval (1+ FEUILLET_Num)))
); fin de while
(command)
); fin de defun
;-----------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------
; Fonction pour vérifier et corriger, si nécessaire, la disponibilité d'un nom de présentation
(defun FEUILLET_Verif (FEUILLET_Verif_Num / FEUILLET_Verif_Nom FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations FEUILLET_Verif_Msg FEUILLET_Verif_Reponse FEUILLET_Verif_n)
; Dans un premier temps on corrige le nom de la présentation
(setq FEUILLET_Verif_Nom (FEUILLET_CorrectionInf10 FEUILLET_Verif_Num) )
; On récupère la liste de présentations existantes
(setq FEUILLET_Verif_ListePresentations (layoutlist) )
(if (member FEUILLET_Verif_Nom FEUILLET_Verif_ListePresentations)
(progn
(setq FEUILLET_Verif_Msg (strcat "La présentation " FEUILLET_Verif_Nom " existe déjà. Souhaitez-vous effacer l'existante ? [Oui/Non]: ") )
(initget 1 "Oui Non")
(setq FEUILLET_Verif_Reponse (getkword FEUILLET_Verif_Msg)) ; On propose d'effacer la présentation existante
(if (= FEUILLET_Verif_Reponse "Oui")
(progn ; Si l'utilisateur accepte, on efface la présentation existante et on la remplace par la nouvelle
(command "_layout" "effacer" FEUILLET_Verif_Nom)
(setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) )
); fin de progn
(progn ; Sinon on cherche un nom de substitution
(setq FEUILLET_Verif_n 0)
(setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) )
(while (member FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations)
(setq FEUILLET_Verif_n (1+ FEUILLET_Verif_n) )
(setq FEUILLET_Verif_NomFinal (eval (strcat FEUILLET_Verif_Nom " (" (rtos FEUILLET_Verif_n 2 0) ")") ) )
); fin du while
)
); fin du if
); fin de progn
(progn
(setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) )
); fin de progn
)
); fin de defun
;---------------------------------------------------------------------------------------------
;------------------------------------------------------------------------
; Fonction pour ajouter un zéro devant les présentations inférieures à 10
(defun FEUILLET_CorrectionInf10 (FEUILLET_CorrectionInf10_Num / FEUILLET_CorrectionInf10_Nom)
; Si le numéro de la présentation que l'on va créer est inférieure à 10, on ajoute un 0 devant
(if (< FEUILLET_CorrectionInf10_Num 10)
(progn
(setq FEUILLET_CorrectionInf10_Nom (strcat "0" (rtos FEUILLET_CorrectionInf10_Num 2 0) ) )
); fin de progn
(progn
(setq FEUILLET_CorrectionInf10_Nom (eval FEUILLET_CorrectionInf10_Num))
); fin de progn
); fin de if
); fin de defun
;------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
; Fonction servant à dupliquer les présentation est à déplacer l'espace objet dans la fenêtre
(defun FEUILLET_Duplique (FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal FEUILLET_Duplique_Pan)
(command "_layout" "copier" FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal)
(command "_ctab" FEUILLET_Duplique_NomFinal)
(command "_mspace")
(command "-pan" FEUILLET_Duplique_Pan "")
(command "_pspace")
); fin de defun
;--------------------------------------------------------------------------------------------
Bonne journée à tous !
P.S: merci à (gile) pour son cours d'introduction à AutoLISP, ça ma bien aidé (en plus du manuel fournis par Autodesk.