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 cellule d'un classeur fermé [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Par défaut Copier cellule d'un classeur fermé
    Bonjour,

    Je souhaiterai copier un cellule ou une plage de cellule definie d'un classeur fermé, dans la page actuelle à l'aide d'un bouton macro.
    J'ai déjà le code suivant qui fonctionne mais copie toute les données du classeur source et je voudrais pouvoir choisir qu'une seule cellule.
    Je suis débutant dans ce domaine, merci pour votre aide.

    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
    Sub importer()
     Dim Source As Object
     Dim Rst As Object
     Dim ADOCommand As Object
     Dim Chemin As String, Cellule As String, Feuille As String
     Dim Cellule2 As String, Fichier As String
     
    '------------------------------------------------------------------------
    '---------Importation Données depuis Classeur Fermé------------
    '------------------------------------------------------------------------
     
     'Plage variable des cellules contenant les données à récupérer dans le classeur fermé
     'Variabilité de la plage obtenue par une commande Concatener dans la feuille actuelle
     Cellule = Range("L35:L35")
     
       'Pour une plage de cellules, utilisez: Cellule = "A4:C10" et une simple cellule : cellule = "A4"
     
     'Nom de la feuille ou onglet variable ciblé dans le classeur fermé
     'Variabilité de la feuille obtenue par une commande Concatener dans la feuille actuelle
     Feuille = "B1150$"
       'N'oubliez pas d'ajouter $ au nom de la feuille.
       'Pour une feuille connue, utilisez : Feuille = "Exemple$"
     
     'Chemin complet et variable du classeur fermé
     'Variabilité obtenue par une commande Concatener dans la feuille actuelle
     Chemin = Range("M04").Value
       'Pour un chemin unique défini, utilisez : Chemin = "C:\Utilisateur\Bureau\Test.xls"
     
     'Instance LateBinding pour connexion au classeur fermé sans activation préalable
     'de Microsoft ActiveX Data Objects 2.0 Library
     Set Source = CreateObject("ADODB.Connection")
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Chemin & _
            ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";" '
     
     Set ADOCommand = CreateObject("ADODB.Command")
     With ADOCommand
       .ActiveConnection = Source
       .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
     End With
     
     Set Rst = CreateObject("ADODB.Recordset")
     Rst.Open ADOCommand, , 1, 3
       '1 = adOpenKeyset, 3 = adLockOptimistic
     
    'Copie le contenu des cellules dans le classeur ouvert (actuel)
     Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
     Range("M18").CopyFromRecordset Rst
       'Pour une plage de cellule connue, utilisez : Range("A4:C10").CopyFromRecordset Rst
     
     Rst.Close
     Source.Close
     Set Source = Nothing
     Set Rst = Nothing
     Set ADOCommand = Nothing
     
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    par ici : http://silkyroad.developpez.com/VBA/...sFermes/#LIV-A

    avant dernier code de cette partie du tutoriel

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Par défaut
    J'ai déjà essayer d'utiliser ce code qui ressemble au mieux mais il me renvoi un message d'erreur...
    Et je ne vois pas comment faire

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Quel message d'erreur ? Sur quelle ligne ?

    si tu changes les paramètres ADODB ? Les parties en gras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Source.Open "Provider = Microsoft.ACE.OLEDB.12.0;data source=" & LeFichier & ";extended properties=""Excel 12.0;HDR=YES"""

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Par défaut
    J'ai noté comme erreur "erreur de compilation"
    "Type défini par l'utilisateur non défini"

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Tel qu'indiqué au début du tutoriel, les codes travaillent en liaison précoce et nécessitent d'activer la référence Microsoft ActiveX Data Objects x.x Library


    Si tu veux éviter de cocher cette référence, ceci DOIT fonctionner :

    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
    Sub extractionValeurCelluleClasseurFerme()
        Dim Source As Object
        Dim Rst As Object
        Dim ADOCommand As Object
        Dim Fichier As String, Cellule As String, Feuille As String
     
        Cellule = "C3:C3"
        Feuille = "TOTO$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        Fichier = "MonChemin"
     
        Set Source = CreateObject("ADODB.Connection")
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"
     
     
         Set ADOCommand = CreateObject("ADODB.Command")
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
     
        Set Rst = CreateObject("ADODB.recordset")
            Rst.Open ADOCommand, , 1, 3
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("A2").CopyFromRecordset Rst
            Rst.Close
     
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Sub

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Par défaut
    Parfait cela fonctionne !

    Merci beaucoup.

    Le but est de récupérer plusieurs cellules d'un classeur sur un onglet donné et de le recopier sur un autre classeur à un autre endroit, le seul lien entre ces deux classeurs est que les deux classeurs ont des onglets nommé de la même façon.
    Donc maintenant je pensais faire varier ma variable source et destination avec une boucle non ?

    Citation Envoyé par joe.levrai Voir le message
    Tel qu'indiqué au début du tutoriel, les codes travaillent en liaison précoce et nécessitent d'activer la référence Microsoft ActiveX Data Objects x.x Library


    Si tu veux éviter de cocher cette référence, ceci DOIT fonctionner :

    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
    Sub extractionValeurCelluleClasseurFerme()
        Dim Source As Object
        Dim Rst As Object
        Dim ADOCommand As Object
        Dim Fichier As String, Cellule As String, Feuille As String
     
        Cellule = "C3:C3"
        Feuille = "TOTO$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        Fichier = "MonChemin"
     
        Set Source = CreateObject("ADODB.Connection")
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"
     
     
         Set ADOCommand = CreateObject("ADODB.Command")
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
     
        Set Rst = CreateObject("ADODB.recordset")
            Rst.Open ADOCommand, , 1, 3
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("A2").CopyFromRecordset Rst
            Rst.Close
     
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Sub

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par lgair Voir le message
    je voudrais pouvoir choisir qu'une seule cellule.
    En fait tu aurais pu déjà trouver la solution en le faisant manuellement
    car cela fait partie des fonctions de base d'une feuille de calculs !
    Une formule avec liaison, reproduisible aussi en VBA si vraiment nécessaire …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut


    lire le début de la section vers lequel le lien que j'ai fourni pointe

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

Discussions similaires

  1. [XL-2003] Copier cellules d'un classeur fermé
    Par Pierrade2011 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/02/2011, 15h44
  2. [XL-2003] Copier cellules d'un classeur fermé
    Par Pierrade2011 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/01/2011, 18h46
  3. [XL-2007] récupérer une valeur d'une cellule d'un classeur fermé
    Par baricot dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 27/10/2009, 18h36
  4. Réponses: 5
    Dernier message: 15/01/2009, 09h45
  5. Réponses: 2
    Dernier message: 01/12/2008, 11h00

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