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 :

Copier des données de classeurs Excel fermés vers un classeur ouvert


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut Copier des données de classeurs Excel fermés vers un classeur ouvert
    Bonjour,

    Je débute sous VBA Excel et je rencontre quelques difficultés ...

    Je cherche à faire une macro qui me permette d'aller chercher dans un classeur fermé une plage de données pour la copier dans le classeur à partir duquel j'exécute ma macro.
    Pour ce faire, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub copieTCL_BD(nomFichier As String, i As Integer)
        'Classeur fermé
        Windows(nomFicher).Activate
        Application.CutCopyMode = False
        Sheets("BD" ).Range("C2:EP2" ).Copy
        'Classeur ouvert
        Windows("TBD_ConsolidationTotale.xls" ).Activate
        Sheets("BD" ).Range("D" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    End Sub
    Mais cela ne fonctionne pas

    Le Windows().Activate ne fonctionne pas :
    faut-il que mon fichier soit ouvert?
    Faut-il obligatoirement reprendre le nom du fichier complet (avec nom du chemin)?
    Le nomFichier ressemble à "TBD_TLC_Prenom-Nom_DateJour.xls"

    Merci par avance de votre aide

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Merci pour le lien!
    J'ai essayé d'avancer toute seule

    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
     
    'Ouverture du fichier fermé
        Dim connex As ADODB.Connection
        Dim Fichier As String
        Dim feuille As String
        Dim cellule As String
        'Le chemin du fichier à ouvrir
        Fichier = ThisWorkbook.Path & "\" & nomFichier
        'La feuille
         feuille = "BD$"
        'La plage de données à récupérer
        cellule = "C2:EP2"
        Set connex = New ADODB.Connection
        'Connexion
        With connex
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
        'Definition de la requête
     
        req_SQL = " Select * From [" & feuille & cellule & "]"
        MsgBox req_SQL
        Set Rst = New ADODB.Recordset
        Set Rst = connex.Execute(req_SQL)
        ' Ecriture du résultat dans BD
        Range("D" & noLigne).CopyFromRecordset Rst
        'Fermeture Connexion
        connex.Close
        Set connex = Nothing
    Mais cela ne fonctionne pas encore
    Si j'ai bien compris l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D" & noLigne).CopyFromRecordset Rst
    Devrait me permettre d'enregistrer ma plage de données prise dans le classeur excel fermé dans le classeur ou j'éxecute ma macro, n'est ce pas?

    Et cela ne fonctionne pas...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Points : 31
    Points
    31
    Par défaut
    Ben, je suis pas un grand spécialiste mais cela me parait bien compliqué... Mais je n'ai peut-être pas compris ce que tu voulais...

    Sinon, j'utiliserai plutôt "GetObject" et "Set" qui permettent de récupérer les données sans ouvrir le fichier.

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    A mon avis si tu débutes tu devrais plutôt rajouter dans ta macro quelque ligne pour ouvrir se fameux fichier prendre les données dont tu as besoin et le refermer, ça sera 1000 fois plus simple que de t'embêter avec du sql.
    De plus fait une recherche dans le forum et tu trouvera exactement la même question que tu poses aujourd'hui.
    Pour le critères de recherche (recherche -> avancé) tu tapes "Classeur fermé" tu sélectionnes bien Excel VBA et tu vas trouver ton bonheur je pense.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Soir Bon,j'ai retrouvé cela qui trainait dans un coin de mon PC,c'est bien sur à adapter à ton contexte

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Bonjour à tous

    Et merci pour vos réponses, j'utilises du SQL, car c'est ce que j'ai trouvé dans la note de SilkyRoad...

    Merci de vos indications, je vais avancer et je reviens vers vous dès que cela fonctionne (ou peut-être avant...)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Alors une erreur tout bête que je ne comprends pas très bien....
    Et qui m'arrive régulièrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub copieTCL_BD(nomFichier As String, i As Integer)
        Dim tableau As Variant
        lireDonnees(nomFichier, tableau)
    Alors la dernière ligne me renvoit le message d'erreur
    "Erreur de compilation: Attendu:="

    Pourquoi? j'ai du mal à comprendre...

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Enlève les parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lireDonnees nomFichier, tableau
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Tout simplement...

    Merci!


    Bon comme je suis très novice en VB, quel site me conseillerez vous pour apprendre les bases du VB, car je suis un peu perdue sur la syntaxe...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Dans le code que m'a donné kiki29, j'ai beaucoup de difficultés à comprendre cette partie

    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
     
    ShDatas.Cells.Clear
        NumeroLigne = 1: r = 1
     
        If NbFichiers = 0 Then Exit Sub
     
        For i = 1 To UBound(TabFichiers)
            NomFichier = Dossier & "\" & TabFichiers(i)
            LireDonnéesADO NomFichier, NomFeuille, Plage, Tableau
            With ShDatas
                .Range("A" & r, .Cells(r + UBound(Tableau, 1) - 1, UBound(Tableau, 2))).Value = Tableau
                r = .Range("A65536").End(xlUp).Row + 1
            End With
            NumeroLigne = NumeroLigne + 1
            Application.StatusBar = i & " / " & UBound(TabFichiers)
        Next
     
        With ShDatas
            .Activate
            .Columns.AutoFit
            .Range("A1").Select
        End With
    Je ne comprends pas ce que sont les ShDatas
    Ni ce que signifie l'expression With...

  12. #12
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  13. #13
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    re, une ultime version

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Kiki29

    Serait-ce possible de mettre des commentaires sur cette partie, car là je suis vraiment perdue....

    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
     
    ShDatas.Cells.Clear
        NumeroLigne = 1: r = 1
     
        If NbFichiers = 0 Then Exit Sub
     
        For i = 1 To UBound(TabFichiers)
            NomFichier = Dossier & "\" & TabFichiers(i)
            LireDonnéesADO NomFichier, NomFeuille, Plage, Tableau
            With ShDatas
                .Range("A" & r, .Cells(r + UBound(Tableau, 1) - 1, UBound(Tableau, 2))).Value = Tableau
                r = .Range("A65536").End(xlUp).Row + 1
            End With
            NumeroLigne = NumeroLigne + 1
            Application.StatusBar = i & " / " & UBound(TabFichiers)
        Next
     
        With ShDatas
            .Activate
            .Columns.AutoFit
            .Range("A1").Select
        End With

  15. #15
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    re, je te renvoie aux 2 liens donnés plus haut ainsi qu'à Ado_03.zip

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Points : 72
    Points
    72
    Par défaut
    Finalement, j'ai abandonné ton idée kiki29, trop compliquée et que je ne parvenais pas à mettre en oeuvre.
    Je suis parvenue à faire ce que je souhaitais en ouvrant directement chacun des fichiers Excel (20 au max).
    Ce n'est peut-être pas la solution la plus optimale en terme de développement, mais c'est certainement la plus efficace au vu de mes contraintes de temps.

    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
     
     
    Sub copieTLC_BD(nomFichier As String, i As Integer)
        'Ouvrir le fichier
        Dim Fichier As String
        Fichier = ThisWorkbook.Path & "\" & nomFichier
        Workbooks.Open Fichier
        'Réaliser la copie
        Windows(nomFichier).Activate
        Application.CutCopyMode = False
        Sheets("BD").Range("B2:EP2").Copy
        Windows("TBD_ConsolidationTotale.xls").Activate
        Sheets("BD").Range("D" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        'Fermer le fichier
        Workbooks(nomFichier).Close False
     
     
     
    End Sub

  17. #17
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Effectivement si ton niveau en VB/VBA est modeste tu as peu de chance d'y parvenir cependant tu n'avais qu'à adapter dans ADO_03.zip les 3 constantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Const NomFeuille As String = "Feuil1"
    Const Plage As String = "C6:G26"
    Const FichierRch As String = "Classeur*.xls"
    à ton contexte, par contre en terme de performances ta solution n'est pas optimale,surtout si tu as, je l'espère,un Anti Virus qui teste tes fichiers Excel avant ouverture

    Encadre ta procédure par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Application.ScreenUpdating=False
    ....
    Application.ScreenUpdating=True

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

Discussions similaires

  1. transférer un fichier CSV fermé vers un classeur Excel fermé
    Par Oliver_WF dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/08/2014, 14h20
  2. [XL-2010] Copier une plage de données d'un classeur excel X a un classeur excel Y
    Par CmsrFr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/05/2012, 19h00
  3. Stockage des données sur server Sql 2005 a travers classeur excel.
    Par lele79 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/11/2010, 12h48
  4. [XL-2003] copier des données sur feuil excel puis imprimer
    Par fullmetalknet dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/08/2009, 18h41
  5. [VBA-E]Importer des données de fichiers excel fermés
    Par bart64 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/04/2006, 11h35

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