[Résolu] [ VB6 ] Copie de données entre deux classeurs Excel

Dovakhiin

Nouveau membre
Bonjour à tous,
après avoir erré parmi un grand nombre de forums, y compris celui-ci, je me résout à créer un sujet et venir vous demander de l'aide.
J4ai crée un sujet similaire sur un autre forum mais je n'arrive pas à appliquer leurs conseils à mon PB. Ce que je souhaite faire est simple à réaliser manuellement mais je n'y parviens pas en codant.
J'ai deux classeurs excel. Une extraction, et un fichier traitant. Les données du premier classeur ( mono feuille ) sont copiée dans la première feuille du second qui les traite ensuite dans ses feuilles suivantes. Je bloque complétement sur la partie copie ente les deux classeurs.

Je vous mets ce que j'ai mis (sachant que j'ai essayer énormément de choses differentes )

Déclaration des variables
Code:
Public appExcel As Object 'Application Excel
Public wbsource As Object 'Classeur Excel
Public wbprevious As Object

ouverture du premier classeur
Code:
cheminpr = ""
'utilisation comondialog afin d'ouvrir le fichier
CommonDialog1.ShowOpen
cheminpr = CommonDialog1.FileName
nompr = CommonDialog1.FileTitle
If cheminpr = "" Then MsgBox "vous n'avez rien sélectionné": Exit Sub
Set appExcel = CreateObject("Excel.Application")
Set wbprevious = appExcel.Workbooks.Open(cheminpr)

Ouverture du second classeur
Code:
cheminsr = ""
CommonDialog1.ShowOpen
cheminsr = CommonDialog1.FileName
nomsr = CommonDialog1.FileTitle
If cheminsr = "" Then MsgBox "vous n'avez rien sélectionné": Exit Sub
Set wbsource = appExcel.Workbooks.Open(cheminsr)

Enfin le code posant Pb :/
Code:
wbsource.Worksheets(nomfeuil).Range("A1:I600").Copy
wbprevious.Worksheets("Top Manager CAP").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Lorsque je l'utilise la seconde ligne du code précédent est surlignée jaune et j'ai le message suivant :"mais la j'ai une erreur 1004 la méthode pastespecial de la classe Range a échouée."

En sachant que lorsque je met le même classeur en source et destination de copie cela fonctionne. Il n'y a que lorsque je copie d'un classeur a l'autre que j'ai des pbs.

Pour info je vous laisse l'adresse de mon autre post.
Apparemment j'ai un pb de gestion d'instance excel. J'ai lu les post de Darkspoilt mais jamais je l'ai réussi a adapter les informations que je trouve à mon cas.

Je vous remercie par avance de toute l'aide et le temps que vous m'offrirez !

Dans tout les cas bonne fin de journée et si pas de réponse d'ici bonne fin du monde et fêtes de fin d'année ^^


http://www.developpez.net/forums/d1285783/autres-langages/general-visual-basic-6-vbscript/vb-6-anterieur/vb6-copie-donnee-entre-classeurs-excel/
 

zeb

Modérateur
Salut,

Ça plante ? C'est bien fait pour toi !
T'as qu'à pas utiliser le presse-papier :na:
(Si tu as effectivement traîné un peu sur ce forum, tu connais déjà mon aversion pour l'usage du presses-papier comme zone de stockage temporaire.) ;)

----------------------

Que donne ce code ?
Code:
Dim wbsource As Workbook, wbprevious As Workbook
..
wbsource.Worksheets("nom de la feuille").Range("A1:I600").Copy Destination:=wbprevious.Worksheets("Top Manager CAP").Range("A1")
 

Dovakhiin

Nouveau membre
Bonjour Zeb,
Je sais qu'en tant que "mutawa" tu n'aimes pas le presse papier, le code hors balise etc ^^
Mais je sais aussi que tu es très doué et dévoué pour aidé les programmeurs en herbe dans la panade.
Évidement ton code fonctionne direct et mon programme est enfin opérationnel !
En utilisant .copy de cette manière est-ce que j'utilise le presse papier ? Sinon comment puis-je faire pour ne pas m'en servir ? (même si dans mon cas c'est plus du luxe car mon programme servira simplement à un collègue durant mes congés)

Dans tous les cas merci infiniment pour ton aide, rapide et précise, comme toutes tes interventions dans le forum que tu fais vivre apparemment beaucoup. Cela force le respect.
Bonne fête de fin d'année à tout ceux qui liront ceci et plus particulièrement à toi ^^
 

zeb

Modérateur
LOL ! Ce n'est pas la première fois qu'on me traite de "muttawa" :lol:

--------------------------

Cher ami, ne crois pas forcément tout ce que je dis.
Certes écoute, mais renseigne-toi par toi-même.

Commence par l'aide d'Excel : tu verras ce qui est écrit sur la fonction copy().
Sans paramètre, et donc par défaut, la copie se fait vers le presses-papier.
Sinon, la copie se fait vers la destination indiquée.

Copie un élément dans le presses-papier.
Exécute la macro.
Colle le contenu du presses-papier. Alors ?
Récupères-tu ce que tu y avais mis ou ce que la macro y aurait mis ?
Voilà, tu as ta preuve sans qu'un gardien-de-la-vertu-en-programmation ne pense pour toi ;)

--------------------------

Ce que je t'ai proposé n'est pas la solution absolue.
En effet, impossible de passer des paramètres tels que ceux proposés par PasteSpecial().
C'est un manque important à mon avis.

Il faut alors utiliser d'autres solutions s'il est important de copier en valeur, en transposant, etc.

Pour ce faire, on peut parcourir toute la zone à copier cellule par cellule, calculer l'adresse de la cellule cible et y mettre exactement ce que l'on veut.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 055
Membres
1 586 282
Dernier membre
Yannick3553
Partager cette page
Haut