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

Fermé
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 - Modifié par roideseaux le 9/12/2016 à 10:36
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 10 déc. 2016 à 15:58
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
10 déc. 2016 à 15:16
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
10 déc. 2016 à 15:58
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