Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2011, 11h22   #1
Invité de passage
 
Luc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Luc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
Par défaut commande shell pour créer un fichier

Bonjour à tous et toutes. voilà mon problème:

à partir d'excel, je dois créer un fichier avec notepad puis l'enregistrer.
j'ai écrit ce bout de code:

Code :
1
2
3
4
5
6
 
ReturnValue = Shell("C:\Windows\Notepad.exe c:\vbatelier\Progression\travail du " & Format(Date, "dd mm yyyy") ".txt", 1)  
AppActivate ReturnValue    
SendKeys " il est: " & Time ' je marque une phrase simple
Application.SendKeys "^{s}", True  ' pour enregistrer le fichier
Application.SendKeys "%{F}{Q}", True ' pour quitter notepad
ça fonctionne mais 2 points ne donnent pas satisfaction:

1) il a un "dong" à chaque création de message car le fichier est créé et appelé en même temps, je reconnais que ce n'est pas trés logique.

2) plus embêtant, si notepad sert à enregister un texte quelques part sur le disque, le dernier chemin d'accés reste mémorisé et donc qaund VBA execute le code, il y a un message d'erreur car il ne peut pas créér ce nouveau fichier à l'emplacement prévu (changement de disque ou de repertoire).


je ne doute pas que les pro de VBA me donneront les indications necessaires pour corriger ces imperfections.
mysterauto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 11h56   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Pourquoi ne pas créer un classeur et l'enregistrer au format texte ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 12h13   #3
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

Bonjour,

La solution de Daniel.C pour moi c'est l'idéal mais pour répondre à ta question:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub NotePad()
 
 AppActivate Shell("Notepad.exe", vbNormalFocus)
  SendKeys "abc" ' Ecrire
Sleep 1000
  SendKeys "^s" ' Pour enregistrer
Sleep 1000
  SendKeys "C:\Mes documents\travail du " & Format(Date, "dd mm yyyy") & ".txt", 1
Sleep 1000
  SendKeys "{ENTER}" ' valide le chemin
Sleep 1000
  Application.SendKeys "%{F}{Q}", True ' pour quitter notepad
End Sub
Au plaisir.
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 13h45   #4
Invité de passage
 
Luc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Luc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
merci tout d'abord à tous les 2 pour vos réponses rapides.

je vais tester les 2 pour l'experience.

j'ai deux questions:

suis-je obligé de créér un classeur ou puis-je utiliser une feuille de mon classeur actuel? je mettrais donc dans une cellule le texte voulu; serait-ce génant si le texte comporte des retous chariots, 300 ou 400 mots dans une seule cellule?

si j'ai compris la solution que j'avais ébauchée, sendkeys envoi des sequences de touches dans la zone texte et application.sendkeys envoi des sequences de touches dans la barre des menus?

merci encore pour vos explications.

Luc
mysterauto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 13h56   #5
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Tu peux enregistrer la feuille en tant que fichier texte :

Code :
ActiveSheet.SaveAs "c:\temp\toto", xlTextWindows
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 14h30   #6
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

Pour gérer des fichiers textes à la racine de mon classeur j'utilise ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
Public erreur As Long
Public FTXT, NUM As Variant
Sub Fichier_Txt()
' Vérification de la présence des fichiers texte
 
FTXT = ThisWorkbook.Path & "\creation_fichier_txt.txt"
 
FichierExiste FTXT
If erreur = 1 Then
FTXT = ThisWorkbook.Path & "\creation_fichier_txt.txt"
NUM = FreeFile
Open FTXT For Output As #NUM
 
Write #NUM, "Ton texte a ajouter"
 
Close #NUM
End If
 
End Sub
Public Function FichierExiste(ByVal nom As String) As Boolean
On Error Resume Next
    Dim attrib As Integer
 
attrib = GetAttr(nom)
    If (Err <> 0) Then
        FichierExiste = False
        erreur = 1
    Else
        If ((attrib And vbDirectory) = vbDirectory) Then
            FichierExiste = False
        erreur = 1
        Else
            FichierExiste = True
        End If
    End If
End Function
Ce code me permet de gérer mes fichiers textes et de noter ce que j'ai besoin dedans un peu comme un journal!!
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 10h05   #7
Invité de passage
 
Luc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Luc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
merci Daniel.c mais dans ta solution, la feuille se renomme automatiquement avec le nom du fichier, est-ce normal?

Luc
mysterauto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 10h34   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Essaie :

Code :
ActiveSheet.SaveAs "C:\Mes documents\travail du " & Format(Date, "dd mm yyyy") & ".txt", xlTextWindows
Il est cependant préférable de faire :

Code :
1
2
ActiveSheet.Copy
ActiveWorkbook.SaveAs "C:\Mes documents\travail du " & Format(Date, "dd mm yyyy") & ".txt", xlTextWindows
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 10h25   #9
Invité de passage
 
Luc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Luc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
Par défaut et pour fermer?

bon, ça marche bien et correspond à mon besoin, mais il y a une chose que je n'arrive pas à résoudre:

lorsque je veux fermer excel, une boite d'alerte me demande si je veux sauvegarder le fichier qui a été créé, je réponds oui.

puis il me propose un nom de fichier et l'arborescence, je reponds oui.

puis il m'avertit que certaines fonctionnalités peuvent être perdues à cause du format, je reponds encore oui.

il y a surement un moyen d'éviter ou d'automatiser ses taches?

merci
mysterauto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 10h59   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Code :
1
2
3
ActiveSheet.Copy
ActiveWorkbook.SaveAs "C:\Users\user\Desktop\travail du " & Format(Date, "dd mm yyyy") & ".txt", xlTextWindows
ActiveWorkbook.Close False
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 11h18   #11
Invité de passage
 
Luc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Luc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
merci, c'etait simple mais jen'avais jamais utilisé ses instructions.

un grand merci à tous pour votre aide si précieuse.

Amicalement, Luc
mysterauto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h48.


 
 
 
 
Partenaires

Hébergement Web