J
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
Bonjour,
Un petit soucis: j'ai des fichiers .univ qui sont des résultats d'essais, écrits comme un fichier .txt, avec des tas de chiffres séparés par des espaces.
J'aimerais créer un fichier excel qui me "range" ces données, une valaur dans chaque cellule.
J'essaie de trouver des explications sur VBA, mais j'y comprends que couic. A la base je suis ingé en mécanique, très mateux mais j'ai jamais été fichu de taper ou de comprendre un prodramme il faut dire...
Quelqu'un connait il une vraie initiation à VBA (Tout ce que je trouve, au bout de 4 lignes je suis paumé...).
merci
Public Sub TestImportUnv()
Dim fichierUnv As Object, ligneCourante As String, capteurCourant As String[B][COLOR=Red], fichiersUnv As Variant, iFichier As Integer[/COLOR][/B]
Dim frequence As Double, incrementation As Double, compteurLigneEcriture As Integer, compteurLigneLecture As Integer, compteurIncrementation As Integer, tabStr() As String
compteurLigneEcriture = 1
[COLOR=Red][B]'récupérer les fichiers à importer (multi-sélection possible avec la touche Ctrl)
fichiersUnv = Application.GetOpenFilename("Fichiers .unv,*.unv", , "Fichiers à importer :", , True)
'si la fenêtre de sélection a été fermée sans de fichiers sélectionnées, quitter la macro
If VarType(fichiersUnv) = vbBoolean Then Exit Sub
'boucler sur les fichiers sélectionnés
For iFichier = LBound(fichiersUnv) To UBound(fichiersUnv)[/B][/COLOR]
'ouvrir le fichier courant
Set fichierUnv = CreateObject("Scripting.FileSystemObject").OpenTextFile([COLOR=Red][B]fichiersUnv(iFichier)[/B][/COLOR], 1)
'Tant qu'on est pas à la fin du fichier
While Not fichierUnv.AtEndOfStream
'aller jusqu'à la prochaine ligne commançant par "frequency_spectr (peak_amplitude) for "
While (ligneCourante Like "frequency_spectr (peak_amplitude) for *" = False) And (Not fichierUnv.AtEndOfStream)
ligneCourante = fichierUnv.ReadLine
Wend
'on va récupérer le capteur analysé (les 2 caractères après "frequency_spectr (peak_amplitude) for ")
capteurCourant = Left(Replace(ligneCourante, "frequency_spectr (peak_amplitude) for ", ""), 2)
'sauter 5 ligne (pour récupérer la fréquence et l'incrémentation
compteurLigneLecture = 0
While (Not fichierUnv.AtEndOfStream) And (compteurLigneLecture <= 5)
ligneCourante = fichierUnv.ReadLine
compteurLigneLecture = compteurLigneLecture + 1
Wend
'récupérer les diférentes valeurs de la ligne dans un tableau
tabStr = Split(NettoyerEspaces(ligneCourante), " ")
'récupérer la fréquence et l'incrémentation
frequence = CDbl(Evaluate(tabStr(3)))
incrementation = CDbl(Evaluate(tabStr(4)))
'sauter les 4 lignes suivantes
compteurLigneLecture = 0
While (Not fichierUnv.AtEndOfStream) And (compteurLigneLecture < 4)
ligneCourante = fichierUnv.ReadLine
compteurLigneLecture = compteurLigneLecture + 1
Wend
'boucler sur les 8 lignes contenant les valeurs
compteurLigneLecture = 0: compteurIncrementation = 0
While (Not fichierUnv.AtEndOfStream) And (compteurLigneLecture < 8)
compteurLigneLecture = compteurLigneLecture + 1
ligneCourante = fichierUnv.ReadLine
'récupérer les diférentes valeurs de la ligne dans un tableau
tabStr = Split(NettoyerEspaces(ligneCourante), " ")
'écrire les diférentes valeurs
'premier terme de la ligne
compteurLigneEcriture = compteurLigneEcriture + 1
Range("A" & compteurLigneEcriture).Value = capteurCourant
Range("B" & compteurLigneEcriture).Value = frequence + (compteurIncrementation * incrementation)
Range("C" & compteurLigneEcriture).Value = tabStr(0)
Range("D" & compteurLigneEcriture).Value = tabStr(1)
compteurIncrementation = compteurIncrementation + 1
'deuxième terme de la ligne
compteurLigneEcriture = compteurLigneEcriture + 1
Range("A" & compteurLigneEcriture).Value = capteurCourant
Range("B" & compteurLigneEcriture).Value = frequence + (compteurIncrementation * incrementation)
Range("C" & compteurLigneEcriture).Value = tabStr(2)
Range("D" & compteurLigneEcriture).Value = tabStr(3)
compteurIncrementation = compteurIncrementation + 1
'troisième terme de la ligne
compteurLigneEcriture = compteurLigneEcriture + 1
Range("A" & compteurLigneEcriture).Value = capteurCourant
Range("B" & compteurLigneEcriture).Value = frequence + (compteurIncrementation * incrementation)
Range("C" & compteurLigneEcriture).Value = tabStr(4)
Range("D" & compteurLigneEcriture).Value = tabStr(5)
compteurIncrementation = compteurIncrementation + 1
Wend
Wend
'fermer le fichier .unv
fichierUnv.Close
[COLOR=Red][B]Next iFichier[/B][/COLOR]
Set fichierUnv = Nothing
End Sub
'efface les multiples espaces dans une chaine de caractère
Private Function NettoyerEspaces(texte As String) As String
While InStr(texte, " ")
texte = Replace(texte, " ", " ")
Wend
If Right(texte, 1) = " " Then texte = Left(texte, Len(texte) - 1)
If Left(texte, 1) = " " Then texte = Right(texte, Len(texte) - 1)
NettoyerEspaces = texte
End Function
Public Sub TestImportUnv()
Dim fichierUnv As Object, ligneCourante As String, capteurCourant As String, fichiersUnv As Variant, iFichier As Integer, compteurColonne As Integer
Dim frequence As Double, incrementation As Double, compteurLigneEcriture As Integer, compteurLigneLecture As Integer, compteurIncrementation As Integer, tabStr() As String
compteurLigneEcriture = 1
compteurColonne = 0
'récupérer les fichiers à importer (multi-sélection possible avec la touche Ctrl)
fichiersUnv = Application.GetOpenFilename("Fichiers .unv,*.unv", , "Fichiers à importer :", , True)
'si la fenêtre de sélection a été fermée sans de fichiers sélectionnées, quitter la macro
If VarType(fichiersUnv) = vbBoolean Then Exit Sub
'boucler sur les fichiers sélectionnés
For iFichier = LBound(fichiersUnv) To UBound(fichiersUnv)
'ouvrir le fichier courant
Set fichierUnv = CreateObject("Scripting.FileSystemObject").OpenTextFile(fichiersUnv(iFichier), 1)
'Tant qu'on est pas à la fin du fichier
While Not fichierUnv.AtEndOfStream
'aller jusqu'à la prochaine ligne commançant par "frequency_spectr (peak_amplitude) for "
While (ligneCourante Like "frequency_spectr (peak_amplitude) for *" = False) And (Not fichierUnv.AtEndOfStream)
ligneCourante = fichierUnv.ReadLine
Wend
'on va récupérer le capteur analysé (les 2 caractères après "frequency_spectr (peak_amplitude) for ")
capteurCourant = Left(Replace(ligneCourante, "frequency_spectr (peak_amplitude) for ", ""), 2)
'sauter 5 ligne (pour récupérer la fréquence et l'incrémentation
compteurLigneLecture = 0
While (Not fichierUnv.AtEndOfStream) And (compteurLigneLecture <= 5)
ligneCourante = fichierUnv.ReadLine
compteurLigneLecture = compteurLigneLecture + 1
Wend
'récupérer les diférentes valeurs de la ligne dans un tableau
tabStr = Split(NettoyerEspaces(ligneCourante), " ")
'récupérer la fréquence et l'incrémentation
frequence = CDbl(Evaluate(tabStr(3)))
incrementation = CDbl(Evaluate(tabStr(4)))
'sauter les 4 lignes suivantes
compteurLigneLecture = 0
While (Not fichierUnv.AtEndOfStream) And (compteurLigneLecture < 4)
ligneCourante = fichierUnv.ReadLine
compteurLigneLecture = compteurLigneLecture + 1
Wend
'boucler sur les 8 lignes contenant les valeurs
compteurLigneLecture = 0: compteurIncrementation = 0
While (Not fichierUnv.AtEndOfStream) And (compteurLigneLecture < 8)
compteurLigneLecture = compteurLigneLecture + 1
ligneCourante = fichierUnv.ReadLine
'récupérer les diférentes valeurs de la ligne dans un tableau
tabStr = Split(NettoyerEspaces(ligneCourante), " ")
'écrire les diférentes valeurs
'premier terme de la ligne
compteurLigneEcriture = compteurLigneEcriture + 1
If compteurLigneEcriture > Rows.Count Then
compteurLigneEcriture = 1
compteurColonne = compteurColonne + 1
End If
Cells(compteurLigneEcriture, compteurColonne * 5 + 1).Value = capteurCourant
Cells(compteurLigneEcriture, compteurColonne * 5 + 2).Value = frequence + (compteurIncrementation * incrementation)
Cells(compteurLigneEcriture, compteurColonne * 5 + 3).Value = tabStr(0)
Cells(compteurLigneEcriture, compteurColonne * 5 + 4).Value = tabStr(1)
compteurIncrementation = compteurIncrementation + 1
'deuxième terme de la ligne
compteurLigneEcriture = compteurLigneEcriture + 1
If compteurLigneEcriture > Rows.Count Then
compteurLigneEcriture = 1
compteurColonne = compteurColonne + 1
End If
Cells(compteurLigneEcriture, compteurColonne * 5 + 1).Value = capteurCourant
Cells(compteurLigneEcriture, compteurColonne * 5 + 2).Value = frequence + (compteurIncrementation * incrementation)
Cells(compteurLigneEcriture, compteurColonne * 5 + 3).Value = tabStr(2)
Cells(compteurLigneEcriture, compteurColonne * 5 + 4).Value = tabStr(3)
compteurIncrementation = compteurIncrementation + 1
'troisième terme de la ligne
compteurLigneEcriture = compteurLigneEcriture + 1
If compteurLigneEcriture > Rows.Count Then
compteurLigneEcriture = 1
compteurColonne = compteurColonne + 1
End If
Cells(compteurLigneEcriture, compteurColonne * 5 + 1).Value = capteurCourant
Cells(compteurLigneEcriture, compteurColonne * 5 + 2).Value = frequence + (compteurIncrementation * incrementation)
Cells(compteurLigneEcriture, compteurColonne * 5 + 3).Value = tabStr(4)
Cells(compteurLigneEcriture, compteurColonne * 5 + 4).Value = tabStr(5)
compteurIncrementation = compteurIncrementation + 1
Wend
Wend
'fermer le fichier .unv
fichierUnv.Close
Next iFichier
Set fichierUnv = Nothing
End Sub
'efface les multiples espaces dans une chaine de caractère
Private Function NettoyerEspaces(texte As String) As String
While InStr(texte, " ")
texte = Replace(texte, " ", " ")
Wend
If Right(texte, 1) = " " Then texte = Left(texte, Len(texte) - 1)
If Left(texte, 1) = " " Then texte = Right(texte, Len(texte) - 1)
NettoyerEspaces = texte
End Function
re,Aucun changement malheureusement.
je t'envoie le fichier univ complet par mail si tu veux
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?