Exporter résultat Code VBA vers Word ?

Le
gauso
Bonjour,

Soit un code vb qui analyse l'arborescence des répertoires : le
problème est que le résultat est très lourd et qu'il risque de
dépasser le nombre de caractères autorisés dans un champ Memo (64 000
il me semble ?)
Donc, j'aimerais bien transférer ce résultat directement dans un
fichier Word (à créer au passage donc) si possible sans avoir à
gérer du publipostage et me préoccuper de signets, etc. : je voudrais
juste copier ces données "brut de pomme" dans un fichier Word Est-
ce possible et si oui comment ??

Merci d'avance aux bienfaiteurs de ce forum ;o)
Sonia.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gloops
Le #23267011
gauso a écrit, le 07/04/2011 09:28 :
Bonjour,

Soit un code vb qui analyse l'arborescence des répertoires : le
problème est que le résultat est très lourd et qu'il risque de
dépasser le nombre de caractères autorisés dans un champ Memo (64 000
il me semble ?)...
Donc, j'aimerais bien transférer ce résultat directement dans un
fichier Word (à créer au passage donc)... si possible sans avoir à
gérer du publipostage et me préoccuper de signets, etc. : je voudra is
juste copier ces données "brut de pomme" dans un fichier Word... Est-
ce possible et si oui comment ??

Merci d'avance aux bienfaiteurs de ce forum ;o)
Sonia.



Bonjour,

Et dans un fichier texte, non ?


____________
Open "nomfichier.txt" For Output As #1

While Not TraitementTermine
Print #1, strLigne
Wend

Close #1
____________


Alors pour un fichier Word. Je vais prendre l'exemple facile où tout es t
bien installé en standard et on ne se retrouve pas avec une erreur 429.
Au besoin on pourra aussi essayer un
Set wrdApp = CreateObject("Word.Application")


Attention d'ajouter Word (ou Office ?) dans les références : partir d 'un
module, appeler le menu Outils, commande Références.



Dim wrdApp As New Word.Application
Dim wrdDoc As Word.Document

Set wrdDoc = wrdApp.Documents.Add()

While Not TraitementTermine
wrdDoc.Content.InsertAfter strLigne
wrdDoc.Content.InsertParagraphAfter
Wend
wrdDoc.SaveAs "fichier.doc"

C'est un exemple, mais à moins de vouloir ensuite faire de la mise en
forme pour mettre en valeur certains éléments, il est clair que la
version texte est plus facile à adapter.

Je pars du principe qu'on a un Word ultérieur à ... combien déjà, 2000 ?
J'ai pratiqué les autres, mais si on cherche à être exhaustif, on e n a
pour un moment.

Pour revenir au fichier texte (pour Word on peut adapter d'ailleurs) ...
Comme on aime bien suivre ce qui se passe pendant l'exécution, on peut
remplacer l'écriture par

Affiche strLigne

en ayant au préalable créé :

Public Sub Affiche(strLigne As String)
On Error Resume Next
Debug.Print strLigne
Print #1, strLigne
End Sub


Dans tous les cas la chaîne reçue apparaît dans la fenêtre d'exé cution.
Ensuite, si un fichier #1 est ouvert on écrit la chaîne en argument
dedans, sinon l'erreur est ignorée.


J'ai une version avec écriture tabulée, parce que
Debug.Print "colonne1";tab(50);"colonne2"
ça marche bien, mais passer ça en argument à une fonction, c'est un peu
plus coton. Mais là, je suis hors sujet.
gauso
Le #23268071
Merci Gloops :o)
Je crois que le fichier txt ira bien...
Mais j'ai un petit souci : il s'enregistre automatiquement dans Mes
Documents...
Comment faire pour qu'il s'enregistre DIRECTEMENT dans le répertoire
que je souhaite (sans avoir à utiliser l'écriture entière du chemin,
car on travaille en réseau et donc le chemin peut être relatif...),

Merci d'avance pour tes lumières,
Sonia
Gloops
Le #23269661
gauso a écrit, le 08/04/2011 11:39 :
Merci Gloops :o)
Je crois que le fichier txt ira bien...
Mais j'ai un petit souci : il s'enregistre automatiquement dans Mes
Documents...
Comment faire pour qu'il s'enregistre DIRECTEMENT dans le répertoire
que je souhaite (sans avoir à utiliser l'écriture entière du chem in,
car on travaille en réseau et donc le chemin peut être relatif...),

Merci d'avance pour tes lumières,
Sonia




Salut Sonia,

Ben ... si le chemin est relatif, tout va bien, non ?

Alors il faut avoir en tête les notions d'unité par défaut (ou disq ue
par défaut si on préfère), et de répertoire par défaut.
Le répertoire par défaut se décline par disque.

On change le répertoire par défaut avec l'instruction ChDir
Pour le disque j'ai un trou de mémoire, il me semble que c'est ChDisk
Il faut utiliser les deux avec le même argument, si celui-ci comporte
une unité et un chemin.

ChDisk "C:Test"
ChDir "C:Test"

Sur la première ligne on choisit le disque C:, et sur la deuxième on dit
que le répertoire actif y est le répertoire Test, sous la racine.
C'est un exemple à adapter, puisque C:, pour le réseau, ce n'est pas le
meilleur exemple :)

Pour le réseau on peut indiquer un chemin sans lettre d'unité, ce qui a
l'avantage d'être transposable d'un poste sur l'autre, puisque les
lettres d'unité peuvent êtres définies de façon différente d'un poste à
l'autre. On utilise alors ce qu'on appelle un chemin UNC (faire une
recherche là-dessus, de mémoire il me semble bien que c'est Unified
Naming Convention)
Un chemin UNC commence par deux barres inverses, un nom d'unité, une
barre inverse, suivie d'un chemin, où comme dans l'autre convention
(avec les lettres de lecteur) les différents répertoires sur le chemi n
sont séparés par des barres inverses.

Si il y a un inconvénient au chemin UNC, c'est bien qu'il ne répond p as
à la question :)
C'est vrai, choisir un chemin par défaut sur un chemin UNC, ça ne me
paraît pas très commode, et si c'est possible j'ai une lacune sur la
question.

ça me paraît quand même important de savoir que ça existe, pour
l'intérêt que je mentionnais, les lettres de lecteurs ne sont pas
toujours définies pareil d'un poste à l'autre. On peut imaginer d'en
définir une pour les besoins du traitement (voir du côté de NET USE , ou
de SUBST)

Bon, eh bien ... après, ça serait délayé, non ?
gauso
Le #23270481
"Délayé" tu dis... ben je ne m'en sortais pas avec tes explications
(je manque de bases !),
Donc je me suis reportée au didacticiel http://warin.developpez.com/acces s/fichiers/#LI-B-2,
et après avoir tâtonné par mal, j'ai fini par m'en sortir en
utilisant :
Dim a As Object
Set a = oFSO.CreateTextFile("Chemin de destinationNomFichier.txt,
True)
a.WriteLine sTmp ' sTmp étant le résultat de l'exploration de mes
répertoires...
a.Close

... me permettant de créer directement le fichier là où je voulais
qu'il soit et d'y écrire ce que j'avais à y écrire...

Merci quand même et bonne journée,
Sonia.
Gloops
Le #23272221
gauso a écrit, le 09/04/2011 12:04 :
"Délayé" tu dis... ben je ne m'en sortais pas avec tes explications
(je manque de bases !),
Donc je me suis reportée au didacticiel http://warin.developpez.com/a ccess/fichiers/#LI-B-2,
et après avoir tâtonné par mal, j'ai fini par m'en sortir en
utilisant :
Dim a As Object
Set a = oFSO.CreateTextFile("Chemin de destinationNomFichier.txt,
True)
a.WriteLine sTmp ' sTmp étant le résultat de l'exploration de mes
répertoires...
a.Close

... me permettant de créer directement le fichier là où je voulai s
qu'il soit et d'y écrire ce que j'avais à y écrire...

Merci quand même et bonne journée,
Sonia.




C'est aussi une possibilité, mais c'est dommage de charger une ressourc e
supplémentaire (FileSystemObject), alors que VBA s'en sort très bien.

Le début de ma première réponse :
____
Open "nomfichier.txt" For Output As #1

While Not TraitementTermine
Print #1, strLigne
Wend

Close #1
___

Bien sûr, à la place de TraitementTermine, il faut mettre la conditio n
qui va bien. Et strLigne est la ligne à écrire dans le fichier. Si on
veut écrire à la suite dans un fichier existant, on remplace For Outp ut
par For Append.

La suite, c'était juste pour répondre au premier degré à la quest ion posée.

Alors puisque l'exemple proposé en FSO n'écrit qu'une ligne :

Open "nomfichier.txt" For Output As #1
Print #1, strLigne
Close #1
Gloops
Le #23272251
Gloops a écrit, le 10/04/2011 00:59 :
gauso a écrit, le 09/04/2011 12:04 :
"Délayé" tu dis... ben je ne m'en sortais pas avec tes explication s
(je manque de bases !),
Donc je me suis reportée au didacticiel
http://warin.developpez.com/access/fichiers/#LI-B-2,
et après avoir tâtonné par mal, j'ai fini par m'en sortir en
utilisant :
Dim a As Object
Set a = oFSO.CreateTextFile("Chemin de destinationNomFichier.txt,
True)
a.WriteLine sTmp ' sTmp étant le résultat de l'exploration de mes
répertoires...
a.Close

... me permettant de créer directement le fichier là où je voula is
qu'il soit et d'y écrire ce que j'avais à y écrire...

Merci quand même et bonne journée,
Sonia.




C'est aussi une possibilité, mais c'est dommage de charger une ressou rce
supplémentaire (FileSystemObject), alors que VBA s'en sort très bie n.

Le début de ma première réponse :
____
Open "nomfichier.txt" For Output As #1

While Not TraitementTermine
Print #1, strLigne
Wend

Close #1
___

Bien sûr, à la place de TraitementTermine, il faut mettre la condit ion
qui va bien. Et strLigne est la ligne à écrire dans le fichier. Si on
veut écrire à la suite dans un fichier existant, on remplace For Ou tput
par For Append.

La suite, c'était juste pour répondre au premier degré à la que stion posée.

Alors puisque l'exemple proposé en FSO n'écrit qu'une ligne :

Open "nomfichier.txt" For Output As #1
Print #1, strLigne
Close #1





Ah ça me revient : il m'est arrivé, une fois, de faire appel à FSO,
parce qu'avec la syntaxe VB que j'indique ci-dessus, je n'obtenais pas
ce que je voulais dans le fichier, et avec FSO c'est passé "comme une
lettre à la poste", comme on disait avant qu'on mette des majuscules au
nom (en France on dit "La Poste" depuis quelques années) et des
minuscules au service. Hélas, je ne me rappelle pas les détails et je
suis incapable d'en dire plus. Peut-être que 3stone saura dire ?
Publicité
Poster une réponse
Anonyme