Se connecter avec
S'enregistrer | Connectez-vous
Votre question

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

Dernière réponse : dans Programmation
Partagez
20 Décembre 2012 11:40:09

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
  1. Public appExcel As Object 'Application Excel
  2. Public wbsource As Object 'Classeur Excel
  3. Public wbprevious As Object


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


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


Enfin le code posant Pb :/ 
  1. wbsource.Worksheets(nomfeuil).Range("A1:I600").Copy
  2. wbprevious.Worksheets("Top Manager CAP").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  3. :=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-langag...
a b L Programmation
20 Décembre 2012 14:04:43

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 ?
  1. Dim wbsource As Workbook, wbprevious As Workbook
  2. ..
  3. wbsource.Worksheets("nom de la feuille").Range("A1:I600").Copy Destination:=wbprevious.Worksheets("Top Manager CAP").Range("A1")
m
0
l
20 Décembre 2012 15:41:50

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 ^^
m
0
l
a b L Programmation
21 Décembre 2012 11:20:30

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.
m
0
l