Problème avec xlPasteValues

yeti_yeti

XLDnaute Junior
Bonjour à tous,

J'ai un souci avec la fonction xlPasteValues qui me renvoie systématiquement une erreur 1004...
J'en suis même venu à faire des .Select etc mais rien n'y fait et là je sèche complétement! Pourtant avec la fonction .Paste toute simple il n'y a aucun souci. La macro doit simplement coller ce qui a été copié plus tôt par l'utilisateur (pas forcément des données provenant d'Excel).

Voici le bout de code:

Sub Paste()
Dim scopy As Variant
Set scopy = Sheets(13)
If MsgBox("Mon Message", vbOKCancel) = vbOK Then
scopy.Visible = True
scopy.Range("K2").Select
Selection.PasteSpecial Paste:=xlPasteValues
scopy.Visible = xlVeryHidden
Else
Exit Sub
End If
End Sub​

Ca ne doit pas être bien compliqué mais je n'y vois plus clair du tout!
D'avance merci à celui qui saura m'aider.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour yeti_yeti

Dans ton exemple tu fais juste un coller de la même cellule??? :eek:

Un exemple, si tu dois copier une cellule d'une feuille à une autre.

Feuil1.Range("b3").copy scopy.Range("K2") si pas de mise en forme.

Sinon
VB:
With Activesheet
       .Range("b3").copy
       .Range("K2").PasteSpecial Paste:=xlPasteValues
      Application.CutCopyMode = 0
     Application.goto .Range("a1")
End With
 

yeti_yeti

XLDnaute Junior
Bonjour Lone-wolf,

Je fais effectivement juste un "collé" car l'utilisateur doit copier les données qu'il veut coller depuis une autre source (Excel, Word, Outlook, SAP, etc.).
D'où le fait qu'il n'y a pas de .Copy dans mon code, sinon ça effacerait ce qu'il a copié précédemment.

Salutations
 

yeti_yeti

XLDnaute Junior
Je commence à y voir plus clair. En fait si les données ne proviennent pas d'Excel, on ne peut pas faire un xlPasteValues... Du coup il me faudrait un code qui fait ceci:

1) .PasteSpecial xlPasteValues - on teste si les données proviennent d'Excel, si c'est le cas on colle les valeurs et on va à l'étape 3
2) .Paste - Si l'étape 1 renvoie une erreur, c'est que les données ne viennent pas d'Excel, on colle donc simplement les valeurs et on va à l'étape 3
3) Le code continue

J'ai essayé en faisant ceci:

On Error GoTo Error
If MsgBox("Mon Message", vbOKCancel) = vbOK Then
scopy.Range("K2").PasteSpecial Paste:=xlPasteValues
***RESTE DU CODE***
Error:
scopy.Range("K2").Paste
Resume

Mais ça ne marche toujours pas...
 

Dranreb

XLDnaute Barbatruc
Bonjour.
De toute façon il y a une différence, même dans Excel entre Copier des cellules, ce qui le met en condition de pouvoir les coller (voir Application.CutCopyMode pour tester cette condition) et copier un texte dans le presse papier, qui ne fait pas intervenir Excel du tout. Pour récupérer ce qu'il y a dans le presse papier vous pouvez utiliser un DataObject de la bibliothèque MSForms.
J'ai ces procédures Property qui permettent de considérer le nom PressePapier comme une variable représentant le contenu texte du presse papier aussi bien en entrée qu'en sortie :
VB:
Property Get PressePapier() As String
On Error Resume Next
With New MSForms.DataObject: .GetFromClipboard: PressePapier = .GetText: End With
If Err Then MsgBox "Pas de données récupérées", vbCritical, "PressePapier"
End Property
Property Let PressePapier(ByVal Z As String)
With New MSForms.DataObject: .SetText Z: .PutInClipboard: End With
End Property
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof