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

Signaler
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008
-
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008
-
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

11 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Peut-être parce que c'est xlPasteValues avec un "s" ?

Molenn
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

slt,

je teste et fait savoir.
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

sauf que j'ai pas utilisé l'enregistreur
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

l'erreur est entre le rouge et l'orange
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

au niveau xlpastevalue en passant dessus il me met vide
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

Bingo,

merci à toi

problème résolu