ECRIRE DANS FICHIER FERMÉ

D

DOM

Guest
Bonjour forum

COmment vas tu ce midi?
CE fil fait en quelques sorte suite a la la recherche de solution au pb évoqué dans le fil Lien supprimé.

Je souhaite etablir les liens entre mon fichier actif et un fichier fermé ou au moins copié les valeurs dans ce dernier.

Le groupe de cellule que je souhaite copier se trouve dans playa. Ce st des cellules qui se trouvent a des endroits distincts dans le classeur.
je souhaiterai que ces 11 valeurs viennent s ajouter sur une meme ligne de la cellule b5 a la cellule L 5 de mon fichier fermé.
J ai regardé les quelques de demos de michel et du web et j avoue etre un peu perdu avec ces recordset et command text.. notamment dans la définition de l endroit exact du classeur ou je vais copier et la manière de copier les valeurs.

Voici un esquisse de mon code

Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Fichier As String, Cible As String, Feuille As String
Dim n As Byte
Dim valeur As Integer

‘union sous le nom « Playa » des cellule de mon classeur actif que je souhaite copier dans mon fichier fermer
Set playa = Application.Union(Worksheets(« PM »).Range(« C41 »),Worksheets(« donnee »).Range(« D20 »), Worksheets(« Outils »).Range(« E27 »); Worksheets(« PM »).Range(« C41 »), Worksheets(« PM »).Range(« I6 »), Worksheets(« PM »).Range(« av104 »), Worksheets(« Etat »).Range(«E12”), Worksheets(« Etat »).Range(«g50”), Worksheets(« Etat »).Range(«G52”), Worksheets(« Etat »).Range(«I50”), Worksheets(« Etat »).Range(«H50'))
‘utilisation d´un redim pour faciliter la copie
Redim Valeur(11)
For each cell in Playa
Valeur(n) = Cell.formula ’ attribution du lien
N=n+1
Next

Fichier = “X:\\Models\\Plan\\Etat_plan.xls”
Feuille = 'Etat$' 'attention a ne pas oublier le '$'
Set Cn = New ADODB.Connection
Cn.Open 'Provider = Microsoft.Jet.OLEDB.4.0;' & _
'data source=' & Fichier & ';' & _
'extended properties=''Excel 8.0;''
Set Cd = New ADODB.Command
Cd.activeConnection = Cn
Cd.commandText = 'SELECT * from `Etat!$A1:A1`' ‘ je ne sais pas trop ce que ca veut dire je suppose que c est la case d origine
Set Rst = New ADODB.Recordset
Rst.Open Cd, , adOpenKeyset, adLockOptimistic
For n=0 to 11
Rst(0).Value = Valeur(n) je n ai pas trouvé assez d info sur le recordset mais j imagine que c est les valeurs qu on souhaite transféréRst.Update
Cn.Close
Set Cn = Nothing
Set Cd = Nothing
Set Rst = Nothing
End Sub



Je sais que ce code est un peu long masi je remercie tout ce qui auront pris le soin de le lirre

DOM
 

michel_m

XLDnaute Accro
Re,

Les taches ménagères, d'accord, c'est pas notre prioriré mais pour UNE, ca l'est!....donc, j'ai eu droit à des chants occitans (fait trop chaud l'après midi)

Bon, revenons à Excel. J'avoue de presque rien comprendre à ton histoire de Range C39.

mais la ligne que tu écris
.Fields(0) = '= 'X:!Modele!Plan!' & Range('C39') & '![' & classeur & ']Cel1'
ne peut pas marcher :j'avais commencé pareil en début de matinée hier et je t'ai posté le tout vers 1 heure de l'aprèm.

je pense que c'est cette ligne qui faut changer:
Fichier = ThisWorkbook.Path & '\\Fichier_Fermé.xls'

en écrivant le chemin de 'fichier fermé' au lieu de ThisWorkbook.Path

ensuite

classeur = ThisWorkbook.Name

With Rs
.AddNew
.Fields(0) = '= ' & classeur & '!cel1'
ect
resterait bon

le nom complet du fichier est implicite: regarde dans ma démo 'fichier fermé.xls', les classeurs ouverts étant fermés.

Fais des essais et dis moi les résultats

Amicalement

Michel_M
 
D

dom

Guest
Salut michel M

Comment vas tu ce matin?

Les chorale occitane s´est-elle terminée? ;-)

Je viens de passe la matinée a tenter de régler le pb mais en vain.
Je n´ai pas réussi a faire la manip dans les conditions suivantes:

Fichiers ouverts et fichier fermé dans des repertoires différents.

J´ai essayé en mettant
- Classeur = Thisworbook.fullname
- ou en inscrivant le chemin d accés complet

Mais ya pas moyen

A chaque j ouvre le ficher fermé il me demande d aller chercher le fichier d origine

JE vais encore bucher dessus et je t informe de la suite

Bonne journée


dom
 

michel_m

XLDnaute Accro
Bonsoir Dom, Michel et le forum

Effectivement, la manip n'aime pas du tout les répertoires différents! Après de multiples et pénibles essais: ça marche avec 1 sous répertoire mais ça devient aléatoire avec 2 sous répertoires et le 'fields(1)' est refusé après changement de répertoire quelque soit le type de données: mystère, mystère…

Par contre j'ai modifié la macro du fichier fermé car il fallait tenir compte de plusieurs transferts sans ouverture du fichier fermé. Ci dessous la bestiole.

Option Explicit

Sub convertir()
Dim lig As Long, col As Long
Dim aspro As String

Worksheets('feuil1').Activate
Application.ScreenUpdating = False

For lig = 13 To Range('B65536').End(xlUp).Row
If Cells(lig, 2).HasFormula = False Then
For col = 2 To 7
aspro = Cells(lig, col).Value
Cells(lig, col).FormulaR1C1 = aspro
Next col
End If
Next lig
End Sub

Conclusion: ton pb m'a fait faire des découvertes, tu as appris et moi aussi, vive le forum

Amicalement,

Michel_M
 

michel_m

XLDnaute Accro
Bonsoir Dom, Michel

J'ai continué les essais cet aprèm (la maison est nickel…) car l'histoire du fields(1) contenant une date, donc un nombre, me tarabustait.

En fait, il y avait un sacré piège vicieux:
Au premier tour,la macro demande d'exporter le TEXTE de la formule de lien externe (date de début chantier)

Transféré dans 'fichier fermé', on transforme ce texte en formule qui renvoie alors un nombre dans le fields(1)

Au deuxième tour, il y a conflit car le fields(1) est du type 'nombre' et on importe un texte de la macro.


Par contre, concernant l'affectation dans plusieurs sous-dossiers, c'est toujours l'échec de mon coté mais si quelqu'un trouve une astuce ou peut me dire le pourquoi du comment je suis preneur

Ci joint la dernière mouture

Michel_M
[file name=Dom_XLD2_20050729174759.zip size=47700]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Dom_XLD2_20050729174759.zip[/file]
 
Dernière édition:

MichelXld

XLDnaute Barbatruc
bonjour Dom , bonjour Michel

cette adaptation fonctionne chez moi si le classeur fermé est dans un répertoire différent

Code:
classeur = ThisWorkbook.Name

With Rs
.AddNew
.Fields(0) = '='' & ThisWorkbook.Path & '\\' & classeur & ''!cel1'
.Fields(1) = '='' & ThisWorkbook.Path & '\\' & classeur & ''!cel2'
.Fields(2) = '='' & ThisWorkbook.Path & '\\' & classeur & ''!cel3'
.Fields(3) = '='' & ThisWorkbook.Path & '\\' & classeur & ''!cel4'
.Fields(4) = '='' & ThisWorkbook.Path & '\\' & classeur & ''!cel5'
.Fields(5) = '='' & ThisWorkbook.Path & '\\' & classeur & ''!cel6'
.Update
End With


un message s'affiche lors de l'ouverture du 'classeur fermé' , il suffit de cliquer sur le bouton 'continuer'


bon week end
MichelXld
 

michel_m

XLDnaute Accro
Bonjour Michel,

Bien vu, Michel! merci, j'y perdais mon VBA...

Je pars en vacances demain; je ferai un article plus présentable au retour pour les archives, car ce pb s'est avéré intéressant; la difficulté restant l'obligation de changer de type pour les valeurs numériques.

Je joins pour Dom s'il passe dans le coin la dernière mouture


A+

Michel_M [file name=dom_xld4.zip size=41146]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/dom_xld4.zip[/file]
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 998
Membres
103 429
dernier inscrit
PhilippeH