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 :

Macro pour copier une feuille vers un autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut Macro pour copier une feuille vers un autre fichier
    Bonjour à tous !

    Je vais essayer de vous expliquer de la manière la plus succincte possible. Voilà initialement j'avais fais une petite macro sur excel qui me permettait de faire un copier collage spécial de l'intégralité des cellules d'une feuille source qui me servait de base de données vers une autre feuille destiné à mes collaborateurs.

    J'utilisais le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       Sheets("Feuil1").Select
        Columns("A:EY").Select
        Selection.Copy
        Windows("BASEcourrier.xls").Activate
        Sheets("Feuil1").Select
        Columns("A:A").Select
        Range("A2192").Activate
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=True, Transpose:=True
    End Sub
    TOUT SÉLECTIONNER

    Cette macro fonctionnait très bien jusqu'à aujourd'hui Visual basic n'arrive plus a a effectuer le copier coller car la taille est différente... Erreur d'execution '1004' Pfff...

    Enfin bref je souhaiterais savoir comment pourrais-je procéder pour effectuer un copier coller des valeurs d'une feuille d'un fichier excel vers une autre feuille. Ou à défaut comment résoudre le problème de ma première macro.

    Merci d'avance pour votre aide

  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
    C'est la méthode transpose, qui nécessite cette correspondance
    Nota :je me suis arrêté à la seule cause de l'erreur que tu dénonces. Ce qui ne veut pas du tout dire que j'applaudis - loin s'en faut - cette manière de travailler à coup de select, activate, selection, etc ...
    Et ce d'autant que tu t'y es pris de telle manière que VBA ne sait plus "qui est qui"...
    Travaille directement sur les objets Excel et tu auras moins de problèmes divers et variés.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    Merci pour ta réponse, mais je suis trop novice en la matière pour comprendre comment utiliser les objets dont tu parles

  4. #4
    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
    C'est pourtant le B.A.BA et est à la portée du débutant de chez débutant.
    la cellule B2 de la feuille "feuilx" du classeur "classeurx" est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    workbooks("classeurx").worksheets'"feuilx").Range("B2")
    nul besoin d'activer, sélectionner, etc ... pour se référer ensuite à l'objet Selection ainsi défini.
    Commence s'il te plait par ces premiers pas indispensables.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    C'est douloureux d'être pris de si haut... Moi qui pensais être sur un forum d'entraide... Je n'ai jamais pris de cours de vba je suis donc un vrai débutant de chez débutant comme tu dis.

    Dans un premier temps j'ai essayé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Workbooks("base.xls").Worksheets("Feuil1").Range("A:EY").Copy
    Workbooks("basecourrier.xls").Worksheets("Feuil1").Range("A:EY").Paste
     
    End Sub
    qui ne fonctionne pas chez moi "Erreur d'execution "9"

  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
    ce qui signifie que l'un des classeurs invoqués n'est pas ouvert avec ce nom par ton application sous ce nom ou qu'une des feuilles invoquées n'y est pas présente.

    Je n'ai jamais pris de cours de vba
    Moi non plus

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    J'avais effectivement mal retranscris le nom de mon fichier dans la première ligne workbooks. après avoir bien réécrit le nom du fichier j'ai désormais encore la même erreur que l'autre fois "Erreur d’exécution '1004' Vous ne pouvez pas coller cet élément ici, car les zones copier et de collage sont de taille différente.

    Aie aie aie

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Par défaut
    Salut,

    Désolé pour les puristes mais je vais au plus simple pour moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub code()
        Workbooks("base.xls").Worksheets("Feuil1").Range("A:EY").Copy
        Workbooks("basecourrier.xls").Activate
        Sheets("Feuil1").Range("A1").Select
        ActiveSheet.Paste
    End Sub
    A+

  9. #9
    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
    Les "puristes" (que ne faut-il pas lire !) te répondent ceci, OBO29 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Workbooks("base.xls").Worksheets("Feuil1").Range("A:EY").Copy destination:= Workbooks("basecourrier.xls").worksheets("Feuil1").Range("A1")
    (ce quer l'on peur d'"ailleurs lire à la rubrique Range.Copy, Méthode de l'aide VBA

    (en rappelant ce que j'ai dit plus haut, si l'argument Transpose est True)

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Par défaut
    Super,

    C'est bien + propre effectivement; et en plus ça marche

    J'e suis sûr que ton aide profitera pleinement à ExcelLiod.

    (Sorry, j'ai bidouillé ça vite fait)....

    A+

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Le plus simple c'est de créer une macro complémentaire qui serait diffusée aux victimes et qui interrogerait le fichier avec ado.

    Pour Excel comme base de données, je suis écoeuré de prêcher dans le désert pour expliquer que c'est une ânerie.

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    Merci beaucoup pour vos réponses OBO29 et unparia . Grace à vous j'arrive à comprendre un peu mieux ce qu'il faut faire pour simplifier mon écriture de base qui était une usine à gaz !

    Cependant, même en rentrant bien le code de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Transpose()
    Workbooks("BASE.xlsx").Worksheets("Feuil1").Range("A:EY").Copy Destination:=Workbooks("BASEcourrier.xls").Worksheets("Feuil1").Range("A1")
    End Sub
    J'ai toujours une erreur d’exécution "1004" . La je suis vraiment perdu le nom des fichiers est pourtant bien rentré.

    clementmarcotte: Je suis bien conscient de "l'ânerie" de faire une base de données sur Excel le truc c'est que je suis encore plus néophyte sur Access qu'Excel... J'aimerais bien pouvoir basculer ma base de données avec toutes les formules que j'ai mise dessus sur Access mais ça me paraît bien compliqué...

  13. #13
    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
    Difficile de te répondre ainsi.
    Plusieurs hypothèses possibles :
    1) ton classeur .xls est d'une version antérieure à 2007 alors que ton classeur .xlsm est d'une version au moins égale à 2007
    2) le nombre de formats du classeur source est trop important (> 64000)
    etc ...

    Pourquoi, à ce propos, ta source est-elle en .xlsm et ta destination en .xls ?

    EDIT : j'observe par ailleurs le mot "transpose" qui m'inquiète.
    J'espère que tu ne cherches pas à faire une transposition (cellules horizontales ===>> verticales) sur la plage de la totalité des cellules de ta feuille. C'est impossible, mêlme avec la dernière version de Excel, puisque le nombre de lignes (qui deviendrait celui des colonnes) dépasse très largement celui des colonnes disponibles (16 384).
    Et la plage A:EY, de plus de 1 000 000 de lignes sur x colonnes, nécessite, sous version supérieure à 2003, au moins autant de colonnes pour être transposée !
    Et même avec une version antérieure, ce serait également impossible car le nombre max de colonnes possibles dépasserait également très largement celui des lignes de la plage A:EY !

  14. #14
    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
    Citation Envoyé par clementmarcotte Voir le message
    Le plus simple c'est de créer une macro complémentaire qui serait diffusée aux victimes et qui interrogerait le fichier avec ado.
    Pour Excel comme base de données, je suis écoeuré de prêcher dans le désert pour expliquer que c'est une ânerie.
    Salut Clément,
    tu m'as tué avec « diffusée aux victimes » !

    Mais je suis exactement du même avis !
    J'en ai connu quelques uns malgré le conseil de ne pas utiliser Excel pour des besoins de vraie base de données
    être obligés de basculer sous Access ou autre SGBD après une ou deux années à maintenir tant bien que mal leur projet sous Excel …

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

  15. #15
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Salut Clément,
    tu m'as tué avec « diffusée aux victimes » !

    Mais je suis exactement du même avis !
    J'en ai connu quelques uns malgré le conseil de ne pas utiliser Excel pour des besoins de vraie base de données
    être obligés de basculer sous Access ou autre SGBD après une ou deux années à maintenir tant bien que mal leur projet sous Excel …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est facile de critiquer un néophyte... Dire que nous sommes sur un forum "d'entraide" j'aimerais bien basculer sur Access le truc c'est que j'ai qu'une notion "très scolaire" d'access. Je serais incapable de basculer ma base sur Access.

    Donc si vous voulez bien m'aider au lieu de me critiquer ça serait bien sympatique

  16. #16
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    Citation Envoyé par unparia Voir le message
    Difficile de te répondre ainsi.
    Plusieurs hypothèses possibles :
    1) ton classeur .xls est d'une version antérieure à 2007 alors que ton classeur .xlsm est d'une version au moins égale à 2007
    2) le nombre de formats du classeur source est trop important (> 64000)
    etc ...

    Pourquoi, à ce propos, ta source est-elle en .xlsm et ta destination en .xls ?

    EDIT : j'observe par ailleurs le mot "transpose" qui m'inquiète.
    J'espère que tu ne cherches pas à faire une transposition (cellules horizontales ===>> verticales) sur la plage de la totalité des cellules de ta feuille. C'est impossible, mêlme avec la dernière version de Excel, puisque le nombre de lignes (qui deviendrait celui des colonnes) dépasse très largement celui des colonnes disponibles (16 384).
    Et la plage A:EY, de plus de 1 000 000 de lignes sur x colonnes, nécessite, sous version supérieure à 2003, au moins autant de colonnes pour être transposée !
    Et même avec une version antérieure, ce serait également impossible car le nombre max de colonnes possibles dépasserait également très largement celui des lignes de la plage A:EY !
    Merci pour ta réponse unparia il s'agissait bien d'une erreur dans la retranscription du nom du fichier. j'ai un autre problème maintenant la macro bug à cause du trop grand nombre de fichier à exporter. Juste une question puis-je remplacer l'objet .range par un .rows pour qu'il sélectionne que les lignes jusqu'à la dernière retranscrite.

  17. #17
    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
    Citation Envoyé par ExcelLiod Voir le message
    C'est facile de critiquer un néophyte...
    Aucune critique envers toi, du reste tu n'es même pas cité ‼
    Juste signalant à Clément qu'il m'a bien fait rire avec son expression « aux victimes »
    et confirmant des retours d'expérience, il y en a même aussi sur ce forum ! …

    Vu la présentation initiale, tu as l'air aussi néophyte en VBA Excel, quitte à progresser, autant te focaliser sur Access …
    Surtout si ton projet doit être utilisé en réseau partagé par plusieurs personnes en même temps !
    Au moins tu auras été prévenu …

    _________________________________________________________________________________________________________
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. (Albert Einstein)

  18. #18
    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
    j'ai un autre problème maintenant la macro bug à cause du trop grand nombre de fichier à exporter. Juste une question puis-je remplacer l'objet .range par un .rows pour qu'il sélectionne que les lignes jusqu'à la dernière retranscrite
    Je ne comprends pas.
    Ce n'est que maintenant que tu parles de plusieurs fichiers. Tu les traites en boucle ? Et si oui : comment (le code de cette boucle) ?
    Il ne devrait y avoir aucun problème si l'on exporte les fichiers un par un.
    Qu'entends-tu exactement par "retranscrire" ? Si tu veux par là dire "transposer", il te faut dans la feuille de destination au moins autant de colonnes que tu as de lignes à transposer (relis-moi). Et si le nombre de lignes à transposer est supérieur à 16 384 (avec 2007), tu n'y parviendras jamais.
    Quoi qu'il en soit :
    Si tu sais quelle colonne de ta feuille est, à la fois, forcément remplie pour chaque ligne à retenir et contenant uniquement des constantes (pas de formules), ce code (où X est le nom de la colonne), te retourne le rang de la dernière cellule remplie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derligne = Range("X" & Rows.Count).End(xlUp).Row

  19. #19
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    [INDENT]

    Vu la présentation initiale, tu as l'air aussi néophyte en VBA Excel, quitte à progresser, autant te focaliser sur Access …
    Surtout si ton projet doit être utilisé en réseau partagé par plusieurs personnes en même temps !
    Au moins tu auras été prévenu …
    Merci du conseil ! Le truc c'est que ça fait plusieurs années que je bosse ma base de donnée sur Excel, j'y ai inclus des formules conditionnelles de partout. Jusqu'à présent, cela m'a aidé considérablement pour mon activité. Je t'explique brièvement mon soucis, en fait j'ai appris à codé sous Excel 4.0 qu'avec des formules conditionnelles. Cependant l'évolution d'Excel depuis quelques années m'oblige aujourd'hui à m'adapter et à passer sous VBA(et oui le progrès...). J'ai du mal à imaginer cette base de donnée sur Access... Peut-on faire des formules conditionnelles à l’identique d'Excel sur Access? Je suppose que non et qu'il faut par le biais de requêtes et VBA...

    Bref tout à apprendre je crois que je vais envisager de faire une formation Access... Dans un premier temps, je vais poster un topic sur la partie Access de ce forum pour essayer de m'initier en autodidacte. Merci du conseil cela-dit !

  20. #20
    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

    Pour en revenir à l'erreur 1004, erreur quelque peu fourre-tout, je ne vais pas lister les causes éventuelles
    car l'origine est bien souvent visible !

    Comme ici il ne s'agit donc que d'un très basique Copier / Coller accessible même à un néophyte,
    il suffit déjà de commencer par l'effectuer manuellement !

    Si cela déclenche un message d'erreur, il se pourrait bien qu'il soit plus explicite que celui déclenché en VBA !
    Sinon, c'est donc une erreur de code, il suffit de réitérer la manipulation en ayant activé au préalable
    l'Enregistreur de macros livrant la solution sur un plateau ! En gros, comment s'en sortir seul …

Discussions similaires

  1. macro pour copier une feuille d'un classeur à un autre
    Par rihab92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2015, 22h05
  2. Copier une feuille vers un autre classeur dont le nom change
    Par Jimmatdycol dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 09/09/2013, 10h34
  3. [XL-2002] Macro pour copier une feuille dans un autre classeur
    Par JBeaunez dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2012, 22h46
  4. [XL-2007] Macro pour copier une feuille
    Par francky62000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2011, 17h36
  5. [VBA-E] pb pour copier une plage vers un autre repertoire
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/05/2007, 16h23

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