VBA Copier / Coller entre deux classeurs
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

VBA Copier / Coller entre deux classeurs



  1. #1
    Batou021

    VBA Copier / Coller entre deux classeurs


    ------

    Bonjour à tous et à toutes,
    Je voudrai faire un Copy/Paste d'une plage de cellule précise entre deux classeurs dans un même répertoire.
    La plage de copy est donnée par mes 2 premières variables DerNC et PremNC
    La plage de paste est donnée par mes 2 dernières variables DerREX et PremREX


    J'aimerai utiliser un chemin d'accès pour permettre à ce code d'être réutilisé pour d'autres classeurs.

    J'ai plusieurs dossiers de type DocEM01, DocEM02... qui sont les dossiers d'émissions et un dossier REC de réception. J'ai réalisé un programme mais j'ai un message d'erreur 9 au niveau de ligne :
    ( Windows(chemin_EM + nom_EM).Activate)

    Je suis sur que c'est un erreur dans l'utilisation des chemins mais je ne vois pas ou. J'ai essayé de modifier la syntaxe de la ligne mais rien n'y fait.

    Merci de m'éclairer sur cette sombre affaire.

    Mon programme :
    Code:
    Public Sub EM()
    Dim DerE As Long, PremE As Long
    Dim DerR As Long, PremR As Long
    
    DerNC = 508
    PremNC = 8
    
    DerREX = 503
    PremREX = 3
    
    
    chemin_EM = "D: DocEM\MASTER\rw\"
    chemin_REC = "D: DocREC\"
    nom_EM = "NC_2017.xls"
    nom_REC = "REC.xlsm"
    
    
        Windows(chemin_EM + nom_EM).Activate    '''Erreur'''
        Sheets("Saisie").Range("APremE:ADerE").Select
        Selection.Copy
        
         Windows(chemin_REC + nom_REC).Activate
         Sheets("FREX").Range("APremR:ADerR").Select
        Selection.PasteSpecial Paste:=xlPasteValues
        
         Windows(chemin_EM + nom_EM).Activate
        Sheets("Saisie").Range("CPremE:CDerE").Select
        Selection.Copy
        
         Windows(chemin_REC + nom_REC).Activate
         Sheets("FREX").Range("DPremR: DDerR").Select
        Selection.PasteSpecial Paste:=xlPasteValues
        
        
        End Sub

    -----
    Dernière modification par JPL ; 17/11/2016 à 21h59. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    Dlzlogic

    VBA Copier coller de deux plages de données entre deux classeurs

    Bonjour,
    Dans un très grand nombre de langages le back-slach est un caractère de contrôle. Lorsqu'il doit être utilisé, par exemple dans chemin, il doit être doublé. cad
    chemin_EM = "D: DocEM\MASTER\\rw\\"
    chemin_REC = "D: DocREC\\"
    Essayez déjà cela.

  3. #3
    Bluedeep

    Re : VBA Copier coller de deux plages de données entre deux classeurs

    Citation Envoyé par Dlzlogic Voir le message
    Bonjour,
    Dans un très grand nombre de langages le back-slach est un caractère de contrôle. Lorsqu'il doit être utilisé, par exemple dans chemin, il doit être doublé. cad
    N'importe quoi; c'est vrai principalement pour les "C-like". (C, C++, C# - avec de plus un contournement pour ce cas -, Java .....)

    Merci d'éviter ce genre de remarque à portée générale surtout quand elle est aussi fausse qu'ici.

  4. #4
    Batou021

    Re : VBA Copier / Coller entre deux classeurs

    Bonjour,

    Dlzlogic : J'ai essayé avec ta nouvelle syntaxe mais cela perdure encore. J'ai toujours l'erreur 9 et la même ligne en surbrillance.

    Je ne comprend pas pourquoi cela ne marche pas, il suffit juste d'appeler le classeur mais rien ne fait.
    Je pense que mon erreur doit être dans la syntaxe.

  5. A voir en vidéo sur Futura
  6. #5
    cherbe

    Re : VBA Copier / Coller entre deux classeurs

    Bonjour
    dans les 2 variables suivantes, il manque un backslash que j'ai ajouté en rouge.
    Code:
    chemin_EM = "D:\DocEM\MASTER\rw\"
    chemin_REC = "D:\DocREC\"
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

  7. #6
    cherbe

    Re : VBA Copier / Coller entre deux classeurs

    Citation Envoyé par cherbe Voir le message
    Bonjour
    dans les 2 variables suivantes, il manque un backslash que j'ai ajouté en rouge.
    Code:
    chemin_EM = "D:\DocEM\MASTER\rw\"
    chemin_REC = "D:\DocREC\"
    Il est possible que l'erreur persiste si le programme n'est pas lancé depuis le disque D:\
    Dans ce cas, il faut mettre un ChDrive("D") avant la ligne qui génère l'erreur
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

  8. #7
    Bluedeep

    Re : VBA Copier / Coller entre deux classeurs

    Bonjour,

    Citation Envoyé par Batou021 Voir le message
    Dlzlogic : J'ai essayé avec ta nouvelle syntaxe mais cela perdure encore. J'ai toujours l'erreur 9 et la même ligne en surbrillance..
    Si tu avais lu ma réponse, tu n'aurais pas perdu de temps à essayer ça car ça n'a aucun sens.

  9. #8
    Bluedeep

    Re : VBA Copier / Coller entre deux classeurs

    Citation Envoyé par cherbe Voir le message
    Il est possible que l'erreur persiste si le programme n'est pas lancé depuis le disque D:\
    Dans ce cas, il faut mettre un ChDrive("D") avant la ligne qui génère l'erreur
    A noter que le PI avait posté un doublon où les path étaient corrects (c.a.d D:\xxx)

  10. #9
    cherbe

    Re : VBA Copier / Coller entre deux classeurs

    Citation Envoyé par Bluedeep Voir le message
    A noter que le PI avait posté un doublon où les path étaient corrects (c.a.d D:\xxx)
    Dans ce cas, voir mon second message avec chdrive
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

  11. #10
    Batou021

    Re : VBA Copier / Coller entre deux classeurs

    Bonjour,
    à Bluedeep :
    J'ai bien lu ta réponse avant d'essayer la méthode de Dlzlogic qui lui a essayé de m'aider.
    Je n'ai pas les compétences nécessaires pour juger de la pertinence des réponses que l'ont m'apporte et je préfère "perdre mon temps" avec une personne qui essai de m'aider plutôt que de perdre mon temps avec une personne qui ne fait rien pour avancer mise à part critiquer les propositions.

    Merci à toi cherbe pour tes réponses constructives. Je ne pourrai pas encore tester ta nouvelle syntaxe aujourd'hui je n'ai pas les fichiers nécessaires, je reviens vers vous dès que j'aurai testé vos propositions.
    Dernière modification par Batou021 ; 21/11/2016 à 11h28.

  12. #11
    Stan_94

    Re : VBA Copier / Coller entre deux classeurs

    Bonjour,
    pour information, j'ai essayer le même code avec le même résultat.
    Pour moi, c'est donc une erreur dans l'utilisation de "Windows", qui demande à ce que le classeur à activer soit ouvert.

    S'il ne l'ai pas auparavant, il faudrait donc faire :
    Code:
        Workbooks.Open Filename:=chemin_EM + nom_EM
        Windows(nom_EM).Activate

    Et L'objet Windows n'a pas à avoir le chemin complet du fichier mais juste le nom du classeur.

    A tester !

  13. #12
    cherbe

    Re : VBA Copier / Coller entre deux classeurs

    Citation Envoyé par Stan_94 Voir le message
    pour information, j'ai essayer le même code avec le même résultat.
    Pour moi, c'est donc une erreur dans l'utilisation de "Windows", qui demande à ce que le classeur à activer soit ouvert.
    Bien vu !
    Soit le document est ouvert et il suffit de l'activer en utilisant seulement son nom ;
    soit il est fermé et il faut une instruction Open. Dans ce cas, il devient actif (au 1er plan) et il est inutile de l'activer pour travailler dessus.
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

Discussions similaires

  1. Comment coller deux nappes à contacts graphites entre elles ?
    Par Sans Nom dans le forum Électronique
    Réponses: 2
    Dernier message: 08/01/2013, 18h01
  2. faire une liaison entre deux cellules de différents classeurs
    Par invitee1deb610 dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 03/11/2011, 16h38
  3. Copier/Coller
    Par azt dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 06/01/2007, 19h20
  4. copier coller impossible??!
    Par r17777 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 8
    Dernier message: 29/04/2006, 07h23