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

Signaler
Messages postés
13
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2006
-
Messages postés
13
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2006
-
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

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


Si la réponse te conviens merci de l'accepter
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
24
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". )
Messages postés
13
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2006

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
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
24
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". )
Messages postés
13
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2006

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
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
24
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". )
Messages postés
13
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2006

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