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'éxecution '1004' La méthode Select de la classe Range à échoué


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 13
    Points
    13
    Par défaut Erreur d'éxecution '1004' La méthode Select de la classe Range à échoué
    Bonjour,
    J'essai de faire tourner un programme pour récupérer les données qui sont dans un deuxième livre (workbook2) de excel et les placer dans une aautre livre( workbook1). J'obtient toujours l'erreur suivante: Erreur d'éxecution '1004' La méthode Select de la classe Range à échoué ???. Voici le code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Sub importar()
     
    Workbooks.Open Filename:="C:\Users\MarqueFe\Desktop\PGT.xlsx"
    Dim Origem As Worksheet
    Dim Destino As Worksheet
     Dim rngOrigen As Excel.Range
      Dim rngDestino As Excel.Range
    Set Origem = Workbooks("PGT.xlsx").Worksheets("Feuil2")
    Set Destino = Workbooks("10680.xls").Worksheets("Feuil1")
    'Definir objetos a utilizar
     
     
    'Indicar el libro de Excel destino
    'Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\LibroDestino.xlsx")
    'Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\PGT 9E10680.xls")
    'Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\PGT.xlsx")
     
    'Activar este libro
    ThisWorkbook.Activate
     
    'Indicar las hojas de origen y destino
    'Set wsOrigen = Worksheets("Origen")
    'Set wsDestino = wbDestino.Worksheets("10986")
     
    'Indicar la celda de origen y destino
    Const celdaOrigen = "A1"
    Const celdaDestino = "A23"
     
    'Inicializar los rangos de origen y destino
    Set rngOrigen = Origem.Range(celdaOrigen)
    Set rngDestino = Destino.Range(celdaDestino)
     
    'Seleccionar rango de celdas origen
    rngOrigen.Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
     
    'Pegar datos en celda destino
    rngDestino.PasteSpecial xlPasteValues
    'rngDestino.PasteSpecial xlPasteAll
     
    Application.CutCopyMode = False
     
    'Guardar y cerrar el libro de Excel destino
    wbDestino.Save
    'wbDestino.Close
     
    Workbooks("PGT.xlsx").Close SaveChanges:=False
    MsgBox "Done!"
     
    End Sub
    Le probleme vient de ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Seleccionar rango de celdas origen
    rngOrigen.Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Quelqu'un a une idée de pourquoi j'ai l'erreur 1004.

    Merci

  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
    Pour utiliser un Range sous la forme Range(cellule1,cellule2), il faut que cellule1 et cellule2 soient des cellules uniques et non des plages de plusieurs cellules.
    Or, ton premier select concernant un Range qui désigne une plage, les Selection dans le second range ne peuvent pas être de simples cellules.

  3. #3
    Invité
    Invité(e)
    Par défaut Bonjour,test ça
    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
    20
    21
    22
    23
    Sub importar()
    Dim WbSource As Workbook 'Déclare le claseur source
    Dim WbCible As Workbook 'Déclare le claseur Cible classeur actif
    Dim Origem As Worksheet
    Dim Destino As Worksheet
    'Affecte les Objets Excel
    Set WbCible = ActiveWorkbook
    Set WbSource = Workbooks.Open(Filename:="C:\Users\MarqueFe\Desktop\PGT.xlsx")
    Set Origem = WbSource.Worksheets("Feuil2")
    Set Destino = WbCible.Worksheets("Feuil1")
     
    Origem.Range(Origem.Range("A1"), Origem.Range("A" & Origem.UsedRange.Rows.Count)).Copy
    Destino.Range("A23").PasteSpecial xlPasteValues
    WbCible.Save
    WbSource.Close False
     
    'Libère les Objets
    Set WbSource = Nothing
    Set WbCible = Nothing
    Set Origem = Nothing
    Set Destino = Nothing
    MsgBox "Done!"
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Bonjour rdurupt,
    Je vous remercie énormément pour votre aide. Votre programme m'ai beaucoup aidé. Je voulais juste vous posser une dernier question: Comment je peux faire pour copier tout la Feuil où c'est trouve l'information. Je veux tout la feuille.
    J'ai essayé avec c'est code mais ça marcha pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("PGT.XLSX").Worsheets(1).Copy After:=targetWorkbook.Worksheets(1)
    Comment je peux copier tout l'information de la Feuil qui a tout les données dans ma Feuil de destin (là où c'est trouve le bouton).
    Merci encore en fois.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbSource.sheets(1).Copy After:=WbCible.sheets(1)
    n'oublis pas que WbSource représente ton Classeur "PGT.XLSX" et WbCible "10680.xls".
    ne te gènes pas pour utiliser ces objet il te faciliteront la vie!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Salut rdurupt,
    Je te remercie encore un fois pour ton aide. J'Apprécie beaucoup. Merci.
    En fait j'ai mis en place ta solution et j'ai eu un erreur. Voici l'image:
    Nom : Sans titre.jpg
Affichages : 5596
Taille : 147,0 Ko

    Je profite pour te posser un question: Comment je peux effacer les données dans la Feuil de destination chaque fois que je fais Click sur le bouton pour importer les données. En fait, la Feuille(wbSource) n'est pas toujours de la meme taille. Donc, c'est pour ça que je dois tout copier. Le problème vient quand je veux copier plusieurs fois la Feuille wbSource sachant que la taille des tableau contenus dans ce Feuil n'est pas fixe.
    Je dois effacer tout avant de copier. J'ai cherché sur l'internet et j'ai trouvé la méthode ClearContents mais je sais pas comme l'utiliser. Dans quel partie du code je dois l'ajouté?

    Merci encore un fois.

  7. #7
    Invité
    Invité(e)
    Par défaut
    tu tente d’insérer une feuille XLSX (2007 ou plus) dans un XLS (2003 ou moins)
    effectivement la cible peut accepter moins de lignes et de colonne que la source!

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Effectivement c'était le fait de que j'avais deux fichiers différents, XLSX et XLS. T'as raison. J'ai changé la terminaison et ça bien marché sauf pour effacer les données avant de copier.
    J'ai testé la méthode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Destino.Range("A1:HM45").ClearContents
    Mais ça marche pas, j'ai l'erreur : Erreur d'exécution '1004': La méthode PasteSpecial de la classe Range a échoué.
    Pourquoi j'ai obtient l'erreur 1004?

    Voici le code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Sub importar()
    Dim WbSource As Workbook 'Déclare le claseur source
    Dim WbCible As Workbook 'Déclare le claseur Cible classeur actif
    Dim Origem As Worksheet
    Dim Destino As Worksheet
    'Affecte les Objets Excel
    Set WbCible = ActiveWorkbook
    Set WbSource = Workbooks.Open(Filename:="C:\Users\MarqueFe\Desktop\PGT_1.xls")
    Set Origem = WbSource.Worksheets("Feuil1")
    Set Destino = WbCible.Worksheets("Feuil1")
    datos = Application.CountA(Destino.Range("A1", Destino.Range("A1").End(xlDown)))
    If datos > 0 Then Destino.ClearArrows
     
    Origem.Range(Origem.Range("A1:HM31"), Origem.Range("A" & Origem.UsedRange.Rows.Count)).Copy
    'Destino.Range("A1").PasteSpecial xlPasteValues
     
    Destino.Range("A1:HM45").ClearContents
     
     
    'Destino.PasteSpecial xlPasteValues
    Destino.Range("A1:HM45").PasteSpecial xlPasteAll
     
     
     
    'WbSource.Sheets(1).Copy After:=WbCible.Sheets(1)
     
    WbCible.Save
    'WbSource.Close False
     
    'Libère les Objets
    Set WbSource = Nothing
    Set WbCible = Nothing
    Set Origem = Nothing
    Set Destino = Nothing
    MsgBox "Importation de données Ok!"
    End Sub
    Merci, c'est ma dernier question par rapport à ce sujet.

  9. #9
    Invité
    Invité(e)
    Par défaut
    tu affectes un plage alors que Range(CelDébut,CelFin) à pour objet de déterminer un plage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Origem.Range(Origem.Range("A1:HM31"), Origem.Range("A" & Origem.UsedRange.Rows.Count)).Copy
    si ta plage est Origem.Range("A1:HM31") tu n'as besoin de rien d'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Origem.Range("A1:HM31").copy
    en revanche si tu ne connais pas la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Origem.Range("A1:HM" & Origem.UsedRange.Rows.Count).copy
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Origem.Range(Origem.Range("A1"),Origem.Range("HM" & Origem.UsedRange.Rows.Count)).copy

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Ok, ça j'ai bien compris. Par contre l’instruction suivante pose problèmes. J'arrive pas à effacer les données de la Feuil de destination avant de copier les données actuelles. D'abord Il me faut effacer les données de la feuil de destination avants les coller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Destino.Range("A1:HM45").ClearContents
    Je dois effacer la Feuil et ensuite coller les données chaque fois que je fais Click sur le bouton.
    Les données d’origine sont pas fixe, la taille de tableau change. a cause de ça, je dois tout effacer et ensuite coller.

    Je sais que je pose beaucoup de question mais je suis bloqué avec ce macro depuis un semaine et je dois avancer dans mon projet pour le rendre le plus vite.
    Merci encore un fois et si vous avez le temps, j’espère votre avis par rapport à ma question. Comment effacer les donnes de la feuil de destination et ensuite coller les données qui ont été copié.

    Merci

  11. #11
    Invité
    Invité(e)
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Sub importar()
    Dim WbSource As Workbook 'Déclare le claseur source
    Dim WbCible As Workbook 'Déclare le claseur Cible classeur actif
    Dim Origem As Worksheet
    Dim Destino As Worksheet
    'Affecte les Objets Excel
    Set WbCible = ActiveWorkbook
    Set WbSource = Workbooks.Open(Filename:="C:\Users\MarqueFe\Desktop\PGT_1.xls")
    Set Origem = WbSource.Worksheets("Feuil1")
    Set Destino = WbCible.Worksheets("Feuil1")
    Destino.Range("A1:HM45").ClearContents 'pas besoin de tester.
     
    Origem.Range("A1:HM" & Origem.UsedRange.Rows.Count).Copy
    'Destino.Range("A1").PasteSpecial xlPasteValues
    'Destino.PasteSpecial xlPasteValues
    Destino.cells.ClearContents
    Destino.Range("A1").PasteSpecial xlPasteAll
    'WbSource.Sheets(1).Copy After:=WbCible.Sheets(1)
    WbCible.Save
    'WbSource.Close False
    'Libère les Objets
    Set WbSource = Nothing
    Set WbCible = Nothing
    Set Origem = Nothing
    Set Destino = Nothing
    MsgBox "Importation de données Ok!"
    End Sub

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup, ça marche.
    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/02/2015, 13h06
  2. [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
  3. [XL-2010] Méthode Select de la classe Range échoué
    Par Identifiant_Anonyme dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2014, 10h06
  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