Bonjour,

Ayant eu du mal à trouver une solution qui fonctionne (et que je comprenne à peu près) et n'ayant pas réussi à adapter la FAQ Comment copier la feuille active dans un nouveau classeur ?, je vous propose ici un code permettant de copier/coller une feuille d'un classeur à un autre.

Il se peut que ce code ne soit pas du tout optimisé, ou ne convienne pas toujours, je n'ai pas une grande expérience (voire pas du tout ) mais je me suis dit que cela pouvait aidé.

N'hésitez pas à faire des commentaires (pas trop méchants s'il vous plait ) ou à donner une meilleure solution.

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
Sub Copie_Fichier(DocOrig As Object, NomFeuille As Object, DocDest As Object)
'Copie d'une feuille d'un classeur vers un autre classeur en derniere position
'
'Arguments d'entree
' DocOrig : Le classeur où se trouve la feuille à copier
' NomFeuille : Le nom de la feuille à copier
' DocDest : Le classeur de destination
'
'Necessite que les 2 classeurs soient ouverts au moment de l'appel
 
'Déclarations
Dim Feuille As Object, NewFeuille as object
Dim oFrame As Object, oDisp As Object
 
 
If DocDest.Sheets.hasByName(NomFeuille) Then
    MsgBox "Cette feuille existe déjà"
else
    '*******************
    'Rendre la feuille à copier active
    Feuille = DocOrig.getSheets.getByName(NomFeuille)
    DocOrig.CurrentController.ActiveSheet = Feuille
    '*******************
    'Copie
    oFrame = DocOrig.CurrentController.Frame 
    oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
    oDisp.executeDispatch(oFrame, ".uno:SelectAll", "", 0, Array())
    oDisp.executeDispatch(oFrame, ".uno:Copy", "", 0, Array())
    '*******************
    'On se place sur DocDest
    'Création de la nouvelle feuille
    DocDest.GetSheets.insertNewByName(Direction,GlobalDoc.Sheets.Count+1)'En dernier
    'Récupération de l'objet Feuille ayant ce nom
    NewFeuille = DocDest.getSheets.getByName(NomFeuille)
    'Activation de cette feuille
    DocDest.CurrentController.ActiveSheet = NewFeuille
    'Selection de la frame
    oFrame = DocDest.CurrentController.Frame 
    oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
    '*******************    
    'Collage        
    oDisp.executeDispatch(oFrame, ".uno:Paste", "", 0, Array())
End If
 
End Sub
Informations supplémentaires :
- version Open Office : 3.0.0
- OS : Vista SP1