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 copie feuille sans les formules


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    Macro copie feuille sans les formules
    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
    End Sub
     
    Sub CopieFeuilleActive_NouveauClasseur  
      Dim oFrame As Object  
      Dim oDisp As Object  
      Dim Args(2) As New com.sun.star.beans.PropertyValue  
     
      oFrame = ThisComponent.CurrentController.Frame  
      oDisp = createUnoService("com.sun.star.frame.DispatchHelper")  
     
      Args(0).Name = "DocName"  
      Args(0).Value = ""  
      Args(1).Name = "Index"  
      Args(1).Value = 65535  
      Args(2).Name = "Copy"  
      Args(2).Value = True  
     
      oDisp.ExecuteDispatch(oFrame, ".uno:Move", "", 0, Args())  
    End Sub


    Bonjour,

    Voici la macro pour la copie de la feuille mais problème la feuille en question est chargée en formules et prends un temps fou pour se copier alors je pensais si il était possible qu'il serait préférable de faire un copier coller uniquement des valeurs bruts.
    Merci d'avance pour vos lumières !!!

  2. #2
    Membre actif
    Macro copie feuille sans les formules
    Bonjour,

    Que veux tu vraiment faire ?
    - Copier une feuille complète vers une autre feuille du même classeur ?
    - Copier une feuille complète vers une autre classeur ?

    Le titre de ta sub :
    Sub CopieFeuilleActive_NouveauClasseur
    donne le doute.

    Aussi si ce n'est que le résultat des formules que tu veux copier, alors effectivement il est inutile de copier/coller les formules avec.

    Peux tu préciser ?

    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  3. #3
    Membre à l'essai
    Citation Envoyé par Mobydick_62 Voir le message
    Bonjour,

    Que veux tu vraiment faire ?

    - Copier une feuille complète vers une autre classeur ?
    Oui c'est bien ça mon objectif arriver à copier une feuille vers un autre classeur mais sans les formules afin d’accélérer le processus

  4. #4
    Membre actif
    Macro copie feuille sans les formules
    Bonjour,
    Ci-dessous le code. Le collage se fait sur un nouveau classeur. Si c'est sur un classeur existant et ouvert le code sera différent (mais tu le précises pas).

    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
    'Copie d'une feuille d'un classeur vers un nouveau classeur
    Sub CopieFeuilleActive_NouveauClasseur()
     Dim oCalcSource As Object, oCalcDest As Object 
     Dim oFeuilleSource As Object, oFeuilleDest as Object
     Dim oFrame As Object, oDisp As Object
     
     'Document source
     oCalcSource = thiscomponent
     
     'Je désigne la feuille source et l'active(si elle ne l'est pas)
     oFeuilleSource = oCalcSource.getSheets.getByName("Feuille1")
     oCalcSource.CurrentController.ActiveSheet = oFeuilleSource
     
     'Copie
     oFrame = oCalcSource.CurrentController.Frame 
     oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
     oDisp.executeDispatch(oFrame, ".uno:SelectAll", "", 0, Array())
     oDisp.executeDispatch(oFrame, ".uno:Copy", "", 0, Array())
     
     'J'ouvre un nouveau document Calc    
     oCalcDest = StarDesktop.LoadComponentFromURL("private:factory/scalc","_blank",0,array())   
     
     'Je désigne la feuille qui va recevoir les données  
     oFeuilleDest = oCalcDest.getSheets.getByName("Feuille1")
     'Activation de cette feuille
     oCalcDest.CurrentController.ActiveSheet = oFeuilleDest
     'Selection de la frame
     oFrame = oCalcDest.CurrentController.Frame 
     oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
     
     'Collage des données sans les formules     
      oDisp.executeDispatch(oFrame, ".uno<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />asteOnlyValue", "", 0, Array())
     
    End Sub


    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  5. #5
    Membre à l'essai
    Cela marche parfaitement bien la rapidité d’exécution est au rendez-vous mais il subsiste un petit problème la copie des chiffres s'effetue très bien sans les formules sauf que dans mon tableau certaines cellules sont du texte ou encore des dates et là la copie ne fonctionne pas....
    Grand merci à vous fin connaisseur des secrets de calc votre aide m'est précieuse

  6. #6
    Membre actif
    Macro copie feuille sans les formules
    Dans ce cas :

    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
    46
    47
    48
    'Copie d'une feuille d'un classeur vers un nouveau classeur
    Sub CopieFeuilleActive_NouveauClasseur()
     Dim oFeuilleSource As Object, oFeuilleDest as Object
     Dim oFrame As Object, oDisp As Object
     Dim oCalcSource As Object, oCalcDest As Object 
     Dim args(5) As New com.sun.star.beans.PropertyValue
     
     'Document source
     oCalcSource = thiscomponent
     
     'Je désigne la feuille source et l'active(si elle ne l'est pas)
     oFeuilleSource = oCalcSource.getSheets.getByName("Feuille1")
     oCalcSource.CurrentController.ActiveSheet = oFeuilleSource
     
     'Copie
     oFrame = oCalcSource.CurrentController.Frame 
     oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
     oDisp.executeDispatch(oFrame, ".uno:SelectAll", "", 0, Array())
     oDisp.executeDispatch(oFrame, ".uno:Copy", "", 0, Array())
     
     'J'ouvre un nouveau document Calc    
     oCalcDest = StarDesktop.LoadComponentFromURL("private:factory/scalc","_blank",0,array())   
     
     'Je désigne la feuille qui va recevoir les données  
     oFeuilleDest = oCalcDest.getSheets.getByName("Feuille1")
     'Activation de cette feuille
     oCalcDest.CurrentController.ActiveSheet = oFeuilleDest
     'Selection de la frame
     oFrame = oCalcDest.CurrentController.Frame 
     oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
     
     'Propriété du collage spécial
     args(0).Name = "Flags"
     args(0).Value = "SVDT"
     args(1).Name = "FormulaCommand"
     args(1).Value = 0
     args(2).Name = "SkipEmptyCells"
     args(2).Value = false
     args(3).Name = "Transpose"
     args(3).Value = false
     args(4).Name = "AsLink"
     args(4).Value = false
     args(5).Name = "MoveMode"
     args(5).Value = 4
     
    oDisp.executeDispatch(oFrame, ".uno:InsertContents", "", 0, args()) 
     
    End Sub


    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  7. #7
    Membre à l'essai
    bonjour,

    alors oui la copie de la feuille fonctionne mais pourrait on attribuer cette macro à une feuille en particulier d'un classeur bien definit car en basant la macro sur la feuille active celle ci bug de temps à autre et ne copie pas la bonne feuille.*

    Merci d'avance

  8. #8
    Membre actif
    Macro copie feuille sans les formules
    Bonsoir,
    En pièce jointe le fichier exemple.
    En considérant que la feuille du tableau qui reçoit les données soit vierge et qu'elle existe.
    Sinon il faudra revenir vers moi.
    Cordialement

    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

###raw>template_hook.ano_emploi###