VBA - Enregistrer sous spécifique

Nico -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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


    0
    1. Nico
       
      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.
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question