Enregistrer une feuille Excel au format DOS

Bonjour,

Voici le VBA que j'ai associé à mon bouton (macro) :

Worksheets("Feuil3").SaveAs FileName:=chemin & "\fichier_DOS.bat", _

FileFormat:=xlTextMSDOS, CreateBackup:=False

Ce code VBA (si je me trompe pas) permet d'enregistrer la feuille 3 de mon classeur Excel au format TXTMSDOS.

Mais lorsque j'exécute ce code, il enregistre entièrement mon classeur Excel "fichier_DOS.bat" et je le trouve nul part dans mon répertoire.

J'aimerai qu'il enregistre la feuil3 dans le répertoire + au format convenu + sans fermer le workbook, est-ce possible SVP ?

Merci.

Bonjour SpaceX,

tu a écrit :

je le trouve nul part dans mon répertoire.

je crois que tu utilises la commande Ouvrir pour voir si ton fichier .bat est dans la liste des fichiers ; mais il n'apparaît pas car c'est pas un fichier Excel ; pour le voir, au lieu du type « Tous les fichiers Excel » tu dois choisir le type : « Tous les fichiers » ou « Fichiers texte » ; sur ma version, c'est en bas de la fenêtre « Ouvrir », et juste au-dessus du bouton « Ouvrir » (à droite du champ pour le nom de fichier) ; mais bien sûr, c'est juste pour vérifier sa présence : on ouvre pas un fichier .bat dans Excel.

si c'est pas ça, alors vérifie le contenu de ta variable chemin ; au besoin, utilise ThisWorbook.Path ou ActiveWorkbook.Path.


tu a écrit :

sans fermer le workbook

ça a fermé le workbook car d'habitude ça va sur le classeur Excel copié (qui a remplacé le classeur de départ) ; mais comme c'est un fichier .bat (donc pas un classeur Excel), ça n'a pas ouvert ce .bat et y'a rien à l'écran car le fichier de départ a été fermé ; aussi, je crois bien que la seule solution est d'ouvrir à nouveau le classeur de départ.

dhany

Bonjour, Salut Dhany !

Si tu n'as rien d'autre dans ton code, son exécution enregistrera le contenu de ta feuille en fichier texte, sans fermer ton classeur.

Tu le trouveras dans le dossier que tu as indiqué dans ton chemin...

Tu peux t'y rendre et l'ouvrir pour vérifier... mais attention ! avec ton extension .bat évite le double-clic , pour l'afficher : clic droit, puis clic sur Modifier (et pas Ouvrir !).

Cordialement.

Bonjour,

Finalement je suis parvenu à générer le fichier .BAT. Il fallait rajouter ces trois lignes de codes :

Private Sub CommandButton1_Click()
path = ThisWorbook.path
      Worksheets("Feuil3").SaveAs FileName:=path & "\ACXXX.bat", _
        FileFormat:=xlTextMSDOS, CreateBackup:=False
End Sub

Par contre quand je visualise le contenu de mon fichier .Bat (en cliquant sur le fichier puis modifier) et non en double cliquant dessus. Je ne peux pas visualiser le contenu, car c'est écrit (Ne répond pas), une sorte de bug.

Et mon classeur Excel se renomme automatiquement ACXXX.bat.

Pouvez vous m'aider svp ?

Merci

Bonjour,

Tu ne peux pas utiliser path comme variable, c'est un mot clé.

... path = ThisWorkbook.path ...

Il faut utiliser un nom de variable différent des mots clés.

Aussi le "\", j'aime mieux l'insérer dans le path que dans le bout de code du nom du fichier.

Private Sub CommandButton1_Click()
Dim Chemin As String

Chemin = ThisWorkbook.Path & "\"
      Worksheets("Feuil3").SaveAs Filename:=Chemin & "ACXXX.bat", _
        FileFormat:=xlTextMSDOS, CreateBackup:=False
End Sub

Un petit truc de test ... sur une ligne vide à la fin des données ...

dans une cellule de la colonne A ... saisie "Pause" ... sans les guillemets bien sûr.

Quand tu vas faire un double clic sur ACXXX.bat, il va s'ouvrir et attendre que tu tapes une touche. Ainsi, tu peux visualiser les premières colonnes du fichier.

ric

@ric : bien vu ! j'avais pas remarqué qu'il manquait un k !

dhany

Bonjour,

En effet, il me manque la lettre "k" mais j'ai toujours le même problème, impossible de lire le contenu de mon fichier .BAT.

Mais je crois avoir trouvé mon problème, quand j'ouvre mon fichier .BAT (en double cliquant), j'obtiens le message suivant : "Ce fichier est utilisé par une autre application".

Je crois qu'il faut que je ferme mon fichier Excel ou je ajouter un msgbox pour appliquer un temps de pause.

Voici mon code en entier :

Private Sub CommandButton1_Click()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim n As String 'déclare la variable N (Nom)
Dim pathfile As String
Set OS = Worksheets("Feuil2") 'définit l'onglet source OS (à adapter à ton cas)
Set OD = Worksheets("Feuil3") 'définit l'onglet destination OD (à adapter à ton cas)
Set R = OS.Columns(5).Find(">limite", , xlValues, xlWhole) 'définit la recherche R (recherche les occurrences de ">seuil" dans la colonne 5 (=E) de l'onglet source OS
    If Not R Is Nothing Then 'condition : s'il existe au moins une occurrence
    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
    Do 'exécute
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet destination OD)
        If OD.Range("A1").Value = "" Then Set DEST = OD.Range("D1") Else Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 3)
        DEST.Value = Mid(OS.Cells(R.Row, 1).Value, 3) 'récupère les numéros de R
        DEST.Offset(0, -3) = "taille"
        DEST.Offset(0, -2) = "enfants"
        DEST.Offset(0, -1) = 0
        DEST.Offset(0, 1).Value = Mid(OS.Cells(R.Row, 2), 3) 'récupère les numéros de T
        n = OS.Cells(R.Row, 1).End(xlUp).Value 'récupère le nom
        n = Left(n, Len(n) - 4) 'enlève l'extension
        DEST.Offset(0, 3).Value = n 'récupère le nom
        Select Case Right(n, 3)
        Case Is = "T1"
            DEST.Offset(0, 2) = 600
        Case Is = "T2"
            DEST.Offset(0, 2) = 800
        Case Is = "T3"
            DEST.Offset(0, 2) = 900
        Case Is = "T4"
            DEST.Offset(0, 2) = 1000
        Case Is = "T5"
            DEST.Offset(0, 2) = 1200
        End Select
        Set R = OS.Columns(5).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
    Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
    End If 'fin de la condition

pathfile = ThisWorkbook.path & "\"
Worksheets("Feuil3").SaveAs FileName:=pathfile & "ACXXX.bat", _
FileFormat:=xlTextMSDOS, CreateBackup:=False
End Sub

Avez vous des idées svp ?.

Bonjour,

Il me semble qu'un fichier illustrerait peut-être mieux ton propos... Un fichier Batch est un fichier de commandes exécutables... on ne voit pas très bien ce qu'il en est de ton fichier à cet égard...

Cordialement.

Bonjour,

Les tests sommaires que j'ai effectués révèlent qu'effectivement, il faut fermer Excel afin de pouvoir "exécuter" le fichier batch (que tu viens de produire) par un double-clic.

Puis, en ajoutant le mot "pause" au bas des données, avant de produire le fichier, empêchera le fichier de se fermer automatiquement.

Mais, sincèrement, je ne comprends pas l'utilité de produire des fichiers "batch"...

Des fichiers .txt seraient plus avantageux.

ric

Si je générè le fichier texte au format xlUnicodeText avec l'extension .bat (fichier de commande windows) ça fonctionnera de la même manière qu'un fichier DOS ?

Bonjour,

Du texte, c'est du texte. Mais à quoi s'en servira-t-on ... selon que ce soit un fichier .txt, .csv, .bat, cmd, .log, htm, html, etc. etc. ... chacun ayant son utilité dans ce beau monde du numérique.

ric

Il me m'est impossible d'accéder au fichier généré pour vérifier le contenu...

Je ne sais pas du tout quoi faire, même en choisissant le type du format texte (xlTextunicode).

J'ai besoin d'aide svp !

Bonjour,

...

Il me m'est impossible d'accéder au fichier généré pour vérifier le contenu ...

Si tu génères un "batch file" (.bat) ... parce que c'est un fichier à extension .bat, Windows tente d'exécuter les commandes incluses.

Donc Windows ouvre le fichier dans une fenêtre "DOS" ou " SED" en français, exécute les commandes et ferme le fichier.

Si les commandes sont reconnues, elles s'exécutent. Sinon, à chaque ligne, il donne un message " le nom de la commande qu'il essaie d'exécuter " n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes. ... puis ferme le fichier ... ça peut se passer en une fraction de seconde.

Tant que tu n'expliqueras pas bien le but à atteindre avec le fichier que tu tentes de générer, il est bien difficile de bien t'aider.

A+

ric

Mais même en donnant le nom de toto.txt, je ne peux pas visualiser le contenu.

Je veux simplement enregistrer ma feuille 3 de mon classeur Excel dans un fichier texte avec l'extension .BAT. Et j'aimerai que le fichier généré soit dans le même répertoire que mon classeur Excel.

Produire un fichier batch est une fort mauvaise idée si on ne le destine pas à l'exécution des commandes qu'il contient.

Pour tes difficultés d'ouverture, je ne comprends pas comment tu t'y prends ? Je ne les rencontre pas !

Voici mon code VBA :

Private Sub reprise_Click()

Dim pathfile As String

pathfile = ThisWorkbook.path & "\"

Worksheets("Feuil3").SaveAs FileName:=pathfile & "test.txt", _

FileFormat:=xlUnicodeText, CreateBackup:=False

End Sub

Je récupère bien le fichier généré dans le répertoire ou se situe mon classeur Excel, mais je ne peux pas ouvrir ce foutu fichier.

  • En faisant clic droit + modifier sur le fichier généré
  • En ouvrant bloc note + ouvrir sur le fichier généré
  • En glissant le fichier généré dans bloc note

Bonjour,

Pathfile > encore du problème

Private Sub reprise_Click()
Dim Chemin As String  ' Parlons français tant que faire se peut. 8- ))

   Chemin = ThisWorkbook.Path & "\"
   Worksheets("Feuil3").SaveAs Filename:=Chemin & "test.txt", _
                        FileFormat:=xlUnicodeText, CreateBackup:=False
End Sub

ric

même question, même réponse.

Je génère toujours bien mon fichier .txt mais impossible de visualiser le contenu....

Bonjour SpaceX,

* un fichier .bat est un fichier batch (traitement par lots) qui contient plusieurs commandes DOS, et ça permet de les exécuter ;

un fichier .bat est un simple fichier texte qui contient des lignes de texte terminées par CR/LF (= Carriage Return/Line Feed =

Retour chariot/Saut de ligne) ; il y a aussi un code EOF (= End Of File = Fin de fichier) qui est après la dernière ligne.

* un classeur Excel ou une seule feuille de calcul Excel est un fichier Excel dont la structure est complètement différente ;

cette structure est un format de fichier spécial destiné à contenir tout le contenu d'un classeur Excel (feuilles de calcul,

feuilles graphiques, UserForm, code VBA, etc...)

l'un n'a rien à voir avec l'autre, et je ne vois aucune utilité à enregistrer une feuille de calcul Excel en tant que fichier .bat ! par contre, tu peux éventuellement vouloir stocker uniquement les données de la feuille de calcul dans un fichier texte ; pour quelqu'un qui ne pourrait pas ouvrir un fichier Excel, ou pour qu'une autre application puisse importer les données ; mais dans c'cas, ça serait plutôt un fichier .txt ou .csv pas un .bat !

dhany

Bonjour,

Cela doit provenir de ta machine. Cela ne provient pas du code, car il fonctionne bien ici.

Va dans l'Explorateur Windows, dans un dossier quelconque ou sur le Bureau, bouton de droite "Nouveau" > "Document texte" > accepte le nom tel quel ou change-le > double clique sur le fichier > s'ouvre-t-il ??

ric

Rechercher des sujets similaires à "enregistrer feuille format dos"