koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 août 2008
-
20 juil. 2008 à 16:35
koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 août 2008
-
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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 21 juil. 2008 à 08:54
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.
koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 août 2008 22 juil. 2008 à 09:46
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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 22 juil. 2008 à 11:57
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")