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 :

Utilisation de la méthode Copy


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut Utilisation de la méthode Copy
    Bonjour,

    Je suis en train de réaliser un outil, et je dois copier le contenu d'un onglet dans un nouvel onglet.
    Je me suis donc renseigné sur la méthode "Copy", qui a l'air de fonctionner à la fois avec un Range ou bien avec Worksheets.

    Je dois copier le contenu de l'onglet "Modèle processus", (qui se trouve dans mon classeur sur lequel je code) pour le coller dans un classeur que je viens de créer.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
                Set xlApp = New Excel.Application
                Set WbServ = xlApp.Workbooks.Add
                WbServ.SaveAs ("mon_chemin\" & listeservice(i) & ".xls")
                Set WbServ = xlApp.Workbooks.Open("mon chemin\" & listeservice(i) & ".xls")
     
                ThisWorkbook.Worksheets("Modèle processus").Range("A1:AI31").Copy Destination:=WbServ.Worksheets("Feuil1")
     
                WbServ.Close SaveChanges:=True
                xlApp.Quit
                Set WbServ = Nothing
                Set xlApp = Nothing
    En éxecutant ce code j'ai le droit à "La méthode "Copy" de la classe Range à échoué."
    J'ai essayé un tas de choses :
    -Modifier Worksheets par Sheets
    -Ne pas passer par la méthode Range
    -En faisant un ThisWorkbook.Name : je suis bien dans le bon classeur

    Si quelqu'un pourrait m'aider à résoudre cela

    En vous remerciant,

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .......  Destination:=WbServ.Worksheets("Feuil1")
    où (quelle cellule) dans la feuille de destination ? VBA doit deviner ?

  3. #3
    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,

    pourquoi créer une nouvelle instance Excel pour générer ton classeur ? Reste dans l'instance où est située Thisworkbook !

    la méthode copie de Range impose que le paramètre destination soit également un Range (ici tu t'es arrêté à la feuille), donc il faut ajouter la référence de la première cellule où copier les éléments

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    Merci pour votre réactivité :

    En essayant avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Modèle processus").Range("A1:AI31").Copy Destination:=WbServ.Worksheets("Feuil1").Range("A1")
    Même message d'erreur.

    En essayant avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Modèle processus").Range("A1:AI31").Copy Destination:=WbServ.Worksheets("Feuil1").Range("A1:AI31")
    Même message d'erreur.

    J'ai crée une nouvelle instance d'Excel parce que je dois créer un nouveau document portant le nom de mon listeservice(i) (que je ne vous ai pas détaillé), dans lequel j'aimerais copier le contenu de "Modèle processus" !

  5. #5
    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
    Mon petit doigt pense qu'en travaillant dans la même instance, tu n'auras plus ce problème

    Il n'y a pas d'obligation à passer par une nouvelle instance pour créer un nouveau classeur et l'enregistrer via des variables contenant les portions du nom souhaité

    A la volée, et non exempt d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Workbooks.Add
        .Save ' blablabla je te laisse compléter
        ThisWorkbook.Worksheets("Modèle processus").Range("A1:AI31").Copy .Worksheets("Feuil1").Range("A1")
        .Close True
    End With

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    As-tu le même message d'erreur en remplaçant ThisWorkBook par Worbooks("..(nom_du_classeur...") ?
    Je ne suis par ailleurs pas certain (je n'ai pas vérifié) que la méthode Range.copy puisse s'appliquer entre deux classeurs.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    En remplaçant ThisWorkbook par Workbooks("Outil processus.xlsm")
    J'ai le droit au même message d'erreur oui

    Je test ce que joe_levrai propose et j'éditerais mon message.

    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
        With Workbooks.Add
            For i = 1 To listeservice.Count
                .SaveAs ("monchemin\" & listeservice(i) & ".xls")
                Workbooks("Outil processus.xlsm").Worksheets("Modèle processus").Range("A2:AI31").Copy Destination:=.Worksheets("Feuil1").Range("A1")
                .Close True
            Next
                End With
    Voilà ce dont par quoi j'ai remplacé le code : donc joe_levrai tu avais raison : la méthode Copy ne fonctionne pas dans deux instances d'Excel différentes !
    En revanche maintenant, j'aimerais bien bouclé le tout, c'est à dire faire des copiers collers pour des fichiers successifs. Mais lorsque que je run cela j'ai une "Erreur Automation".
    Comment est-ce que je pourrais éviter cela ?

  8. #8
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    essais ce schéma :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Workbooks("....").Worksheets("....").Range("....").Copy 
    Workbooks("....").Worksheets("....").Range("....").Select
    ActiveSheet.Paste
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

Discussions similaires

  1. [2.0] ADO.NET : DataTable : méthode Copy : régression ?
    Par damz dans le forum Accès aux données
    Réponses: 1
    Dernier message: 11/10/2006, 18h46
  2. Réponses: 20
    Dernier message: 19/09/2006, 20h52
  3. Utilisation de la méthode FIND
    Par Jeannot45 dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2006, 15h41
  4. [Ant] Utilisation de la méthode clone()
    Par Shabata dans le forum ANT
    Réponses: 1
    Dernier message: 01/12/2005, 15h01
  5. [Select()/Focus()] Pb dans l'utilisation de ces méthodes
    Par Kylen dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/06/2005, 14h54

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