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 :

Erreur d'exécution '1004' : la méthode PasteSpecial de la classe range a échoué.


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant HSE
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Consultant HSE

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Erreur d'exécution '1004' : la méthode PasteSpecial de la classe range a échoué.
    Bonjour,

    Voici mon premier post ici qui comme pour beaucoup fait suite à un problème que je rencontre sur Excel.

    Je développe actuellement un outil d'analyse environnemental pour une entreprise. La première feuille de cet outil sert de formulaire. L'utilisateur le complète et en appuyant sur le bouton de validation, cela complète à son tour les cellules qui vont bien sur diverses feuille.

    J'ai rédigé cette macro sur Excel 2010 et elle fonctionnait très bien. Me voici rendu sur mon PC perso avec excel 2013 et là c'est le drame, elle ne marche plus... Lorsque je veux valider le formulaire j'ai le message d'erreur suivant : erreur d'exécution '1004' : la méthode PasteSpecial de la classe range a échoué.

    Pourtant elle fonctionnait parfaitement et quand je réalise les étapes une par une je ne vois pas d'incohérence :s

    voici une copie du passage qui ne marche pas (la dernière ligne apparaît en jaune dans le débogueur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Range("c6").Select
    Selection.Copy
    Sheets("Liste AE").Activate
    DerLigne = Range("a65536").End(xlUp).Row + 1
    Range("a" & DerLigne).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    J'ai cherché des pistes sur le net mais je fais choux blanc. Peut-être que quelqu'un ici saura m'aiguiller. Si c'est le cas, d'avance un grand merci !

    David

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Un petit conseil qui ne va pas résoudre ton problème mais qui peut te faciliter la vie en rendant ton code plus clair et son exécution plus rapide :
    Les Activate et Select sont, le plus souvent (mais pas toujours) inutile.
    Ainsi, ton code pourrait s'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("c6").Copy
    DerLigne = Sheets("Liste AE").Range("a65536").End(xlUp).Row + 1
    Sheets("Liste AE").Range("a" & DerLigne).PasteSpecial Paste:=xlPasteValues
    Ou bien, si tu veux éviter la double référence à la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("c6").Copy
    With Sheets("Liste AE")
       DerLigne = .Range("a65536").End(xlUp).Row + 1
       .Range("a" & DerLigne).PasteSpecial Paste:=xlPasteValues
    End With
    Tu peux aussi éviter le 65536.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLigne = Sheets("Liste AE").Cells(Rows,1).End(xlUp).Row + 1
    Pour ton pastespecial, as-tu essayé la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Liste AE").Range("a" & DerLigne).PasteSpecial(xlPasteValues)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant HSE
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Consultant HSE

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour Menhir, merci de ta réponse.

    Oui mon code est loin d'être simple et élégant du fait que j'ai découvert les macros il y a peu et que j'apprends sur le tas en piochant des infos de ci de là au fil de mes erreurs/problèmes. Effectivement je peux réduire sa taille avec tes astuces et je le garde en tête pour les prochains documents !

    Pour la syntaxe du pastespecial après modification ça ne change rien en effet, toujours au point mort pour mon problème.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Décompose en parties élémentaires pour délimiter le problème.

    Si je reprends le premier bloc de ce code de mon message précédent :
    Mets la troisième ligne en commentaire, lance la macro et essaye de faire un coller valeur à la main pour voir ce qui se passe.
    Regarde le contenu de ta variable DerLigne.

    Si ça marche, tu mets la première ligne en commentaire, tu mets dans le code une valeur fixe à DerLigne, tu fais un copier à la main et tu lance la macro.

    ...etc...
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant HSE
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Consultant HSE

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    C'est étonnant.

    J'ai remplacé, ensemble après ensemble, mon bloc de code par le tien. Jusqu'à ce qu'il n'y ai plus que le tien et chaque étape m'a donné le même message d'erreur.

    Puis j'ai utilisé ton code directement dans une autre macro et il marche nickel.

    Donc j'ai a nouveau remplacer mon code par le tien, mais en une fois et ça marche parfaitement.


    Je comprends parfaitement la construction de ton code. Mais mis à part que le mien est en made in noob, je ne vois pas où je génère cette erreur... Tu as une idée ?

    En tous les cas merci beaucoup de ton aide

    David

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/03/2015, 19h06
  2. Réponses: 1
    Dernier message: 18/11/2014, 16h00
  3. [XL-2007] Erreur d'execution "1004" la méthode autofilter de la classe range a échoué
    Par adamskone dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/09/2014, 00h41
  4. [XL-2007] Erreur d'exécution 1004 La méthode Select de l'Objet Worksheet a échoué !
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 08/11/2013, 15h39
  5. Réponses: 13
    Dernier message: 29/06/2007, 18h03

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