je n'arrive pas à faire un tout bête copier / coller entre 2 logiciels (Flexpro et Excel 2007) utilisant VB6 (VB 6.3 pour les 2).
L'erreur "Run-time error 1004" apparaît => " la méthode PasteSpecial de la classe Range a échoué ".
Ma macro est dans Flexpro, je la lance depuis VB de Flexpro.
Je crée un objet Excel et ouvre le fichier dans lequel je veux faire mon coller :
Création d'un objet Excel
Set oAppExcel = CreateObject("Excel.Application")
' Ouverture du fichier Excel à renseigner
sFichier = InputBox("Sélectionner le fichier Excel à renseigner", File, "H:\macro\toto.xlsx")
oAppExcel.Workbooks.Open (sFichier)
Après avoir sélectionné la donnée que je souhaite copier, j'ai essayé sans succès un collage spécial...
ActiveDatabase.TaskWindows(fpTaskWindowObjectList).Activate
' selection de la donnée
ActiveDatabase.Selection.SelectObject "Data"
ActiveDatabase.Selection.Copy
' optionnel
oAppExcel.Visible = True
oAppExcel.ActiveWorkbook.Worksheets("Feuil1").Range("B5").PasteSpecial (xlPasteValues)
c'est comme s'il n'y avait rien à coller.
Avez-vous une piste pour m'aider ?
Merci d'avance.
tu vas dans une cellule du classeur visible et presses les touches CTRL+V ?
Ta réponse précise à ce sujet nous permettra de savoir le plus simplement et le plus clairement du monde si tu as bien quelque-chose de reconnaissable par Excel dans le presse-papier.
Et on verra alors comment procéder différemment, si nécessaire.
Ta réponse après essai ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
J'espère par ailleurs :
1) que le classeur actif est bien celui attendu et qu'il possède bien une feuille nommée "DFeuil1" et qu'elle n'est pas protégée.
2) que tu n'envoies plus de 911 caractères en cellule B5
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
- apres avoir mis Excel visible, je fais ctr+V, cela ne colle rien, donc cela veut dire que j'ai rien dans le copier.
- quand je fais enregistrer une macro dans Flexpro, je fais ctrl+C de ma valeur, je vais dans Excel, je fais ctrl+V, cela colle bien ma valeur.
le code associé est le suivant
je vais essayé d'etre plus clair dans mes explication:
j'ai enregistré une macro (par le bouton record), en étant sous mon logiciel Flexpro, j'ai fait copier sur Flexpro puis coller dans Excel et ça a marché.
j'ai ensuite fait une manip identique sur Excel, j'ai enregistré une macro, sélectionne une cellule, fait copier puis coller dans une autre cellule.
J'ai ensuite récupéré le code de la sélection/copie dans VBA Flexpro, récupéré le code de coller dans VBA Excel, et j'ai mis tout ça dans Flexpro. C'est lorsque j'arrive à ma ligne de code coller que ça plante.
est donc incriminé !
Je ne connais pas ton Flexpro, mais :
- soit cette syntaxe n'est pas la bonne
- soit elle ne met rien dans le presse-papiers de Windows (et n'alimente qu'un "tampon" Flexpro !
- soit dépassement de 911 caractères
Et tu ne m'as pas répondu en ce qui concerne le nombre de caractères !
C'est important car si dépassement de 911 caractères ===>>> erreur si collage par code alors que pas d'erreur si collage manuel !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Dis-nous ce qui se passe si tu mets ceci dans la partie "générale" (tout en haut de ton module de code) :
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Long, ByVal ByteLen As Long)
Dim hStrPtr As Long, lLength As Long, sBuffer As String
OpenClipboard 0
hStrPtr = GetClipboardData(1)
If hStrPtr <> 0 Then
lLength = lstrlen(hStrPtr)
If lLength > 0 Then
sBuffer = Space$(lLength)
CopyMemory ByVal sBuffer, ByVal hStrPtr, lLength
oAppExcel.ActiveWorkbook.Worksheets("Feuil1").Range("B5").Value = sBuffer
End If
End If
CloseClipboard
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Je crois que ton problème est en effet à ce niveau-là, dans ce cas.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ