Macro copier ligne fichier texte

Bonsoir à tous,

Je souhaiterais juste savoir comment faire par macro pour lire et copier une partie d'un fichier txt jusqu'à une ligne dont le numéro est stocké dans une variable et calculé à partir d'une valeur apparaissant à une ligne donnée du fichier texte. Comme c'est pas forcément très clair, je vais mettre le bout de code que j'ai essayé de faire:

Sub Rotation_fichier()

fichierL = Application.GetOpenFilename()

textline = ""

ligne = 1

Open fichierL For Input As #1 ' Ouvre le fichier.

Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.

Line Input #1, textline ' Lit la ligne dans la variable.

If ligne = 4 Then

nC = CInt(textline)

ElseIf ligne = 5 Then

angleC = CDec(textline)

ElseIf ligne = 6 Then

nGamma = CInt(textline)

End If

ligne = ligne + 1

Loop

'Déjà dans cette dernière boucle j'ai du mal à comprendre comment le lien se fait entre la variable "ligne" et la ligne du fichier texte qui doit être lue, mais ça ça marche

anglerotation = InputBox("De combien de degrés voulez-vous tourner le fichier ?", "Angle de rotation", "90")

Nblignesentete = 42 + nC + nGamma

Premierelignedeuxiemepartie = nGamma * ((360 - anglerotation) / angleC) + 42 + 1

'Voilà et là je voudrais juste dire de copier les lignes du fichier texte jusqu'à la ligne juste avant la ligne n°Premierelignedeuxiemepartie et copier ces lignes dans le fichier excel, ça ressemble peut-être à ce que j'ai essayé maladroitement de faire ci-après mais qui génère un message d'erreur:

ligne = 1

textline = ""

Do While ligne < Premierelignedeuxiemepartie

Line Input #1, textline

Sheets(1).Range("A1").Offset(ligne, 0).Value = textline

ligne = ligne + 1

Loop

End Sub

Merci d'avance de votre aide!

Samuel

15reservation-v5.xlsm (119.59 Ko)

Salut le forum

Le mieux est de joindre ton fichier texte.

Car pour l'aide on travaille à l'aveuglette.

Mytå

Bonsoir Myta (oui bon ya pas le petit rond au dessus du a, faut peut-être un clavier tchèque pour le faire ???), le forum,

Ci-joint ce fichier par exemple:

https://www.excel-pratique.com/~files/doc/EVNa9Exemple_ldt_forum.txt

Pour tout t'avouer, il s'agit d'un fichier décrivant la répartition lumineuse dans l'espace produite par un luminaire. Imagine que tu as le luminaire, ouverture pour laisser passer la lumière vers le sol. Un axe z vertical passe par le centre de ce luminaire. Le demi-espace sous le luminaire est balayé par des plans "C" tournant autour de l'axe z (il faut que tu imagines un livre ouvert avec la reliure le long de l'axe z, chaque page est un plan C), et à l'intérieur de chaque plan c tu as les angles gamma formés entre la verticale descendante et la direction considérée, le sommet de chaque angle étant le centre du luminaire. Dans le fichier texte donc, en ligne 4 tu as le nombre de plans C (4), en ligne 5, l'angle entre chacun de ces plans C (90°, ils sont donc bien disposés régulièrement), en ligne 6, le nombre de directions gamma par plan C (91), et en ligne 7, l'angle entre ces directions (1°). Ensuite, des infos qui ne nous intéressent pas puis à partir de la ligne 43, chacun des plans C (0,90,180,270, ça en fait donc 4, normal) puis chacun des angles gamma (0,1,2,3,...,90 ce qui nous fait donc 91). Et ensuite, jusqu'à la fin du fichier, la liste des intensités par C puis gamma (intensité pour C=0° et gamma=0°, puis pour C=0° et gamma=1°,........,puis pour C=0° et gamma=90°, puis pour C=90° et gamma=0°, puis pour C=90° et gamma=1°, etc.)

Ce que je voudrais faire maintenant c'est une macro qui permette de tourner le fichier de l'angle C désiré, qui ici ne pourra être que 90,180 ou 270. Concrètement, si l'on tourne de 90°, les intensités initialement à C=270° se retrouvent à C=0°, les intensités initialement à C=0° se retrouvent à C=90°, etc. Cela revient donc à couper un certain nombre de lignes déterminé par l'angle de rotation désiré à la fin du fichier et à les coller avant la première des intensités de la liste, les lignes avant cette ligne de première intensité ne changeant pas. Voilà, mais pour l'instant je suis bloqué au problème sus-mentionné.

Et tant que je suis là, j'ai un autre problème: ces fichiers texte sont à séparateur décimale sous forme de point, or même si dans les options excel je mets: séparateur décimale = point, la macro excel me génère une incompatibilité de type si je ne change pas le point par une virgule dans le fichier texte.

Voilà je suis pas sûr que ce soit très clair et je n'ai pas trouvé de petit schéma clarifiant mon propos. En espérant néanmoins que ça aidera.

D'avance merci beaucoup !!

Samuel

Re le forum

Samuel, tes fichiers texte on toujours le même format.

4 plans, de 0 à 90 degré par step de 1 degré.

Sinon aurais-tu un autre fichier exemple pour adapter la macro, en automatique.

Je fais l'extraction de la base au complet : Première ébauche

A te relire

Mytå

Salut le forum

Il faut croire que le monsieur est satisfait, il a mis la ficelle en [Résolu]

Un simple Merci, aurait été de mise....................

Mytå

17pb-adresses.xlsm (44.76 Ko)

Re le forum

La macro dynamique, suite à un E-Mail.

Sub Rotation_fichier()
Dim FichierL As String
Dim Colonne As Byte
Dim Ligne As Integer
Dim NbC As Integer
Dim NbGamma As Integer
Dim textline As String
Dim i As Integer
Dim AnglesC As Single

FichierL = Application.GetOpenFilename()

Ligne = 1
Colonne = 2
i = 0
Cells.Clear

Open FichierL For Input As #1 ' Ouvre le fichier.
Cells(1, 1) = FichierL 'Nom du fichier de l'extraction
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, textline ' Lit la ligne dans la variable.

Select Case Ligne
  Case 4
    Cells(Ligne, 1) = "NbreC"
    Cells(Ligne, 2) = textline
    NbC = Val(textline)
  Case 5
    Cells(Ligne, 1) = "Angle"
    Cells(Ligne, 2) = textline
    Cells(Ligne, 2).NumberFormat = "0.0"
    AnglesC = Val(textline)
  Case 6
    Cells(Ligne, 1) = "Gamma"
    Cells(Ligne, 2) = textline
    NbGamma = Val(textline)
  Case 43 To 43 + NbC - 1
    With Cells(9, Ligne - 41)
        .Value = textline
        .NumberFormat = "0.0"
        .HorizontalAlignment = xlCenter
    End With
  Case 43 + NbC To 43 + NbC + NbGamma - 1
    With Cells(Ligne - NbC - 33, 1)
        .Value = textline
        .NumberFormat = "0.0"
        .HorizontalAlignment = xlCenter
    End With
  Case Is > 43 + NbC + NbGamma - 1
    i = i + 1
      If i > NbGamma Then
        i = 1: Colonne = Colonne + 1
      End If
        With Cells(i + 9, Colonne)
          .Value = textline
          .NumberFormat = "0.00"
          .HorizontalAlignment = xlCenter
        End With
  End Select

Ligne = Ligne + 1

Loop

Close #1

End Sub

Mytå

Rechercher des sujets similaires à "macro copier ligne fichier texte"