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 Erreur définie par l'application ou par l'objet - copier-coller une plage dans la 1ère ligne vide [XL-MAC 2011]


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
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Erreur 1004 Erreur définie par l'application ou par l'objet - copier-coller une plage dans la 1ère ligne vide
    Bonjour,

    Je souhaite copier une plage de données d'un classeur dans la première ligne d'un autre classeur, mais une erreur 1004 est retournée. Voici le code avec la ligne fautive soulignée:
    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
    Sub Test()
            
            Dim data As Workbook
            Dim dc As Workbook
            Dim der As Integer
            
            Set data = ActiveWorkbook
            Set dc = Workbooks.Open("Macintosh HD:Users:Chemin:Nom du fichier.xlsx")
            der = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
            
            dc.Sheets(3).Range("F5:J6").Copy Destination:=data.Sheets(1).Range("F5:J6")
            dc.Sheets(3).Range("A8:K8").Copy Destination:=data.Sheets(1).Range(Cells(der, 1), Cells(der, 11))
            
            dc.Close
            
    End Sub
    Ce qui est étonnant, c'est que la copie de la première plage ("F5:J6") ne pose pas de problème et que ce code fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test2()
     
            Dim der As Integer
     
            der = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
     
            Range(Cells(der, 1), Cells(der, 11)).Select
     
    End Sub
    Pourriez-vous m'aider?

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    ici, tu ouvrés un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set dc = Workbooks.Open("Macintosh HD:Users:Chemin:Nom du fichier.xlsx")
    (en espérant que le chemin et le nom soient corrects), donc il devient le fichier actif
    sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    der = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
    "der" fait donc référence à la première ligne vide de la feuille active de ce fichier
    je ne suis pas sur que ça soit ce que tu cherches au vu de la ligne soulignée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Merci pour cette réponse casefayere! Ce n'était en effet pas intentionnel.

    Ça aurait peut-être pu être la cause d'une erreur étant donné que der devient alors 2 et que la plage copiée fait référence à des cellules relativement au-dessus de la ligne 1.

    Mais le problème persiste...
    Voici le code mis à jour:
    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
    Sub Test()
            
            Dim data As Workbook
            Dim der As Integer
            Dim dc As Workbook
            
            Set data = ActiveWorkbook
            der = Cells(data.Sheets(1).Columns(1).Cells.Count, 1).End(xlUp).Row + 1
            Set dc = Workbooks.Open("Macintosh HD:Users:Chemin:Nom du fichier.xlsx")
            
            dc.Sheets(3).Range("F5:J6").Copy Destination:=data.Sheets(1).Range("F5:J6")
            dc.Sheets(3).Range("A8:K8").Copy Destination:=data.Sheets(1).Range(Cells(der, 1), Cells(der, 11))
            
            dc.Close
            
    End Sub
    P.S: Le chemin est correct, le fichier s'ouvre bien et la plage "F5:J6" est bien copiée, mais le fichier ne se ferme pas à la fin, car le code renvoie l'erreur avant

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Data.Sheets(1)
      dc.Sheets(3).Range("A8:K8").Copy Destination:=.Range(.Cells(der, 1), .Cells(der, 11))
    End With
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Oui, ça marche! Magnifique!!!

    En gros, VBA ne savait pas de quelles cellules je parlais (objet "Cells" non défini). Il aurait fallut que j'ajoute "data.Sheets(1)" avant chaque "Cells".
    J'ai vraiment l'impression de comprendre un peu mieux le langage VBA. Et merci pour la commande "With/End With" qui permet de ne pas avoir à répéter la définition de l'objet. J'apprends

    Voici le code qui marche:
    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
    Sub Test()
     
            Dim data As Workbook
            Dim der As Integer
            Dim dc As Workbook
     
            Set data = ActiveWorkbook
            der = Cells(data.Sheets(1).Columns(1).Cells.Count, 1).End(xlUp).Row + 1
            Set dc = Workbooks.Open("Macintosh HD:Users:Chemin:Nom de fichier.xlsx")
     
        With data.Sheets(1)
            dc.Sheets(3).Range("F5:J6").Copy Destination:=.Range("F5:J6")
            dc.Sheets(3).Range("A8:K8").Copy Destination:=.Range(.Cells(der, 1), .Cells(der, 11))
        End With
     
            Application.DisplayAlerts = False
        dc.Close
     
    End Sub

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

Discussions similaires

  1. [XL-2003] Erreur d'éxécution 1004 Erreur définie par l'application ou par l'objet
    Par tokis dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2012, 15h18
  2. Erreur d'exécution 1004. Erreur définie par l'application ou par l'object
    Par Quentin15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/06/2011, 21h59
  3. ERREUR 1004-erreur défini par l'application ou par l'objet
    Par zineb87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2010, 17h40
  4. Erreur 1004 définie par l'application ou par l'objet
    Par GreatDeveloperOnizuka dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/12/2007, 10h33

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