Copier la feuille d'un classeur fermé vers un classeur ouvert Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
b
bidexcel
Membre habitué
Membre habitué
Messages : 65
Appréciation reçue : 1
Inscrit le : 21 novembre 2017
Version d'Excel : 2013 FR

Message par bidexcel » 21 juin 2019, 20:56

pierrep56 a écrit :
21 juin 2019, 15:43
1/ Attention au nom de fichier : Analyse technique finale .xlsm n'est pas Analyse technique finale.xlsm => cf espace avant le point

2/ Je ne sais pas quel est ce p$*!n de format de fichier, mais en copiant/collant les données dans un fichier neuf nommé Analyse technique finale.xlsm, onglet Base de données cours le code fonctionne sans problème.

3/ Si les données commencent en ligne 3, il faut l'indiquer dans la requête

Voir fichier démo => en modifiant dans le code le chemin du nouveau fichier Analyse technique finale.xlsm (sans espace avant le point)

Pierre
Super :) j'ai testé en remplaçant comme tu l'as et ca marche parfaitement. Je voudrais savoir quoi changer dans le code pour une copie coller en gardant la mise mise en forme que le fichier source.

Merci à toi Pierre
b
bidexcel
Membre habitué
Membre habitué
Messages : 65
Appréciation reçue : 1
Inscrit le : 21 novembre 2017
Version d'Excel : 2013 FR

Message par bidexcel » 22 juin 2019, 14:53

pierrep56 a écrit :
21 juin 2019, 15:43
1/ Attention au nom de fichier : Analyse technique finale .xlsm n'est pas Analyse technique finale.xlsm => cf espace avant le point

2/ Je ne sais pas quel est ce p$*!n de format de fichier, mais en copiant/collant les données dans un fichier neuf nommé Analyse technique finale.xlsm, onglet Base de données cours le code fonctionne sans problème.

3/ Si les données commencent en ligne 3, il faut l'indiquer dans la requête

Voir fichier démo => en modifiant dans le code le chemin du nouveau fichier Analyse technique finale.xlsm (sans espace avant le point)

Pierre
Bonjour Pierre
j'ai remarqué ce matin que la copie s'arrête à la date du "01/06/2017" colonne IU, pourtant on a bien définit la copie sur le fichier source (plage A3:BPQ57). Que dois je changer dans ton code pour qu'il prenne en compte le reste des données?

Bon weekend à toi !!
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'207
Appréciations reçues : 198
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 22 juin 2019, 19:11

En effet j'aurai du y penser, avec excel le Sql est limité à 255 colonnes max.

Par ailleurs, ici les données sont organisées de façon inhabituelles, il est plus classique d'avoir des données journalières en lignes (et non pas en colonnes).

Avec cette présentation de données, il faut oublier cette méthode.
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'207
Appréciations reçues : 198
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 23 juin 2019, 11:09

A la réflexion, avec une boucle ça passe.
C'est pas très académique, mais bon...
(Le chemin du fichier est toujours à mettre à jour)
Pierre
' ***********************************************************************
' *****                                                             *****
' *****        CODE PierreP56 : http://tatiak.canalblog.com/        *****
' *****                                                             *****
' ***********************************************************************


Sub Exemple_d_appel()
Dim Fichier As String, Dt As String
Dim Dest As Range, cl As Long, Jr As Integer

    'Fichier = "C:\Users\amouedraogo\Desktop\Macro\Analyse technique.xlsm"
    Fichier = "D:\Xl\Forum\Analyse technique finale.xlsm"
    Application.ScreenUpdating = False
    With Sheets("Base de données cours")
        .UsedRange.ClearContents
        Jr = 254
        RequeteClasseurFerme Fichier, .Cells(1, 1), Jr
        Dt = "0"
        Do While CDate(Dt) <= Format(Date, "dd/mm/yyyy")
            cl = .Cells(1, Columns.Count).End(xlToLeft).Column
            Set Dest = .Cells(1, cl + 1)
            Dt = Format(DateAdd("d", Jr, CDate(Dest.Offset(0, -1).Value)), "dd/mm/yyyy")
            If CDate(Dt) >= Date Then Jr = CDate(Dt) - Date
            RequeteClasseurFerme Fichier, Dest, Jr
        Loop
    End With
    Set Dest = Nothing
    Application.ScreenUpdating = True
End Sub
        

Sub RequeteClasseurFerme(Fichier As String, Dest As Range, Jr As Integer)
Dim Cn As Object, Rst As Object, Adr As String, Req As String, j As Long
    
    Set Cn = CreateObject("ADODB.Connection")
    Cn.Provider = "MSDASQL"
    Cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
             "DBQ=" & Fichier & "; ReadOnly=False;"

    Set Rst = CreateObject("ADODB.Recordset")

    On Error Resume Next
    Adr = Replace(Dest.Offset(2, 0).Address & ":" & Dest.Offset(56, Jr).Address, "$", "")
    
    Req = "SELECT * FROM [Base de données cours$" & Adr & "]"
    Rst.Open Req, Cn, 3
    
     With Dest
        For j = 1 To Rst.Fields.Count        ' =>les entêtes
            .Offset(0, j - 1).Value = CDate(Rst.Fields(j - 1).Name)
        Next j
        .Offset(1, 0).CopyFromRecordset Rst  ' =>les données
    End With
    
    Cn.Close
    Set Rst = Nothing
    Set Cn = Nothing
End Sub
Classeur2.xlsm
(30.24 Kio) Téléchargé 18 fois
1 membre du forum aime ce message.
T
Tom_Pouce
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 15 juin 2019
Version d'Excel : 2016 Pro+ FR

Message par Tom_Pouce » 25 juin 2019, 23:36

Bonjour messieurs,

Je suis vos échanges avec la plus grande attention pour éviter la redite (mais j'ai tout de même fait un sujet par ailleurs pour mon problème ici). J'ai une petite expérience en VBA et suis également entrain de me mettre à ADO.

Je suis un peu chafouin parce que j'ai testé les fichiers proposés par pierrep56, mais ça ne fonctionne pas chez moi. Comme dit en Late Binding, ça ne doit pas être un problème de référence, donc je sèche !
Screen-000073.png
Screen-000073.png (6.25 Kio) Vu 17 fois
Une idée messieurs ?
pierrep56 a écrit :
21 juin 2019, 15:43
1/ Attention au nom de fichier : Analyse technique finale .xlsm n'est pas Analyse technique finale.xlsm => cf espace avant le point

2/ Je ne sais pas quel est ce p$*!n de format de fichier, mais en copiant/collant les données dans un fichier neuf nommé Analyse technique finale.xlsm, onglet Base de données cours le code fonctionne sans problème.

3/ Si les données commencent en ligne 3, il faut l'indiquer dans la requête

Voir fichier démo => en modifiant dans le code le chemin du nouveau fichier Analyse technique finale.xlsm (sans espace avant le point)

Pierre
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'207
Appréciations reçues : 198
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 26 juin 2019, 11:20

Bonjour à tous,

C'est un problème connu avec le format xlsb
ADO ne fonctionne que si le xlsb est ouvert
Pour lecture d'un fichier fermé, préférer le format xlsx ou xlsm

Pierre
b
bidexcel
Membre habitué
Membre habitué
Messages : 65
Appréciation reçue : 1
Inscrit le : 21 novembre 2017
Version d'Excel : 2013 FR

Message par bidexcel » 26 juin 2019, 15:34

Bonjour Pierre merci beaucoup pour ton aide. Cela fonctionne bien. je vais changer le format d'affichage des données du format source ou a défaut ajouter un code pour coller en transposer (date en ligne et titre en colonne).
T
Tom_Pouce
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 15 juin 2019
Version d'Excel : 2016 Pro+ FR

Message par Tom_Pouce » 27 juin 2019, 00:37

pierrep56 a écrit :
26 juin 2019, 11:20
Bonjour à tous,

C'est un problème connu avec le format xlsb
ADO ne fonctionne que si le xlsb est ouvert
Pour lecture d'un fichier fermé, préférer le format xlsx ou xlsm

Pierre
Merci Pierrep56 pour tes réponses. J'ai d'ailleurs clôturé mon sujet. Mais ça ne répond pas à la problématique que j'ai soulevée ici.
J'exécute le code que tu as proposé à bidexcel un peu plus haut (ici) en cliquant sur le bouton que tu as prévu. Et voici l'erreur que ça me remonte :
Screen-000074.png
Screen-000074.png (14.09 Kio) Vu 15 fois
Screen-000075.png
Screen-000075.png (21.97 Kio) Vu 15 fois
Je continue à chercher mais ne trouve pas l'explication.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message