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!
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
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 SubSinon le fichier
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.
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 = ObjetConteneurou
With ObjetConteneur
.Propriété.Méthode
End WithTu 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+
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.