[Résolu][Calc] Fonction : Insérer des feuilles

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 !
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

[Résolu][Calc] Fonction : Insérer des feuilles

Message par zeguedon »

Bonjour,

Une petite fonction de cellule qui permet de créer de nouvelles feuilles à la volée. Elle utilise deux arguments.
-un argument pour définir le nom, soit par référence à une cellule contenant un nom, soit directement saisit entre doubles quottes dans la formule.
-un deuxième argument numérique, qui permet de définir si les feuilles de même nom existantes doivent-être écrasées ou non (1 on ne fait rien, 2 on écrase).

Code : Tout sélectionner

=CREER_FEUILLE(A1;2)

Code : Tout sélectionner

=CREER_FEUILLE("Janvier_2015";1)

Code : Tout sélectionner

Function CREER_FEUILLE(arg1 As string, arg2 as long) 
    
        Select Case arg2
        
        Case 1 'Si la feuille existe déjà on ne fait rien sans avertir         
	        if Thiscomponent.Sheets.hasByName(arg1) then
	        	exit function       	
	       	else	
	        	Thiscomponent.Sheets.insertNewByName(arg1, Thiscomponent.Sheets.count)
	        end if
        
        Case 2 'Si la feuille existe déjà on l'écrase sans avertir
	        if Thiscomponent.Sheets.hasByName(arg1) then
	       		Thiscomponent.Sheets.removeByName(arg1)
	       		Thiscomponent.Sheets.insertNewByName(arg1, Thiscomponent.Sheets.count)
	       	else
	       		Thiscomponent.Sheets.insertNewByName(arg1, Thiscomponent.Sheets.count)
	       	end if
       End Select
End Function
J'ai bien tenté une troisième possibilité pour afficher une MsgBox avertissant de l’existence de la feuille le cas, et offrant le choix de l'écraser ou non mais je me retrouve avec une demande en boucle pour toutes les feuilles précédemment crées lorsque la fonction est utilisée avec la poignée de recopie. J'essaierai d'autres méthode.

Code : Tout sélectionner

Case 3 'Si la feuille existe déjà on demande si elle doit-être écrasée     	
	       	if Thiscomponent.Sheets.hasByName(arg1) then
	       		if MsgBox("La feuille :" & (arg1) & " existe déjà voulez vous l'écraser", 4) = 6 then
	       			Thiscomponent.Sheets.removeByName(arg1)
	       			Thiscomponent.Sheets.insertNewByName(arg1, Thiscomponent.Sheets.count)
	       		else
	       			Stop
	       		end if	
	       	else
	       		Thiscomponent.Sheets.insertNewByName(arg1, Thiscomponent.Sheets.count)	
	    	end if
A la base l'idée m'est venue pour ventiler des tâches à partir d'une liste. A partir d'une condition X une tâche est extraite de la liste pour créer une nouvelle feuille qui contiendra les détails de la tâche. :idea:

Après y a plein d'autres contextes d'utilisation.

Je tiens à préciser que je n'ai pas testé avec AOO ne l'ayant pas sur cette machine.

A+
 Ajout : Attention : le deuxième argument avec la valeur 2 doit-être utilisé avec précaution. En effet, lorsque les cellules sont recalculées, toutes les feuilles déjà crées sont écrasées par de nouvelles feuilles vierges :aie: 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux