Problème de 'paste' en VBA excell [Résolu]

koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 20 juil. 2008 à 16:35 - Dernière réponse : koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention
- 22 juil. 2008 à 14:18
Bonjour,



Voilà le problème, chaque fois qu'il arrive à pastespecial, j'ai un message d'erreur.



erreur d'execution '1004'

La méthode PasteSpécial de la classe Range a échoué.

Je ne trouve pas la solution.

merci de votre aide.


b'def des variables

Dim k As String
Dim nma As String
Dim typ As String
Dim pat As String


Application.CutCopyMode = False 'Rend le presse-papier disponible et vide


Range("j2:o11").Copy 'selection des données à copier
   
'recherche du classeur machines le 14/07/08 par Pascal


nma = Range("b8").Value
    
    typ = Range("d10").Value 'type de machine sur la feuille de saisie
    pat = "C:\Documents and Settings\Pascal\Bureau\fiche de travail"
    'trouve le bon classeur    If typ "ERE" Or typ "BT" Then
        Workbooks.Open (pat & "ere.xls")
        Workbooks("ERE.xls").Activate
    'se placer sur la feuille machine
        Worksheets(nma).Activate
    'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
    'se placer sur 1ère cellule vide
        Sheets(nma).Cells(k, 1).Select
    'coller les cellules copiées  C'est ici que ça déconne pour chaque type de machine
            Selection.PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlformat, operation:=xlNone, skipblanks:=False, Transpose:=False
    'sauvegarde
        Workbooks("ERE.xls").Save
    'fermeture du classeur
        Workbooks("ERE.xls").Close    ElseIf typ "KMS" Or typ "EKS" Then
        Workbooks.Open (pat & "KMSEKS.xls")
        Workbooks("KMSEKS.xls").Activate
    'se placer sur la feuille machine
        Worksheets(nma).Activate
    'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
    'se placer sur 1ère cellule vide
        Worksheets(nma).Cells(k, 1).Select
    'coller les cellules copiées
            Selection.PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlformat, operation:=xlNone, skipblanks:=False, Transpose:=False
    'sauvegarde
        Workbooks("KMSEKS.xls").Save
    'fermeture du classeur
        Workbooks("KMSEKS.xls").Close    ElseIf typ "ECE" Or typ "ECP" Then
        Workbooks.Open (pat & "ECPECE.xls")
        Workbooks("ECPECE.xls").Activate
    'se placer sur la feuille machine
        Worksheets(nma).Activate
    'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
    'se placer sur 1ère cellule vide
        Worksheets(nma).Cells(k, 1).Select
    'coller les cellules copiées
            Selection.PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlformat, operation:=xlNone, skipblanks:=False, Transpose:=False
    'sauvegarde
        Workbooks("ECPECE.xls").Save
    'fermeture du classeur
        Workbooks("ECPECE.xls").Close
    ElseIf typ = "EFG" Then
        Workbooks.Open (pat & "EFG.xls")
        Workbooks("EFG.xls").Activate
    'se placer sur la feuille machine
        Worksheets(nma).Activate
    'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
    'se placer sur 1ère cellule vide
        Worksheets(nma).Cells(k, 1).Select
    'coller les cellules copiées
            Selection.PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlformat, operation:=xlNone, skipblanks:=False, Transpose:=False
     'sauvegarde
        Workbooks("EFG.xls").Save
    'fermeture du classeur
        Workbooks("EFG.xls").Close
    ElseIf typ = "ETV" Then
        Workbooks.Open (pat & "ETV.xls")
        Workbooks("ETV.xls").Activate
    'se placer sur la feuille machine
        Worksheets(nma).Activate
    'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
    'se placer sur 1ère cellule vide
        Worksheets(nma).Cells(k, 1).Select
    'coller les cellules copiées
            Selection.PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlformat, operation:=xlNone, skipblanks:=False, Transpose:=False
    'sauvegarde
        Workbooks("ETV.xls").Save
    'fermeture du classeur
        Workbooks("ETV.xls").Close   ElseIf typ "ETX" Or typ "EKX" Then
        Workbooks.Open (pat & "ETXEKX.xls")
        Workbooks("ETXEKX.xls").Activate
    'se placer sur la feuille machine
        Worksheets(nma).Activate
    'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
    'se placer sur 1ère cellule vide
        Worksheets(nma).Cells(k, 1).Select
    'coller les cellules copiées
            Selection.PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlformat, operation:=xlNone, skipblanks:=False, Transpose:=False
    'sauvegarde
        Workbooks("ETXEKX.xls").Save
    'fermeture du classeur
        Workbooks("ETXEKX.xls").Close
               
    End If


End Sub
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 22 juil. 2008 à 14:00
3
Merci
Peut-être parce que c'est xlPasteValues avec un "s" ?

Molenn

Merci Molenn 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Molenn
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 21 juil. 2008 à 08:54
0
Merci
Le pb vient en fait que tu copies entre deux classeurs, et là, l'enregistreur de macro est mal foutu parce qu'il ne représente pas tout ce que tu fais.
Il faut systématique préciser à Excel ce que tu fais.
Je ne vais pas récrire ton code, mais je vais te donner le principe.

Personnellement, j'enregistre dans deux variables pour récupérer le nom des 2 classeurs dans lesquels je travaille (sous entendu que le code se trouve dans le fichier Source et que tu veux copier dans le fichier que tu vas ouvrir) :
NomSource = activeWorkbook.name
NomCible = "ERE.xls" 'Nom du fichier que tu as choisis d'ouvrir

Ensuite, pour faire ta copie, il suffit d'écrire :
Workbooks(NomSource).worksheets("Feuil1").range("A1:A10").copy
Workbooks(NomCible).worksheets("Feuil1").range("A1:A10").PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False

Ah oui, au passage, tu peux réécrire ton code pour te débarrasser de toutes les phases de Select ... C'est l'enregistreur de macro qui te colle ça, mais ça ne sert à rien dans ton cas.

Molenn
Commenter la réponse de Molenn
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 21 juil. 2008 à 17:13
0
Merci
slt,

je teste et fait savoir.
Commenter la réponse de koolman61
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 21 juil. 2008 à 19:11
0
Merci
sauf que j'ai pas utilisé l'enregistreur
Commenter la réponse de koolman61
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 22 juil. 2008 à 09:46
0
Merci
bonjour,

J'ai allégé le code, mais toujours la même erreur.

'def des variables
Dim k As String
Dim nma As String
Dim typ As String
Dim pat As String


Application.CutCopyMode = False 'Rend le presse-papier disponible et vide
   
'recherche du classeur machines le 14/07/08 par Pascal
   nma = Range("b8").Value
    
'recherche du classeur machines le 14/07/08
    typ = Range("d10") & ".xls" 'type de machine sur la feuille de saisie
    pat = "C:\Documents and Settings\ple1210\Desktop\feuille travail"
'trouve le bon classeur
        Workbooks.Open (pat & typ)
'trouver dernière ligne vide
        k = Sheets(nma).UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
'copier/coller les cellules  et le problème  erreur d'exécution 9 ... l'indice n'appartient pas à la sélection
            Workbooks(pat & "feuille de travail(v2).xls").Worksheets("Feuille de travail").Range("j2:o11").Copy
            Workbooks(pat & typ).Worksheets(nma).Range(k, 1).PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
'sauvegarde
        Workbooks(typ).Save
'fermeture du classeur
        Workbooks(typ).Close


End Sub
Commenter la réponse de koolman61
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 22 juil. 2008 à 09:49
0
Merci
l'erreur est entre le rouge et l'orange
Commenter la réponse de koolman61
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 22 juil. 2008 à 11:57
0
Merci
Une fois qu'un classeur (Workbooks) est ouvert, il ne faut plus le désigner par son chemin et son nom, mais seulement pas son nom, c'est à dire que ton 
Workbooks(pat & "feuille de travail(v2).xls")
doit être remplacé par
 Workbooks("feuille de travail(v2).xls")

et donc
Workbooks(pat & typ) par Workbooks(typ)

Molenn
Commenter la réponse de Molenn
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 22 juil. 2008 à 13:19
0
Merci
et toujours l'erreur '1004'  erreur définie par l'application ou par l'objet

ici

        Workbooks(typ).Worksheets(nma).Range(k, 1).PasteSpecial Paste:=xlpastevalue, operation:=xlNone, skipblanks:=False, Transpose:=False
Commenter la réponse de koolman61
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 22 juil. 2008 à 13:37
0
Merci
Dans Workbooks(typ).Worksheets(nma).Range(k, 1).PasteSpecial ,

Range(k,1) ,'a aucune signification. Il faut mettre au choix :
Cells (k,1) ou Range("A" & k)

Molenn
Commenter la réponse de Molenn
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 22 juil. 2008 à 13:42
0
Merci
au niveau xlpastevalue en passant dessus il me met vide
Commenter la réponse de koolman61
koolman61 25 Messages postés vendredi 11 mars 2005Date d'inscription 17 août 2008 Dernière intervention - 22 juil. 2008 à 14:18
0
Merci
Bingo,

merci à toi

problème résolu
Commenter la réponse de koolman61

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.