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 coller en valeur d'un fichier excel à un autre [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut Copier coller en valeur d'un fichier excel à un autre
    Bonjour,

    Récemment j'ai repris un petit passe temps que j'avais abandonné qui est celui de faire de la vba sur excel. Seulement ça fait un petit moment que je n'y ai pas touché et je bloque sur un code tout simple. en gros j'ai un fichier "données.xslx" dans lequel il y'a des données et dans un même dossier j'ai un fichier "logiciel.xlsm" qui prend en charge les macros. Il faudrait que quand j'appuie sur la macro dans mon fichier "logiciel.xlsm" ça copie en valeur (les données étant issus de formules) toutes les données (A1:N117) de la feuille "recap 3 dernieres saisons" de mon fichier "données.xlsx" vers la feuille "domicile" du fichier "logiciel.xlsm" en A1.

    Voila je sais que c'est un simple copier coller mais entre 2 fichier la je bloque je me rappelle plus du tout comment faire.

    Cordialement

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 42
    Points : 30
    Points
    30
    Par défaut
    Je pense que ceci devrait t'aider ...


    http://www.developpez.net/forums/d15...ees-d-fichier/

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut ou dois je mettre le chemin de destination?
    Merci donc en suivant le tuto j'ai trouvé ce code qui semble correspondre à ce dont j'ai besoin mais si j'ai compris effectivement comment aller chercher l'info je en sais pas ou indiquer ou il faut la coller. De plus quand j'essaye de lui indiquez un chemin d’accès il me répond "erreur de compilation" type défini par l'utilisateur non défini. Pourriez vous m'aidez?

    Cordialement

    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
    Private Sub Montpellier_dom_cmd_Click()
     
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "A1:N117"
     
        Feuille = "Recap 3 derniere saisons$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = "C:\Users\PC_DU_GREEN\Desktop\Stat pari\stat montpellier.xlsx"
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("A1").CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
     
    frmexterieur.Show
    frmdomicile.Hide
    End Sub

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut Je n'y comprends rien
    J'ai lu le tuto en long en large et en travers mais je trouve pas ce que je cherche je veux juste faire un copier coller d'une plage d'une feuille d'un fichier fermer à une feuille d'un autre fichier.

    Le tuto ne m'indique pas ce que je dois faire pour ça il lit, il compare il ordonne mai je veux juste faire un simple copier coller

    Si une bonne ame pouvais m'aider avec un petit code ce serai vraiment très gentils

    cordialement

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    il me répond "erreur de compilation" type défini par l'utilisateur non défini.
    Cocher la référence "Microsoft ActiveX Data Objects x.x Library" Outils-->Références... où x.x est la ou une des versions disponibles.
    Sinon, en relation tardive. Adapter le chemin et nom du classeur cible, le nom de la feuille dans le classeur cible et la plage à récupérer dans la proc Test, ne pas modifier les autres :
    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 Classeur As String
        Dim Feuille As String
        Dim Plage As String
     
        Classeur = "C:\Dossier1\Dossier2\Classeur.xls"
        Feuille = "Feuil1"
        Plage = "A1:F19"
     
        Recup Classeur, Feuille, Plage
     
    End Sub
     
    'Sub de connexion séparée
    Private Sub ConnexCLasseur(ConCL As Object, _
                               Fichier As String, _
                               Optional Rs)
     
        'création de l'objet en relation tardive (évite de cocher la référence)
        Set ConCL = CreateObject("ADODB.Connection")
     
        'si demandé, crée l'objet pour le jeu d'erregistrements
        If Not IsMissing(Rs) Then Set Rs = CreateObject("ADODB.Recordset")
     
        'ouvre la connexion
        ConCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & Fichier & ";" & _
                   "Extended Properties=""Excel 8.0;HDR= NO;IMEX= 2;"""
     
    End Sub
     
    Sub Recup(ByVal Fichier As String, _
              ByVal Feuille As String, _
              ByVal Plage As String)
     
        Dim ConnecCL As Object
        Dim Rs As Object
     
        'lance la connexion
        ConnexCLasseur ConnecCL, Fichier, Rs
     
        'effectue la récup
        With Rs
     
            .CursorType = 1
            .LockType = 3
            .Open "SELECT * FROM `" & Feuille & "$" & Plage & "` ", ConnecCL
     
            If Not Rs.EOF Then
     
                ActiveWorkbook.Worksheets("Feuil1").Range("A1").CopyFromRecordset Rs
     
            Else
     
                'si la source était vide...
                MsgBox "Aucun enregistrement renvoyé.", vbCritical
     
            End If
     
        End With
     
        ConnecCL.Close
     
        Set Rs = Nothing
        Set ConnecCL = Nothing
     
    End Sub
    Hervé.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup ça m'est d'une grande aide

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Bonjour, je ne comprends pas pour quoi ca ne marche pas. Le probleme se situe au niveau des 3 lignes surlignés en rouge dans le code. Dans mon excel je n'ai pas cet option. J'ai une case qui se nomme "Microsoft jet and replication obbjects 2.6 library" mais c'est tout. DE plus dois je cocher "Microsoft active x data objects 2.0"? Que dois je faire s'il vous plait?


    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
    Private Sub Montpellier_dom_cmd_Click()
     
        Dim Classeur As String
        Dim Feuille As String
        Dim Plage As String
     
        Classeur = "C:\Users\PC_DU_GREEN\Desktop\Stat pari\Stat montpellier.xlsx"
        Feuille = "Recap 3 derniere saisons"
        Plage = "A1:N117"
     
        Recup Classeur, Feuille, Plage
     
    End Sub
     
    'Sub de connexion séparée
    Private Sub ConnexCLasseur(ConCL As Object, _
                               Fichier As String, _
                               Optional Rs)
     
        'création de l'objet en relation tardive (évite de cocher la référence)
        Set ConCL = CreateObject("ADODB.Connection")
     
        'si demandé, crée l'objet pour le jeu d'erregistrements
        If Not IsMissing(Rs) Then Set Rs = CreateObject("ADODB.Recordset")
     
        'ouvre la connexion
        ConCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & Fichier & ";" & _
                   "Extended Properties=""Excel 8.0;HDR= NO;IMEX= 2;"""
     
    End Sub
     
    Sub Recup(ByVal Fichier As String, _
              ByVal Feuille As String, _
              ByVal Plage As String)
     
        Dim ConnecCL As Object
        Dim Rs As Object
     
        'lance la connexion
        ConnexCLasseur ConnecCL, Fichier, Rs
     
        'effectue la récup
        With Rs
     
            .CursorType = 1
            .LockType = 3
            .Open "SELECT * FROM `" & Feuille & "$" & Plage & "` ", ConnecCL
     
            If Not Rs.EOF Then
     
                ActiveWorkbook.Worksheets("domicile").Range("A1").CopyFromRecordset Rs
     
            Else
     
                'si la source était vide...
                MsgBox "Aucun enregistrement renvoyé.", vbCritical
     
            End If
            End With
    frmexterieur.Show
    frmdomicile.Hide
    End Sub

  8. #8
    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 272
    Points
    11 272
    Par défaut
    Salut, à lire et assimiler : Early ou Late Binding, autrement dit développer en Early Binding et déployer en Late Binding surtout en environnement hétérogène. En Late Binding pas de référence à cocher.

    Si 2007 ou + : voir Se connecter aux classeurs Excel2007 xlsx et xlsm

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Je vous remercie très sincèrement pour votre aide mais je suis novice. Je sais comment travailler sur un classeur mais si j'avais su qu'un copier coller tout simple entre deux classeur serai si compliqué je m'y serai pris autrement. Alors j'entends bien vouloir apprendre en même temps mais ce que je demande dépasse mes compétence, je peux lire autant de tuto que vous voudrez je n'ai pas les prérequis pour comprendre quoi que ce soit donc voila moi j'ai juste besoin d'un coup de main pour faire mon copier coller. Je veux bien essayer de faire par moi même mais il faudrait m'expliquer les étapes du tuto et je ne pense pas que ça soit possible ainsi.

    Cordialement

    Du coup en fait ce que je ne comprends pas c'est le problème que j'ai avec le code surligné en rouge précédemment. Quand je ne le change pas il me dit "la table externe n'est pas dans le format attendu" et si je change le 8 en 10 puisque j'utilise excel 2010 par exemple il me dit " le pilote ISAM n'existe pas"

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 952
    Points : 28 960
    Points
    28 960
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ton meilleur ami est l'enregistreur de macros.
    Si comme tu dis c'est un simple copier/coller - Valeur, tu enclenches l'enregistreur de macro, tu ouvres les deux classeurs en question et tu réalises une copie sur l'un et ensuite, tu fais un collage spécial-Valeur sur l'autres.
    Tu arrêtes l'enregistreur et tu regardes le code qu'il t'a fourni et ensuite tu essayes de faire les modifications pour le rendre paramétrable et si tu ne t'en sors pas, tu reviens poser tes questions.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Ok bon ben en fait ce que je voulais éviter arriva mais étant donné mes connaissances actuelles c'est apparemment ma seule option donc voici un code qui me permet de faire ce que je veux. Je trouve ça vraiment pas jolie mais ce qui est beau avec le vba c'est que si on sait pas faire compliqué est beau avec un peu de bidouillage on arrive à faire simple mais moche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Montpellier_dom_cmd_Click()
     
     Workbooks.Open ("C:\Users\PC_DU_GREEN\Desktop\Stat pari\Stat montpellier.xlsx")
      Windows("Stat montpellier.xlsx").Activate
        Range("A1:N117").Select
        Selection.Copy
        Windows("paris sportif.xlsm").Activate
        Sheets("domicile").Select
        ActiveSheet.Paste
    Workbooks("Stat montpellier.xlsx").Close False
    frmexterieur.Show
    frmdomicile.Hide
    Merci pour votre temps et votre aide

    Cordialement

  12. #12
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Sinon, essayer avec "ExecuteExcel4Macro" :
    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
     
    Sub Test()
     
        Dim Classeur As String
        Dim I As Integer
        Dim J As Integer
     
        'attention, le nom du classeur doit êtr entre crochets suivi du nom de la feuille
        Classeur = "C:\Users\PC_DU_GREEN\Desktop\Stat pari\[Stat montpellier.xlsx]Recap 3 derniere saisons"
     
        For I = 1 To 117
     
            For J = 1 To 14
     
                Cells(I, J).Value = ExecuteExcel4Macro("'" & Classeur & "'!R" & I & "C" & J)
     
            Next J
     
        Next I
     
    End Sub
    Hervé.

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Merci mais ce petit post m'a fait comprendre qu'il fallait que je me concentre sur des choses que je comprenais et que je savais faire. J'aime beaucoup le vba sur excel et toutes les possibilités qu'il en découle mais je vais apprendre petit à petit et si je peux m'en sortir en ajoutant des étapes c'est pas plus mal finalement.
    Donc si on est pas un ingénieur en vba et qu'on ne sait pas comment copier coller d'un classeur à l'autre voila ma solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub copier coller ()
    Workbooks.Open ("C:\Users\fichier.xlsx")
      Windows("fichier.xlsx").Activate
      Sheets("feuille1").Select
        Range("A1:N117").Select
        Selection.Copy
        Windows("fichier.xlsm").Activate
        Sheets("feuille1").Select
        Range("A1").Select[
    Workbooks("fichier.xlsx").Close False
    end sub ()
    C'est pas beau mais ça fonctionne

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/05/2015, 16h25
  2. Code VBA pour copier-coller des colonnes d'un fichier Excel à un autre
    Par User Name dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2014, 23h30
  3. copier /coller une colonne dans un fichier excel
    Par fboss dans le forum VB.NET
    Réponses: 0
    Dernier message: 13/11/2009, 12h33
  4. Réponses: 1
    Dernier message: 29/12/2008, 10h12
  5. coller une cellule d'un fichier excel à un autre
    Par ickyknox dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/03/2007, 17h58

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