IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Copie d'un ensemble de classeurs dans le classeur actuel [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Copie d'un ensemble de classeurs dans le classeur actuel
    Bonjour,

    J'ai écris un programme en VB qui le fait actuellement cellule par cellule.
    Afin d'optimiser le temps de travail; je compte le faire par Bloc.
    Pour ce travail, j'ai à ma disposition 13 classeurs.
    un "vierge" avec 13 feuilles Annuel, et de janvier à décembre.
    12 classeurs mensuels.
    Le but est de regrouper l'ensemble des classeurs "mensuel" dans l"annuel détaillé.
    Je souhaiterai que le travail soit plus rapide en copiant des blocs complet.
    Ce que je viens d'écrire ne fonctionne pas, et j'ai besoin de votre aide.

    Voici ce que j'ai écrit.

    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
    49
    sub majTrait1
     
     
    ''   'Traitement en Totalité à partir de janvier Amaj
    '   
        Dim Doc As Object
        Dim Sheet As Object
        Dim sheet1 As Object
        Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
        Dim CellAddress As New com.sun.star.table.CellAddress
     
    '    Doc = StarDesktop.CurrentComponent
        Sheet = oGip1.Sheets(0)
        sheet1 = thiscomponent.sheets(0)
     
    '    Classeur origine
     
        CellRangeAddress.Sheet = 0
        CellRangeAddress.StartColumn = 0
        CellRangeAddress.StartRow = 1
        CellRangeAddress.EndColumn = 15
        CellRangeAddress.EndRow = maxLig1
     
    '    Classeur destination
     
        Sheet = sheet1
     
    '    Doc = StarDesktop.CurrentComponent
    '    Sheet = Thiscomponent.Sheets(0)
     
        CellAddress.Sheet = 0
        CellAddress.Column = 0
        CellAddress.Row = 1
     
    '    Copie de l origine dans l annuel destination
     
        Sheet.copyRange(CellAddress, CellRangeAddress)
     
        CellAddress.Sheet = 1
        CellAddress.Column = 0
        CellAddress.Row = 1
     
    '    Copie de l origine dans le mensuel destination
     
        Sheet.copyRange(CellAddress, CellRangeAddress)
     
     
     
    end sub
    Merci par avance,

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Euh, par rapport à ton code c'est qui ne fonctionne pas :
    • Tu as une erreur ? et où ?
    • Cela ne donne pas ce que tu veux ?
    • etc.

    Sinon tu utilises maxLig1, mais tu ne lui donnes aucune valeur ???
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Euh, par rapport à ton code c'est qui ne fonctionne pas :
    • Tu as une erreur ? et où ?
    • Cela ne donne pas ce que tu veux ?
    • etc.

    Sinon tu utilises maxLig1, mais tu ne lui donnes aucune valeur ???
    Bonjour,

    Maxlig1 est renseigné en amont, et correspond à la valeur de la dernière ligne renseigné du classeur mensuel ouvert par le programme (nombre de lignes variable d'un mois sur l'autre) ?
    Dans cette partie de programmation, la valeur de sheet est soit oGip1 pour la partie "origine" et "this component" pour la partie destination.
    Si je mets en commentaire la ligne "sheet = sheet1" et que je renseigne cellAdress.row par la valeur 10000 , la copie se fait bien à partir de la ligne 10000, mais dans le classeur origine.
    Si je supprime la ligne en commentaire, aucune copie ne se fait dans le classeur vierge.
    Il me manque quelque chose dans ma procédure, mais où et quoi ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Voici 2 classeurs pour tester
    Bonjour,

    Je joints 2 classeurs pour test.
    Le classeur contenant la macro est "Récap absences annuelles vierge par bloc Récap Absences annuelles vierge par bloc.odsAbsences Janvier Amaj.ods.

    Mon but est de copier l'ensemble des lignes du classeur absence dans Récap.
    Dans ce que je viens d'envoyer, en ligne à ligne, le copie se fait dans le classeur "Absence" feuille A et B.
    Je souhaiterai que cela se fasse dans "Récap" en réel, et en ligne à ligne sur l'annuel je suis à plus de 80 000 lignes à traiter.

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    je pense que la macro de copier/coller spécial de plage de cellules que j'avais écrit en 2015 pourrait te servir.
    Voilà ce que cela pourrait donner pour ce que tu veux faire :
    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
    Sub majTraitJP
    ' J.P 
    ' copier/coller spécial cellules feuille classeur
    	'Nom du fichier source :
    	sGip1="Absences Janvier Amaj.ods"
     
    '	Ouverture d'un workbook
    	openWbk(oGip1,sGip1)
    	maxLig1=getMaxRow(oGip1)
    oDoc1 = oGip1
    oDoc2 = thisComponent
    oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    oFrame1 = oDoc1.CurrentController.Frame
    ' On sélectionne la plage de cellule à copier
    oSheet = oDoc1.Sheets(0)
    rng = oSheet.getCellRangeByName("A2:Q" + MaxLig1 + 1)
    oDoc1.CurrentController.Select(rng)
    ' On utilise un Dispatch pour copier la plage
    oDispatcher.executeDispatch(oFrame1, ".uno:Copy", "", 0, Array())
    ' On sélectionne la première cellule de l'endroit où copier
    rng = oDoc2.Sheets(0).getCellRangeByName("A2")
    oDoc2.CurrentController.Select(rng)
    ' on renseigne les arguments pour le coller spécial
    dim args1(5) as new com.sun.star.beans.PropertyValue
    ' Flags :  A=Tout VSD=Valeurs T=Formats F=Formules VSDT=Valeurs&Formats
    args1(0).Name = "Flags"
    args1(0).Value = "A"
    'FormulaCommand : 0=aucune 1=addition 2=soustraction 3=multiplication 4=Division
    args1(1).Name = "FormulaCommand"
    args1(1).Value = 0
    args1(2).Name = "SkipEmptyCells"
    args1(2).Value = false
    args1(3).Name = "Transpose"
    args1(3).Value = false
    args1(4).Name = "AsLink"
    args1(4).Value = false
    args1(5).Name = "MoveMode"
    args1(5).Value = 4
    oFrame2 = oDoc2.CurrentController.Frame
    oDispatcher.executeDispatch(oFrame2, ".uno:InsertContents", "", 0, args1())
    end sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    je pense que la macro de copier/coller spécial de plage de cellules que j'avais écrit en 2015 pourrait te servir.
    Voilà ce que cela pourrait donner pour ce que tu veux faire :
    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
    Sub majTraitJP
    ' J.P 
    ' copier/coller spécial cellules feuille classeur
    	'Nom du fichier source :
    	sGip1="Absences Janvier Amaj.ods"
     
    '	Ouverture d'un workbook
    	openWbk(oGip1,sGip1)
    	maxLig1=getMaxRow(oGip1)
    oDoc1 = oGip1
    oDoc2 = thisComponent
    oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    oFrame1 = oDoc1.CurrentController.Frame
    ' On sélectionne la plage de cellule à copier
    oSheet = oDoc1.Sheets(0)
    rng = oSheet.getCellRangeByName("A2:Q" + MaxLig1 + 1)
    oDoc1.CurrentController.Select(rng)
    ' On utilise un Dispatch pour copier la plage
    oDispatcher.executeDispatch(oFrame1, ".uno:Copy", "", 0, Array())
    ' On sélectionne la première cellule de l'endroit où copier
    rng = oDoc2.Sheets(0).getCellRangeByName("A2")
    oDoc2.CurrentController.Select(rng)
    ' on renseigne les arguments pour le coller spécial
    dim args1(5) as new com.sun.star.beans.PropertyValue
    ' Flags :  A=Tout VSD=Valeurs T=Formats F=Formules VSDT=Valeurs&Formats
    args1(0).Name = "Flags"
    args1(0).Value = "A"
    'FormulaCommand : 0=aucune 1=addition 2=soustraction 3=multiplication 4=Division
    args1(1).Name = "FormulaCommand"
    args1(1).Value = 0
    args1(2).Name = "SkipEmptyCells"
    args1(2).Value = false
    args1(3).Name = "Transpose"
    args1(3).Value = false
    args1(4).Name = "AsLink"
    args1(4).Value = false
    args1(5).Name = "MoveMode"
    args1(5).Value = 4
    oFrame2 = oDoc2.CurrentController.Frame
    oDispatcher.executeDispatch(oFrame2, ".uno:InsertContents", "", 0, args1())
    end sub
    Ami calmant, J.P
    Merci, je vais essayer sur le champ.
    Ca fonctionne SUPER.
    Merci à toi

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    comme il est dit dans la signature de zoom61 :

    N'oubliez pas le Tag Résolu afin de faciliter la recherche, et en votant pouce vers le haut si vous êtes satisfait de la réponse, cela permet de mieux la cibler.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Importer des données de plusieurs classeur dans un classeur, sous condition
    Par Bibi33130 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/03/2016, 08h40
  2. [XL-2013] Ajouter les feuilles d'un classeur dans le classeur actif
    Par cschauss dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/02/2015, 00h07
  3. [XL-2003] Compiler les cellules de plusieurs classeurs dans un classeur
    Par Kestion100 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/06/2013, 17h17
  4. import de donnes de differents classeurs dans un classeur
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/02/2012, 23h47
  5. [VBa-e] Copie 1 feuille (valeur) dans new classeur ?
    Par leonserbe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/05/2007, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo