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 execution 1004 sur methode paste [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut erreur execution 1004 sur methode paste
    je suis sous excel v2002 (10.6850)
    j'ai l'erreur suivante "erreur excecution 1004 la methode paste de la classe worksheet a échoué"

    l'execution s'arrete sur la ligne activesheet.paste en fin de procedure
    voici la procedure en question
    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
     
     
    Private Sub recopieprono() 'recopie les pronos selctionner de la feuille liste dans la feuiile synthese
    Dim choixprono As String
    Dim II As Long 'index fauille liste
    Dim ii1 As Long, colnbchxprono As Long, colnbchxpronodebut As Long, colnbchxpronofin As Long
    Dim i2 As Long
    colnbchxprono = 0
    colnbchxpronodebut = 0
    colnbchxpronofin = 0
    'selection du nb de chx à prendre et de la position de depart dans la selection des chx dans le pronostique
    II = 5 'index de 1er position pour lire les pronods choisis dans la feuil liste
    'lire les pronos selectionner dans la feuille liste
    Do While Sheets("liste").Range("C" & II).Value <> ""
             choixprono = Sheets("liste").Range("C" & II).Value
             colnbchxpronodebut = TextBox25.Value + 6 '1+6position du premier cheval a partir de laquelle les chx seront retenus
             colnbchxprono = TextBox24.Value 'nb de chx a lire dans le porosnostique
             colnbchxpronofin = colnbchxpronodebut + colnbchxprono - 1 ''
             If colnbchxpronofin > 22 Then colnbchxpronofin = 22
     
             ii1 = 2 ' debut ligne 2 ,lit les feuille pronoxxx en focntion des choix des noms des pronos
             Do While Sheets(choixprono).Range("G" & ii1).Value <> "" 'tantque la premeire colo de la feuille pronoxxxn'est pas vide
                     If Sheets(choixprono).Range("a" & ii1).Value = indexcourse Then
                        'Sheets(choixprono).Range("g" & i1 & ":V" & i1).Copy 'copie le prono dans la plage G à v en fonction de la ligne I1
                     With Sheets(choixprono) 'selctionne les chevaux dans la feuille du prono choisi.
                         .Range(.Cells(ii1, colnbchxpronodebut), .Cells(ii1, colnbchxpronofin)).Copy 'copy les chevaux des pronos choisis
                     End With
                     End If
          ii1 = ii1 + 1
    Loop
    '(recpie les chx des prono choisi dans la feuille synthese
      i2 = 6 'index 1er ligne de la feuille synthese
       Sheets("synthese").Select
         Do While Sheets("synthese").Range("b" & i2).Value <> ""
         i2 = i2 + 1
         Loop
         Sheets("synthese").Range("b" & i2).Select
         ActiveSheet.Paste '**** le curseur s'arrete la*****
         Sheets("synthese").Activate
     
     II = II + 1
    Loop

    je comprends plus rien

    pour info dans la feuille liste j'ai bien le nom des prono(onglet feuille) qui s'ecrit bien

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Normale, les données a coller ne sont pas de type sheet mais range, il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("synthese").Range("b" & i2).Paste
    Pour le reste du code évites les select, a moins que tu veuilles afficher une feuille particuliere au vue de l'utilisateur.
    Ici par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       Sheets("synthese").Select
         Do While Sheets("synthese").Range("b" & i2).Value <> ""
         i2 = i2 + 1
         Loop
         Sheets("synthese").Range("b" & i2).Select
         ActiveSheet.Paste '**** le curseur s'arrete la*****
         Sheets("synthese").Activate
    La 1er ligne ne sert a rien puisque tu precise dans toutes les lignes qui suivent l'onglet sur lequel tu travailles(ce qu'il faut faire)
    A++
    Qwaz

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Si je peu me permetre mon petit grain de sel...
    Qwazerty :
    La 1er ligne ne sert a rien puisque tu precise dans toutes les lignes qui suivent l'onglet sur lequel tu travailles(ce qu'il faut faire)
    Ce n'est pas tout à fait vrai, si ce n'est pas la feuille "synthese" qui est active, ce qui est le cas dans la configuration de la macros, la 1ère ligne est obligatoire.
    Il n'est pas possible de sélectionner directement une cellule dans une feuille qui n'est pas active (mais ont peu la modifier), pour tester..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Génère une erreur
    Sub ChangeFaux()
        Sheets("feuil1").Range("b2").Select
        Sheets("feuil2").Range("b2").Select
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Obligé de paser par un premier select.
    Sub ChangeBon()
        Sheets("feuil1").Range("b2").Select
        Sheets("feuil2").Select
        Range("b2").Select
    End Sub
    oscar.cesar : concernant ton erreur sur Paste, contrôle que tu passe bien par la ligne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(ii1, colnbchxpronodebut), .Cells(ii1, colnbchxpronofin)).Copy
    Si le presse-papier est vide va probablement créer une erreur.
    par contre, ces lignes ne sont pas nécessaire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    colnbchxprono = 0
    colnbchxpronodebut = 0
    colnbchxpronofin = 0
    Ne savent pas êtres autrement que 0 puisque tu les dimentionne sur la ligne supérieure.

    A+

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Ok c'est noté Leforestier, mais dans le morceau de code donnée, le select sur le range ne sert a rien non plus
    ++
    Qwaz

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut
    bonjour à tous
    merci de votre aide



    oscar.cesar : concernant ton erreur sur Paste, contrôle que tu passe bien par la ligne...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(ii1, colnbchxpronodebut), .Cells(ii1, colnbchxpronofin)).Copy
    on passe bien.
    Si le presse-papier est vide va probablement créer une erreur.

    par contre, ces lignes ne sont pas nécessaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    colnbchxprono = 0
    colnbchxpronodebut = 0
    colnbchxpronofin = 0
    Ne savent pas êtres autrement que 0 puisque tu les dimentionne sur la ligne supérieure.
    Et oui il est vide je regarde ca

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     
     
     
    .Range(.Cells(ii1, colnbchxpronodebut), .Cells(ii1, colnbchxpronofin)).Copy
     
    on passe bien.
    Si le presse-papier est vide va probablement créer une erreur.
    le presse papier est effectivement vide donc erreur ??????

    mais je m'explique toujours pas pourquoi?



    Par contre peut on optimise ce code en supprimant le passage par la feuille liste
    cette feuille me permet de stocker uniquement ce que je selectionne dans combobox1
    via 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
     
    Private Sub ComboBox1_click() 'choix des nom des pronostique
     
    Dim ichoixprono As Long
     
    'Copie la liste des prono selectionner par le combox et les copie dans la feuille liste
      Sheets("liste").Range("c" & lig).Value = UserForm1.ComboBox1.List(ComboBox1.ListIndex)
      lig = lig + 1
      'affiche le contenu des prono selectionner dans le textbox
      If UserForm1.TextBox1.Text <> "" Then UserForm1.TextBox1.Text = UserForm1.TextBox1.Text & Chr(13)
      UserForm1.TextBox1.Text = UserForm1.TextBox1 & ComboBox1.Text
     
    UserForm1.ComboBox1.Value = "" 'initialisation permet de ^rendre la premiere ligne du combobox
    End Sub

    un coup de main serait le bien bienvenu

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut
    bonjour
    je viens de controler que le presse papier n'est vide (contrairement à ce que je disais dans le post precedent et il contient effectivement les donnees à copier
    mais je programme s'arrete sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Sheets("synthese").Range("b" & i2).Paste
    avec un nouveau code erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Erreur 438  propriete ou methode non gerée.

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Essai voir ce 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
    Sub essai()
    Do While Sheets("liste").Range("C" & II).Value <> ""
             choixprono = Sheets("liste").Range("C" & II).Value
             colnbchxpronodebut = TextBox25.Value + 6 '1+6position du premier cheval a partir de laquelle les chx seront retenus
             colnbchxprono = TextBox24.Value 'nb de chx a lire dans le porosnostique
             colnbchxpronofin = colnbchxpronodebut + colnbchxprono - 1 ''
             If colnbchxpronofin > 22 Then colnbchxpronofin = 22
     
             ii1 = 2 ' debut ligne 2 ,lit les feuille pronoxxx en focntion des choix des noms des pronos
             Do While Sheets(choixprono).Range("G" & ii1).Value <> "" 'tantque la premeire colo de la feuille pronoxxxn'est pas vide
                If Sheets(choixprono).Range("a" & ii1).Value = indexcourse Then
                'Sheets(choixprono).Range("g" & i1 & ":V" & i1).Copy 'copie le prono dans la plage G à v en fonction de la ligne I1
                    With Sheets(choixprono) 'selctionne les chevaux dans la feuille du prono choisi.
                        'copy les chevaux des pronos choisis
                        .Range(.Cells(ii1, colnbchxpronodebut), .Cells(ii1, colnbchxpronofin)).Copy Sheets("synthese").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
                    End With
                    'Une fois la cellule trouver on sort de cette boucle
                    Exit Do
                End If
                ii1 = ii1 + 1
            Loop
            '(recpie les chx des prono choisi dans la feuille synthese
            'i2 = 6 'index 1er ligne de la feuille synthese
            'Sheets("synthese").Select
            'Do While Sheets("synthese").Range("b" & i2).Value <> ""
           '    i2 = i2 + 1
            'Loop
         'Sheets("synthese").Range("b" & i2).Select
         'ActiveSheet.Paste '**** le curseur s'arrete la*****
         'Sheets("synthese").Activate
     
        II = II + 1
    Loop
     
    End Sub
    a++
    Qwaz

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut
    bonjour à tous , Qwazerty

    le code ci-dessus supprime effectivement le erreur 438.
    mais dans la feuille synthese elle reste vide et du fait de l'emploi de OFFSET (que je n'aime pas).


    Ce que je ne comprends pas c'eest pourquoi je ne peux coller le cntenu du presse papier alors que celui ci n'est pas vide car quand je mets un point d'arret à l'execution du programme et que je colle le contenu de mon presse papier je retrouve bien mes elements (qui sont des chiffres entiers).

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    As tu bien des valeurs correctes dans les variable colonnedebut et colonnefin? par ce que chez moi ca effectue bien la copie des données, quand a l'utilisation de offset, il te plait pas c'est un fait, mais l'utilisation d'une boucle pour trouver la derniere case non vide, c'est plutot pas jolie et plutot gourmand en ressource pour rien, aprés c'est ton code, tu fais comme tu veux
    passes un fichier exemple avec des données bidons par ce que moi de mon coté j'impose aux variables des valeurs avec le debugueur, afin de tester ton code, donc peut etre que ton probleme vient de la, tu dis avoir le bon contenue dans le presse papier, donc peut etre que le probleme vient des cellules de destination.
    A++
    Qwaz

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut
    bonsoir Qwazerty

    apres l'arret du prog sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets("synthese").Range("b" & i2).Paste
    j'ai effectue le coller du presse papier qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     3   7   2   6   14  11  16  8   15
    cela correspond aux donnees à recuperer.
    de plus le

    As tu bien des valeurs correctes dans les variable colonnedebut et colonnefin?
    curseur ce position bien dans la feuille choisi sur la premier ligne donc j'en deduis que cela est ok idem avec un pas à pas.


    mais effectivement je pense que cela bloque sur la feuille synthese au moment de la copie






    j'ai trouve ,


    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
     
    Loop
    '(recpie les chx des prono choisi dans la feuille synthese
      i2 = 6 'index 1er ligne de la feuille synthese
       Sheets("synthese").Select
         Do While Sheets("synthese").Range("b" & i2).Value <> ""
         i2 = i2 + 1
         Loop
         Sheets("synthese").Range("b" & i2).Select
         ActiveSheet.Paste
         Sheets("synthese").Activate
     
     II = II + 1
     
     
    Loop

    merci à toi

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

Discussions similaires

  1. [XL-2007] VBA - IF ISNA - Erreur Execution 1004
    Par guilld dans le forum Excel
    Réponses: 3
    Dernier message: 06/05/2014, 17h23
  2. Erreur 1004 : la methode Paste de la classe Worksheet a échoué
    Par jambonland dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/08/2013, 10h29
  3. [XL-2007] Erreur 1004 : la methode Paste de la classe Worksheet a échoué
    Par bricko dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/06/2013, 01h53
  4. [XL-2007] erreur objet - 1004 sur un petit bout de code
    Par kl1ft dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/08/2011, 14h41
  5. [VBA-E] erreur d'execution '1004' sur masquage feuille
    Par Cupoftea dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 18h34

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