Pb lors de l'écriture/copie dans un fichier Excell (VBA)

vbalolo Messages postés 13 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 19 janvier 2006 - 6 janv. 2006 à 17:41
vbalolo Messages postés 13 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 19 janvier 2006 - 19 janv. 2006 à 10:54
Messieurs,
Si quelqu'un peut me dépanner, ce serait vraiment super sympa. J'ai "développé" un code qui me permet d'ouvrir un fichier "Toto.xls". Je souhaite écrire dans ce fichier Toto des valeurs émanant de mon fichier d'origine (par exemple les lignes 3 à 14).

Lors de l'exécution, le code plante au niveau de "selection.paste" (prorpiété ou méthode non gérée par cet objet).

Qu'ai je oublié ?

D'avance merci.

Sub ouvrir()


Dim objetSynthese As Workbook


' je souhaite à chaque fois que j'ouvre Toto qu'une feuille soit créée
' je souhaite que le nom de cette feuille provienne du fichier ouvrir Ecell (contenu de la 1ère cellule
' je souhaite copier les lignes 3 à 14 du fichier ouvrir Excell vers le fichier toto


Sheets("depart").Select
nomdelafeuille = Cells(1, 1)
Rows("3:14").Select
Selection.Copy

Set objetSynthese = GetObject("C:\toto.xls")
objetSynthese.Activate
Sheets.Add
Sheets(1).Name = nomdelafeuille
objetSynthese.Save
Selection.Paste
objetSynthese.Close
Set objetSynthese = Nothing

End Sub

Lolo

7 réponses

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
6 janv. 2006 à 19:06
Salut,
Et avec ActiveSheet.Paste sa donne quoi ??


Si la réponse te conviens merci de l'accepter
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
6 janv. 2006 à 20:09
En effet !!!

La sélection, en VBA, est un objet (de type Range si je dis pas conneries!). Il ne faut donc pas confondre la sélection de son contenu! Or, là, tu as copié son contenu dans le "presse-papiers". Du coup, il suffit de te positionner quelque part (via Range("A1).Select p.ex.) et de coller le contenu du presse-papiers (et non la sélection qui elle !!!).

C'est juste une logique un tantinet différente de celle de l'utilisateur... héhé, la joie d'être de l'autre coté... de lécran (programmeur quoi!)

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
vbalolo Messages postés 13 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 19 janvier 2006
9 janv. 2006 à 09:47
Messieurs,

J'avais déjà essayé mais j'ai retenté le coup.....Toujours la même erreur.....
au niveau de "activesheet.paste" (propriété ou méthode non gérée par cet objet).

Sub ouvrir()


Dim objetSynthese As Workbook


' je souhaite copier les lignes 3 à 14 du fichier ouvrir Excell vers le fichiet toto
' je souhaite à chaque fois que j'ouvre Toto qu'une feuille soit créée
' je souhaite que le nom de cette feuille provienne du fichier ouvrir Ecell (contenu de la 1ère cellule


Sheets("depart").Select
nomdelafeuille = Cells(1, 1)
Rows("3:14").Select
Selection.Copy

Set objetSynthese = GetObject("C:\tata.xls")
objetSynthese.Activate
Sheets.Add
Sheets(1).Name = nomdelafeuille
objetSynthese.Save
Range("A1").Select
ActiveSheet.Paste
ActiveWorkbook.Close
Set objetSynthese = Nothing

End Sub

Lolo
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
9 janv. 2006 à 16:29
Humm... Ceci ne serait-il pas mieux déjà ??? :

Set objetSynthese = GetObject("C:\tata.xls") 'Perso, j'ai jamais fait comme ça donc, je sais pas...
objetSynthese.Activate 'Et ça l'ouvre d'emblé ???
Sheets.Add
'Ca
Sheets(1).Name = nomdelafeuille
'Ou ça, c'est au choix!
Sheets(1).Name = Sheets("depart").Cells(1,1)

<strike>objetSynthese.Save</strike> 'Cf. en bas...

'Ca


Sheets(1).Rows(
"3:14").Select

'Ou ça, c'est au choix!


Sheets(1).Columns("3:14"
).Select

'Mais pas ça (enfin, si ça ne fonctionne pas!)


<strike>Range("A1").Select</strike>


'Ainsi, tu règle le problème de différence de taille de collage...


ActiveSheet.Paste

objetSynthese.Save 'A mettre avant le Close me semble-t-il !!! Non ???

ActiveWorkbook.Close
Set objetSynthese = Nothing

Là, ça devrait déjà être mieux non ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vbalolo Messages postés 13 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 19 janvier 2006
10 janv. 2006 à 13:21
J'ai encore des soucis.....

Les taches 1 et 2 fonctionnent sans pb.
Le code ne plante plus (pb du plantage au niveau du activesheet.paste est visiblement résolu "visiblement "car je ne peux le vérifier (voir plus bas)). Si je comprends bien il fallait donc sélectionner la même plage que la sélection originale avant d'effectuer le collage. Ce qui signifie que si je veux copier la feuille en entier il me faudra sélectionner un "cells.select"

Mon nouveau souci est que je n'arrive pas à ouvrir correctement tata.xls (une fois finie l'exécution du code). Il s'ouvre mais aucun onglet n'apparait. Lorsque je vais dans l'éditeur VBA, je vois que la nouvelle feuille a bien été créé, je suppose que les éléments ont bien été collés mais je ne peux le vérifier car les onglets ne sont pas accessibles. Sans doute un pb lors de la fermeture du fichier Tata ?????

Voilà le dernier code.....

Sub ouvrir()


Dim objetSynthese As Workbook


' tache 1 : je souhaite à chaque fois que j'ouvre Tata qu'une feuille soit créée
' tache 2 : je souhaite que le nom de cette feuille provienne du fichier ouvrir Ecell (contenu de la 1ère cellule
' tache 3 : je souhaite copier les lignes 3 à 14 du fichier "Base"" vers le fichier "tata"


' copie des données du fichier "Base"


Sheets(1).Select
nomdelafuturefeuilledansTata = Cells(1, 1)
Rows("3:14").Select
Selection.Copy

' collage des données dans le fichier "Tata"

Set objetSynthese = GetObject("C:\tata.xls")
objetSynthese.Activate
Sheets.Add
Sheets(1).Name = nomdelafuturefeuilledansTata
Sheets(1).Rows("3:14").Select
ActiveSheet.Paste
objetSynthese.Save
ActiveWorkbook.Close
Set objetSynthese = Nothing

End Sub

Lolo
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
10 janv. 2006 à 15:34
Je ne comprends pas très bien ton problème... Le mieux serait de refaire un post sur le forum (en essayent d'être le plus clair possible et en précisant bien le langage utilisé et sa version!). Comme je te l'ai dit, je ne connait pas "GetObject("...")" !!! Et a mon sens, le problème vient du mode d'ouverture et, par extension, du mode d'enregistrement!

Enjoy

( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
vbalolo Messages postés 13 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 19 janvier 2006
19 janv. 2006 à 10:54
Je suis finalement parvenu à mes fins. Voici le code qui marche......

Sub OuvreetcopiedansExcell()





' tache 1 : je souhaite à chaque fois que j'ouvre Tata qu'une feuille soit créée


' tache 2 : je souhaite que le nom de cette feuille provienne du fichier ouvrir Ecell (contenu de la 1ère cellule


' tache 3 : je souhaite copier les lignes 3 à 14 du fichier "Base"" vers le fichier "tata"


' tache 4 : la variante 1 sauve le fichier sous un format TXT


' copie des données du fichier "Base"


Sheets(1).Select


nomdelafuturefeuilledansTata = Cells(1, 1)


Rows("3:14").Select


Selection.Copy


' colle vers tata


chemin = "C:"


ChDir chemin


F = "tata.xls"


Workbooks.Open chemin & F 'ouvre lefichier F


Sheets.Add


Sheets(1).Select


Sheets(1).Name = nomdelafuturefeuilledansTata


Sheets(1).Rows("3:14").Select


ActiveSheet.Paste


' variante 0


'ActiveWorkbook.Close True 'trus veut dire que je sauvegarde avant de fermer mon fichier






' Variante 1


resp = InputBox("Quel est le nom du fichier TXT")


ActiveWorkbook.SaveAs Filename:="C:" & resp & ".txt", FileFormat:=xlText, _


CreateBackup:=False




End Sub

Lolo
0
Rejoignez-nous