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

Macros et VBA Excel Discussion :

Extraire une feuille d'un classeur fermé vers un classeur ouvert


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut Extraire une feuille d'un classeur fermé vers un classeur ouvert
    Bonjour à tous,

    Je souhaite copier une feuille d'un classeur fermé dans un classeur ouvert. Ayant des connaissances assez limitées en VBA, j'ai essayé de lire des tutoriels ( le silkyroad sur développez.net) mais sans réel succès. Par ailleurs, j'ai trouvé sur le forum un petit bout de code qui permet d'atteindre mon objectif.

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub Test()
     
        Dim ConCL As Object
        Dim Rs As Object
        Dim FeuilleDest As Worksheet
        Dim NomFichier As String
        Dim FeuilleSource As String
        Dim Plage As String
     
        'chemin et nom du classeur cible
        NomFichier = "D:\Users\ighilahrizrya\Desktop\SRM 2018 11 27 22H30.xlsm"
     
        'plage à récupérer
        Plage = "A:Z"
     
        'nom de la feuille où on doit récupérer les valeurs, à adapter...
        FeuilleSource = "Feuil1"
     
        'connexion au classeur
        ConnexionCLasseur ConCL, NomFichier, Rs
     
        'effectue la récup
        With Rs
     
            .CursorType = 1
            .LockType = 3
            .Open "SELECT * FROM `" & FeuilleSource & "$" & Plage & "` ", ConCL
     
            If Not Rs.EOF Then
     
                Set FeuilleDest = ActiveWorkbook.Worksheets("Feuil1")
     
                FeuilleDest.Range("A1").CopyFromRecordset Rs
     
            Else
     
                'si la feuille est vide...
                MsgBox "Aucun enregistrement renvoyé.", vbCritical
     
            End If
     
        End With
     
        ConCL.Close
     
        Set Rs = Nothing
        Set ConCL = Nothing
     
    End Sub
     
    'Sub de connexion (séparée ici pour plus de lisibilité)
    Private Sub ConnexionCLasseur(ConnexCL As Object, _
                                  Fichier As String, _
                                  Optional Rs)
     
        'création de l'objet en relation tardive (évite de cocher la référence)
        Set ConnexCL = CreateObject("ADODB.Connection")
     
        'si demandé, crée l'objet pour le jeu d'erregistrements
        If Not IsMissing(Rs) Then
            Set Rs = CreateObject("ADODB.Recordset")
        End If
     
        'ouvre la connexion
        ConnexCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=" & Fichier & ";" & _
                  "Extended Properties=""Excel 8.0;HDR=NO;IMEX= 2;"""
     
    End Sub
    Des que je lance la macro, une erreur s'affiche :
    ' -2147467259 (80004005)'
    External table is not in the format expected


    Des que je clique sur débogage, une partie du code est en surbrillance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ConnexCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=" & Fichier & ";" & _
                  "Extended Properties=""Excel 8.0;HDR=NO;IMEX= 2;"""
    Je travaille avec la version Excel 2013. J'ai par ailleurs activé le Microsoft Active x Data objects.
    Il me semble que le problème vient du fait que le classeur cible ( celui ou je vais récupérer mes données) n'est pas au bon format.
    Plus précisément, il s'agit d'un classeur avec une seule feuille. Dans celle ci il y a une colonne et une ligne avec des noms et pour chaque couple ligne-colonne correspond une valeur numérique. En gros il s'agit d'une matrice.

    Si l'un de vous à la reponse, ca m'aiderait beaucoup pour mon travail.
    Merci d'avance

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 123
    Points
    5 123
    Par défaut
    bonsoir
    Pour faire cette tache je fais avec :
    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
    Sub importProdVte()
    Dim wkA As Workbook, wkB As Workbook
    Dim chemin As String, fichier As String
    Dim j As Long
    Application.ScreenUpdating = False
    Set wkA = ThisWorkbook
    chemin = "Z:\TRAVAUX COMPTABLES BNA\Controle de Gestion\"
    fichier = "RAPPORT JOURNALIER.xlsx"
    Workbooks.Open chemin & fichier
    Set wkB = ActiveWorkbook
     j = wkB.Sheets("Alf3").Range("A" & Rows.Count).End(xlUp).Row
    wkA.Sheets("Vente").Range("C1:G" & j).Value = wkB.Sheets("Alf3").Range("D1:H" & j).Value
    wkA.Sheets("Vente").Range("A1:B" & j).Value = wkB.Sheets("Alf3").Range("L1:M" & j).Value
     
    wkB.Close True
     
     Application.ScreenUpdating = True
     
    End Sub
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Merci pour ta réponse. Cependant, des que je lance la macro (en adaptant les chemins d'accès), il me sort une erreur disant :
    l'indice n'appartient pas à la sélection
    et il me surligne cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j = wkB.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    Sais tu pourquoi ?

    Merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Finalement c'est bon, j'ai reussi à regler le problème
    Merci pour ton aide

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

Discussions similaires

  1. [XL-2010] VBA_ Copier une feuille depuis un classeur ouvert vers un classeur fermé
    Par spike72 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/09/2018, 23h23
  2. Extraire une feuille d'un classeur fermé vers un classeur ouvert
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2013, 11h23
  3. [WD-2007] récupérer le nom d'une feuille d'un classeur excel fermé, depuis word
    Par markelov dans le forum VBA Word
    Réponses: 0
    Dernier message: 24/02/2010, 11h33
  4. Obtenir le nom d'une feuille d'un classeur fermé
    Par maurice_rismo dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 19/08/2009, 15h51
  5. [VBA] Transférer une feuille dans un classeur fermé
    Par Dephi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/07/2007, 12h11

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