VBA - Enregistrer sous spécifique

[Fermé]
Signaler
-
Messages postés
7526
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 septembre 2021
-
Bonjour,

je vous expose mon problème:
Dans un fichier excel avec macro, je transforme un tableau pour l'écrire dans un fichier texte ligne par ligne:


'Ecrit dans le fichier txt
Do While NoLigne <= DerniereLigne
Open Chemin For Append As #NoLigne
Tableau(NoLigne) = Replace(Tableau(NoLigne), vbCrLf, "")
Tableau(NoLigne) = Replace(Tableau(NoLigne), vbCr, "")
Tableau(NoLigne) = Replace(Tableau(NoLigne), vbLf, "")
Print #NoLigne, Tableau(NoLigne)
Close
NoLigne = NoLigne + 1
Loop


Aujourd'hui je dois modifier cela pour que la personne qui clique sur le bouton qui provoque ce morceau de code, puisse effectuer un "enregistrer sous".

Grosso Modo, il clique sur le bouton, une fenêtre pop avec la sélection du chemin et le nom du fichier, la personne choisis le dossier dans lequel elle veux enregistrer le fichier ainsi que son nom (/!\ type .txt fixé /!\), elle clique sur OK, je récupère le chemin d'enregistrement qu'elle à choisis (répertoire+nom de fichier), le remplis ma variable "Chemin" avec et j'exécute mon code ci-dessus.

Je précise que je suis sur ce problème depuis presque 2h et que je sèche, je ne trouve pas ce que je veux sur le forum ni sur internet, peut être que je cherche mal ou que ma méthode n'est pas bonne...

Merci d'avance de votre aide dans tout les cas.

5 réponses

Messages postés
7526
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 septembre 2021
654
Bonjour,

Comme ceci:

Dim chemin As Variant
Dim NoLigne, DerniereLigne, Tableau
chemin = Application.GetOpenFilename("Fichiers texte (*.txt), *.txt")
    If VarType(chemin) = vbBoolean Then
        MsgBox "Opération annulée"
    Else
  'Ecrit dans le fichier txt
    Do While NoLigne <= DerniereLigne
        Open chemin For Append As #NoLigne
        Tableau(NoLigne) = Replace(Tableau(NoLigne), vbCrLf, "")
        Tableau(NoLigne) = Replace(Tableau(NoLigne), vbCr, "")
        Tableau(NoLigne) = Replace(Tableau(NoLigne), vbLf, "")
        Print #NoLigne, Tableau(NoLigne)
        Close
        NoLigne = NoLigne + 1
    Loop
     End If



Bonjour cs_Le Pivert,

Tout d'abord merci de votre réponse.
Cependant ce n'est pas ce que je recherche, dans votre code vous faites ouvrir une fenêtre qui me demande de sélectionner un fichier à ouvrir or ce que je recherche est de faire un enregistrer sous.

Avez-vous une solution?
Merci d'avance.
Messages postés
24175
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
10 septembre 2021
6 881
Bonjour,

Ce qui est urgent c'est que tu regardes l'aide sur Open avant de l'utiliser.
Parce que
    Do While NoLigne <= DerniereLigne
        Open Chemin For Append As #NoLigne

c'est du grand n'importe quoi qui fait peur...

On n'ouvre un fichier qu'UNE FOIS, et avec son #filenum fourni par windows
Là tu en ouvres un par ligne (que tu ne refermes sans doute pas d'ailleurs...), avec en plus le risque d'aller pourrir les écritures en cours des autres processus.

Sinon pour ta question soit tu ouvres 2 fichiers (1 en lecture, l'autre en écriture), soit l'original est destiné à être supprimé, auquel cas tu travailles dessus et te contentes de le renommer à la fin.
eric
Messages postés
10365
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 septembre 2021
1 193
Bonjour,
Juste au passage, pour enregistrer sous….. essayer ce code :
Sub test()
Dim fichier As String
On Error Resume Next
fichier = Application.GetSaveAsFilename( _
fileFilter:="Excel Files (*.xls), *.xls")
If fichier <> False Then ThisWorkbook.SaveAs fichier
End Sub
Note, à adapter dans votre procédure… !


Salutations.
Le Pingou
Messages postés
7526
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 septembre 2021
654
Un petit peu de lecture pour avancer en VBA:

http://www.info-3000.com/vbvba/fichiers/#FichierTexte