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 1004 sur un code simple [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Secrétaire
    Inscrit en
    Avril 2020
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 57
    Par défaut Erreur 1004 sur un code simple
    Bonjour,

    Quelqu'un pourrait-il me dire pourquoi j'ai une erreur 1004 pour ce code :

    Sheets("Feuil2").Range(Cells(1, 1), Cells(1, 10)).Copy Sheets("Feuil3").Range(Cells(2, 1), Cells(2, 10))

    un simple code pour copier les cellules de la feuil2 vers la feuil3 sans faire de .select lorsque la feuille active est la feuil3
    Sachant que ce code fonctionne
    Range(Cells(1, 1), Cells(1, 10)).Copy Range(Cells(2, 1), Cells(2, 10))

    mais du coup c'est dans la même feuille...

    Par contre ce code fonctionne : Sheets("Feuil2").Rows(1).Copy Sheets("Feuil3").Rows(2)

    mais si on remplace Rows par Range cela ne fonctionne plus...

    Merci pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    Attention les expressions Range ou Cells non rattachées explicitement à un objet sont implicitement rattachées à ActiveSheet. Tu as donc écrit en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, 10)).Copy Sheets("Feuil3").Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(2, 10))
    Comme ActiveSheet ne peut être égal à la fois à Feuil2 ET à Feuil3, ça ne va pas le faire.

    En fait tu voulais probablement écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Range(Sheets("Feuil2").Cells(1, 1), Sheets("Feuil2").Cells(1, 10)).Copy Sheets("Feuil3").Range(Sheets("Feuil2").Cells(2, 1), Sheets("Feuil2").Cells(2, 10))
    En passant Sheets a le même biais et est relative à Activeworkbook ; donc pour éviter tout problème ultérieur, et comme ça commence à être verbeux, je suggère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With ThisWorkBook.Sheets("Feuil2")
          .Range(.Cells(1, 1), .Cells(1, 10)).Copy 
    End With
    With Sheets("Feuil3")
          .Range(.Cells(2, 1), .Cells(2, 10)).PasteSpecial xlPasteAll
    End With

  3. #3
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Oups j'ai oublié de remplacer les 2 par 3 ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Range(Sheets("Feuil2").Cells(1, 1), Sheets("Feuil2").Cells(1, 10)).Copy Sheets("Feuil3").Range(Sheets("Feuil3").Cells(2, 1), Sheets("Feuil3").Cells(2, 10))

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Salut, on peut simplifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Range("A1:A10").Copy Sheet("Feuil3").Range("B1:B10")
    Ou sur plusieurs lignes, histoire que ce soit lisible:
    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
    Dim Source As Excel.Worksheet
    Set Source = Sheets("Feuil2")
     
    Dim Top1 As Excel.Range
    Set Top1 = Source.Cells(1, 1)
     
    Dim Bottom1 As Excel.Range
    Set Bottom1 = Source.Cells(1, 10)
     
    Dim Target As Excel.Worksheet
    Set Target = Sheets("Feuil3")
     
    Dim Top2 As Excel.Range
    Set Top2 = Target.Cells(2, 1)
     
    Dim Bottom2 As Excel.Range
    Set Bottom2 = Target.Cells(2, 10)
     
    Source.Range(Top1, Bottom1).Copy Target(Top2, Bottom2)

  5. #5
    Membre confirmé
    Homme Profil pro
    Secrétaire
    Inscrit en
    Avril 2020
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 57
    Par défaut
    Merci, ton premier code répond parfaitement à mon besoin.
    Ayant une quinzaine de copier/coller c'est mieux sur une seule ligne de code.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Citation Envoyé par Progeric Voir le message
    Ayant une quinzaine de copier/coller c'est mieux sur une seule ligne de code.
    Bof,
    un code source avant d'être fonctionnel doit être lisible.

    Et rien ne t'interdit d'encapsuler un morceau de code dans une fonction.

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

Discussions similaires

  1. erreur 1004 sur un simple Range ("A2").Select
    Par lesjno35 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/08/2021, 16h10
  2. [XL-2010] Erreur 1004 sur ligne de code vba QueryTable.refresh
    Par Darkfiend dans le forum Excel
    Réponses: 0
    Dernier message: 17/01/2012, 12h08
  3. Erreur 1004 sur "fichier - quitter"
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/08/2007, 18h01
  4. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 09h00
  5. [IE]Erreur javascript sur un code de 2 lignes...
    Par narnou dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/05/2006, 17h20

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