Récupérer cellules d'un fichier ods en VBA

roideseaux Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à automatiser une mise à jour.
J'ai un classeur avec pas mal de formules et macros qui se sert d'une base de donnée. Pour le moment, je suis obligé de copier coller le contenu de cette base de donnée manuellement dans une feuille de mon classeur.
Je voudrais donc pouvoir automatiser cette action, le souci, c'est que le fichier base de donnée est au format .ods...

Est-ce que quelqu'un aurait une solution à me proposer pour copier une plage de cellule d'un document .ods fermé vers une feuille de mon classeur ?

Merci !

Edit : J'ai utilisé l'enregistreur de macro, je ne pensais pas que ce serait si simple...
Sub MAJ_Composants()
    Dim DerLigne As Long, DerLigne_Base As Long
    DerLigne = Worksheets("Codes composants CMS").Range("C" & Rows.Count).End(xlUp).Row
        
    Workbooks.Open Filename:= _
        "X:\Chemin\Fichier.ods"
    DerLigne_Base = Range("C" & Rows.Count).End(xlUp).Row
    Range("A1:C" & DerLigne_Base).Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Moulinette2.xlsm").Activate
    Worksheets("Codes composants CMS").Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Windows("Fichier.ods").Activate
    ActiveWindow.Close
End Sub


Par contre, est-c que vous auriez une solution à me proposer pour ne pas passer par les .Activate ?
J'ai essayé ça mais ça ne fonctionne pas :
Windows("Moulinette2.xlsm").Worksheets("Codes composants CMS").Range("A1") = Range("A1:C" & DerLigne_Base).Value

A la place de :
    Range("A1:C" & DerLigne_Base).Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Moulinette2.xlsm").Activate
    Worksheets("Codes composants CMS").Range("A1").Select
    ActiveSheet.Paste


A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
Si ta macro est dans le fichier Moulinette2.xlsm :
Range("A1:C" & DerLigne_Base).Copy _
    ThisWorkbook.Worksheets("Codes composants CMS").Range("A1") 
sinon (ou si tu préfères) :
Range("A1:C" & DerLigne_Base).Copy _
    Workbooks("Moulinette2.xlsm").Worksheets("Codes composants CMS").Range("A1") 
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Autre chose, au lieu de :
Workbooks.Open Filename:= _
        "X:\Chemin\Fichier.ods"
Windows("Fichier.ods").Activate
ActiveWindow.Close
,tu peux faire :
dim wbods as Workbook
wbods=Workbooks.Open Filename:= _
        "X:\Chemin\Fichier.ods"
wbods.Close
Les variables de type Workbook et Worksheet, et d'autres encore, aident à remplacer les Select et Activate, et permettent d'éviter de spécifier plusieurs fois les noms des fichiers et des feuilles.
0