Enregistrer sous nom d'une cellule modifiée en .txt

Bonjour,

Débutante en VBA, j'ai fouillé sur le forum à la recherche d'une solution à mon problème mais je n'ai rien trouvé.

J'ai un fichier excel qui s'appelle "macro export".

Il contient 6 feuilles :

- Feuille 1 : import de données brutes

- feuille 2 à 5 : utilisation des données brutes importées en feuille 1 + copier/coller des données variables notées en feuille6.

- feuille 6: sera seule modifiable par le futur utilisateur puisqu'il la complètera par des données variables (qui sont utilisées dans les autres feuilles)

Le but de la macro est de :

1)importer les données d'un fichier .txt (qui ne sera jamais le même! ici data.txt) et les coller dans "données brutes"

La macro que j'ai trouvé (=macro File_import) me convient. Le problème est à l'étape4!!)

2) sélectionner des cellules dans "données brutes" et les coller dans les feuilles correspondantes(=macro copy_paste) :

  • copier A78:Y94 données brutes et coller en A2 de plate1
  • copier A97:Y113 données brutes et coller en A2 de plate2
  • copier A116:Y132 données brutes et coller en A2 de plate3
  • copier A135:Y151 données brutes et coller en A2 de plate4

3) sélectionner des cellules dans plan de plaque et les coller dans les feuilles correspondantes mais en modifiant le texte: (=Macro plate_name)

  • copier D6 de "plan de plaque" et coller en A1 de plate 1 sous la forme [Plate: " & ActiveCell & "]"
  • copier D8 de "plan de plaque" et coller en A1 de plate 2 sous la forme [Plate: " & ActiveCell & "]"
  • copier D10 de "plan de plaque" et coller en A1 de plate 3 sous la forme [Plate: " & ActiveCell & "]"
  • copier D12 de "plan de plaque" et coller en A1 de plate 4 sous la forme [Plate: " & ActiveCell & "]"

4)Enregistrer chaque feuille (plate1, plate2, plate3, plate4) en .txt dans des fichier séparés d'après les valeurs d'une cellule et dans un dossier spécifique (exemple: C:\Test\)

  • plate1 enregistré sous le nom de D6 de "plan de plaque"
  • plate2 enregistré sous le nom de D8 de "plan de plaque"
  • plate3 enregistré sous le nom de D10 de "plan de plaque"
  • plate4 enregistré sous le nom de D12 de plan de plaque"

Vous trouverez dans le fichier joint la macro que j'ai commencé à écrire mais c'est pas glorieux....

Merci d'avance pour votre aide précieuse!

32data.zip (8.06 Ko)
44macro-export.xlsm (33.90 Ko)

Bonjour Poybi_64

Vous trouverez dans le fichier joint la macro que j'ai commencé à écrire mais c'est pas glorieux....

Franchement, c'est déjà pas mal c'est même plutôt bien

Voici le code en entier modifié et optimisé

Sub File_import()
  Dim FileToOpen As String
  'File import
  FileToOpen = Application _
               .GetOpenFilename("Text Files (*txt.), *.txt")
  With Sheets("Données brutes").QueryTables.Add(Connection:="TEXT;" _
    & FileToOpen, Destination:=Range("A1"))
    .RefreshStyle = xlInsertDeleteCells
    .Refresh BackgroundQuery:=False
    'Text_to_column Macro
    .Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
                            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
                            Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
                            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
                            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), _
                            Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), _
                            Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1)), TrailingMinusNumbers:=True
    .Range("A:A,E:E").ColumnWidth = 7
  End With
End Sub

Sub Copy_Paste()
  With Sheets("Données brutes")
    .Range("A78:Y94").Copy
    Sheets("Plate1").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    .Range("A97:Y113").Copy
    Sheets("Plate2").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    .Range("A116:Y132").Copy
    Sheets("Plate3").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    .Range("A135:Y151").Copy
    Sheets("Plate4").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End With
End Sub

Sub Plate_name()
  Dim Ind As Integer
  ' Plus court
  For Ind = 1 To 4
  ' Plate name
    Sheets("Plate" & Ind).Range("A1").Value = "[Plate: " & Sheets("plan de plaque").Range("D" & 4 + (Ind * 2)) & "]"
  Next Ind
  ' Plate1 name
  'Sheets("Plate1").Range("A1").Value = "[Plate: " & Sheets("plan de plaque").Range("D6") & "]"
  ' Plate2 name
  'Sheets("Plate2").Range("A1").Value = "[Plate: " & Sheets("plan de plaque").Range("D8") & "]"
  ' Plate3 name
  'Sheets("Plate3").Range("A1").Value = "[Plate: " & Sheets("plan de plaque").Range("D10") & "]"
  ' Plate4 name
  'Sheets("Plate4").Range("A1").Value = "[Plate: " & Sheets("plan de plaque").Range("D12") & "]"
End Sub

Sub Enregistrement()
  Dim Ind As Integer, NomFic As String
  ' Créer le répertoire Test si n'existe pas
  On Error Resume Next
  MkDir "C:\Test"
  On Error GoTo 0
  ' Pour chaque Plate
  For Ind = 1 To 4
    ' Créer le nom du fichier
    NomFic = Sheets("plan de plaque").Range("D" & 4 + (Ind * 2)) & ".txt"
    ' Faire une copie de la feuille dans un nouveau classeur
    Sheets("Plate" & Ind).Copy
    ' Sauvegarder
    With ActiveWorkbook
      .SaveAs "C:\Test\" & NomFic, FileFormat:=xlCSVWindows
      .Close SaveChanges:=False
    End With
  Next Ind
End Sub

Sinon le fichier

43macro-export.xlsm (33.22 Ko)

Bonjour BrunoM45,

Merci pour ta réponse. C'est exactement ce que je voulais et tu l'as fait en 1H alors que ça fait 1 semaine que j'essaye...

Maintenant que la macro fonctionne, puis-je abuser de tes compétences et te demander autre chose ?

J'ai joint à nouveau mon fichier macro_export puisque je l'ai modifié.

Il sera utilisé approximativement sous cette forme.

J'ai créé des boutons de commande pour que ce soit le plus simple possible pour l'utilisateur. Je voudrais que toute les macro fonctionnent "en aveugle" pour l'utilisateur et ainsi qu'il reste sur la feuille 1.

-le bouton "import file" ne fonctionne pas depuis la feuille 1 par contre la macro fonctionne très bien quand je suis sur la feuille 2. Pourrais-tu, STP, me dire comment modifier la macro pour que cela fonctionne depuis la feuille 1 ?

Après cela, ma macro (ou ta macro) sera au top!

Merci encore pour ton aide.

19data.zip (8.06 Ko)
31macro-export-2.xlsm (44.90 Ko)

Salut Poybi_64

poybi_64 a écrit :

Merci pour ta réponse. C'est exactement ce que je voulais et tu l'as fait en 1H alors que ça fait 1 semaine que j'essaye...

Normal, j'suis tombé dedans quand j'étais tout petit

poybi_64 a écrit :

Maintenant que la macro fonctionne, puis-je abuser de tes compétences et te demander autre chose ?[.quote]

Heuuu je ne sais pas ...

poybi_64 a écrit :

J'ai joint à nouveau mon fichier macro_export puisque je l'ai modifié.

Il sera utilisé approximativement sous cette forme.

J'ai créé des boutons de commande pour que ce soit le plus simple possible pour l'utilisateur. Je voudrais que toute les macro fonctionnent "en aveugle" pour l'utilisateur et ainsi qu'il reste sur la feuille 1.

-le bouton "import file" ne fonctionne pas depuis la feuille 1 par contre la macro fonctionne très bien quand je suis sur la feuille 2. Pourrais-tu, STP, me dire comment modifier la macro pour que cela fonctionne depuis la feuille 1 ?

VBA est un programmation orientée objet, il faut donc utiliser la syntaxe :

ObjetConteneur.Propriété.Méthode

Pour définir un objet conteneur, 2 méthodes :

Set MonObjet = ObjetConteneur

ou

With ObjetConteneur
  .Propriété.Méthode
End With

Tu n'es pas obligé, bien au contraire, de faire un Select pour effectuer une action

Tu peux directement l'appliquer à l'objetconteneur

Exemple

Range("B5:M5").Select
    Selection.Cut Destination:=Range("B4:M4")

Peut tout à fait s'écrire

Range("B5:M5").Cut Destination:=Range("B4:M4")

Avec définition de l'objetconteneur il faut penser un mettre un "." point devant chaque terme "Range"

Voili, voilà pour les explication et voici ton fichier modifié

A+

48macro-export-2.xlsm (46.63 Ko)

C'est génial merci beaucoup.

J'ai droit à mon fichier modifié et à un cours de VB en même temps!

C'est tout simplement parfait.

Merci encore.

De rien

Au plaisir de pouvoir aider

Rechercher des sujets similaires à "enregistrer nom modifiee txt"