Enregistrer sous bloc note ouvert par vba

kyasteph

XLDnaute Occasionnel
Bonjour,

Apres avoir longtemps cherché sur le forum,j'ai trouvé un code qui fait exactement ce que je veux:il copie une plage excel et le colle exactement dans un fichier texte.Jusque là pas de probleme.
Mais je souhaite pouvoir fermer automatiquement le fichier bloc note ouvert en l'enregistrant sous un nom bien précis exemple "toto" et à un emplacement précis par exemple sur le bureau .

Voici le code :
Code:
Sub Test()
 Range("A1:A2").Select
    Selection.Copy
Dim RetVal
RetVal = Shell("notepad.exe", 3)
SendKeys ("^v"), True
SendKeys ("%{tab}"), True
End Sub

ci joint un fichier pour mieux me faire comprendre.

Merci de m'aider s'il vous plait.

PS:Apres un long moment d'absence me voici de retour sur le forum; veuillez m'excuser j'ai une discussion non terminée je reviendrai tres bientot avec toutes les autres informations nécessaires;merci.
 

Pièces jointes

  • Copy_Bloc_note.xlsm
    15 KB · Affichages: 58

Dranreb

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Bonsoir.

Pourquoi diable passer par le Bloc-Note dans ce cas ?
VB:
Sub Test()
Dim Cel As Range
Open ThisWorkbook.Path & "\Toto.Txt" For Output Access Write As #1
For Each Cel In Range("A1:A2")
   Print #1, CStr(Cel.Value): Next Cel
Close #1
End Sub
 

kyasteph

XLDnaute Occasionnel
Re : Enregistrer sous bloc note ouvert par vba

Bonsoir,
Merci pour votre réponse mais cela ne résoud pas mon probleme car les données du bloc note créé ne s'affiche pas comme celles de la source excel.
Comme je l'ai dis plus haut,le bloc note créé par mon code fait exactement ce que je veux (les données sont alignées comme dans le fichier source excel.
En effet apres j'ai un code qui me permet de les importer et cela marche.
Il me faut donc le bout de code pour enregistrer le fichier texte ainsi créé.

Merci de m'aider s'il vous plait
 

Staple1600

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Bonsoir à tous

Même interrogation que Dranreb
Pourquoi passer par le bloc-notes?

Car j'ai testé ton code et celui-ci
Code:
Sub a()
Worksheets(1).Copy
With ActiveWorkbook.Sheets(1)
.SaveAs "C:\Temp\xls2txt.txt", xlTextMSDOS
.Parent.Close False
End With
End Sub
Avec en A1: TEXTE1 et en A2 TEXTE2
et le résultat si on ouvre les deux fichiers texte dans le bloc-notes sont identiques, non ?
(en tout cas, c'est la cas sur mon pc)
 

Dranreb

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Alors essayez comme ça:
VB:
Sub Test2()
TxtPlage "Toto.txt", [A1:B2]
End Sub
Sub TxtPlage(ByVal RéfFic As String, ByVal Plg As Range)
Dim Te(), Ts() As String, L&, C&
Te = Plg.Value: ReDim Ts(1 To UBound(Te, 2))
Open RéfFic For Output Access Write As #1
For L = 1 To UBound(Te, 1)
   For C = 1 To UBound(Te, 2): Ts(C) = Te(L, C): Next C
   Print #1, Join(Ts, vbTab): Next L
Close #1
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Re


Même avec plusieurs colonnes, pas de problème d'alignement avec le code du message #4
(testé avec cette formule en A1 recopiée vers la droite 17 fois et vers le bas 21 fois
=CAR(64+COLONNE())&COLONNE()*LIGNE()

Le fichier texte généré sépare bien chaque colonne et contient bien les valeurs que renvoyaient les formules.
 

kyasteph

XLDnaute Occasionnel
Re : Enregistrer sous bloc note ouvert par vba

Bonsoir à tous
Merci pour l'interet que vous portez à mon probleme.Le code proposé par Dranreb me satisfait fort bien.
En effet je l'ai testé avec plusieurs colonnes ( 9 par exemple) et cela marche.
je peux ainsi importer les données du fichier texte dans des plages excel à souhait.

Merci encore vous etes formidables;
Longue vie au forum
 

kyasteph

XLDnaute Occasionnel
Re : Enregistrer sous bloc note ouvert par vba

Bonsoir,
Merci Dranreb,mais pourrait tu commenté le code car ça marche certes mais je souhaiterais comprendre.
Aussi comment enregistrer le fichier texte à un emplacement précis sur le bureau par exemple car le fichier se loge dans les "documents".

Merci de m'aider s'il vous plait
 

Dranreb

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Fournir en 1er argument à la procédure TxtPlage la référence complète du fichier à créer ou alors faire préalablement un ChDrive de l'unité puis un ChDir du dossier sur cette unité.
VB:
Sub TxtPlage(ByVal RéfFic As String, ByVal Plg As Range)
Dim Te(), Ts() As String, L&, C&
Te = Plg.Value ' Charge les valeurs de la plage dans le tableau d'entrée.
ReDim Ts(1 To UBound(Te, 2)) ' Dimensionne ce tableau au nombre de colonnes
Open RéfFic For Output Access Write As #1 ' Ouverture fichier texte
For L = 1 To UBound(Te, 1) ' Pour chaque ligne :
   For C = 1 To UBound(Te, 2): Ts(C) = Te(L, C): Next C ' L'inscrit dans le tableau de travail
   Print #1, Join(Ts, vbTab): Next L ' En écrit les éléments reliés par des tabulations
Close #1 ' Ferme le fichier.
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Bonjour à tous


kyasteph
Tu peux expliquer pourquoi tu n'as pas pris le temps (et la courtoisie) de tester ma macro ?
Il est toujours très sympathique de proposer son aide sur le forum et de voir celle-ci totalement ignorée par le demandeur...:rolleyes:

[note à moi-même et pour plus tard]
Bien choisir les questions avant d'y répondre...
[/note à moi-même et pour plus tard]
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Bonjour Stapple1600.
Puis je me risquer (à la place du demandeur) peut être à y objecter que ta solution, une fois adaptée à le faire pour une plage extraite de n'importe où dans une feuille, passe par un nouveau classeur temporaire, qui, techniquement, est un support pratiquement aussi lourd qu'une page de Bloc-note ?…
 

Staple1600

XLDnaute Barbatruc
Re : Enregistrer sous bloc note ouvert par vba

Bonjour Dranreb

[aparté]
Il n'est pas question pour moi de savoir si telle ou telle solution de tel ou tel contributeur est plus ou moins ceci ou plus ou moins cela.
Je parlais simplement de courtoisie ;)
Courtoisie de saluer, lire, tester tous les participants d'un fil.
[/aparté]

PS: Je précise que j'ai testé tes codes.
Simplement n'étant pas l'initiateur du fil, je ne l'ai pas commenté.
Et il va de soi, qu'à l'usage, c'est ton code que je choisirai mais là n'était pas le sujet ;) de mon précédent message.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 907
Membres
101 836
dernier inscrit
karmon