IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment se balader dans un fichier texte via VBA ? [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut Comment se balader dans un fichier texte via VBA ?
    Bonjour à tous,

    voilà je dois me balader dans un fichier texte rempli par un utilisateur lambda.
    Ce fichier peut contenir des informations sur 1 ou 2 lignes, cela dépend de l'utilisateur et de son humeur du jour

    Exemple:
    VALV PT=40 DY=0.11 EW=2
    PB=45 MA=0.0021 AL=/VALV_1/
    VALV PT=80 PB=45 DY=0.11 EW=2 MA=0.0021 AL=/VALV_2/

    Dans cet exemple, un premier élément VALV_1 a été définit sur 2 lignes et un deuxième élément VALV_2 a été définit sur 1 seule ligne.

    J'ai déjà un code qui fonctionne via VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    'lecture sur fichier texte
    Open chemin For Input Access Read As #1
    Do While Not EOF(1)    ' Effectue la boucle jusqu'à la fin du fichier.
        Line Input #1, ligne   ' Lit une ligne
     
                    'recuperation type VALV
                If (Left(ligne, 4) = "VALV") Then
     
                     'recuperation nom vanne
                    T = 1
                    Do While (Mid(ligne, T, 3)) <> "AL="
                    T = T + 1
                        If T > 80 Then
                            Exit Do
                        End If
                    Loop
                    Sheets("file").Cells(ay, 2) = Mid(ligne, T + 3, 12)
     
                    'recuperation noeud
                    T = 1
                    Do While (Mid(ligne, T, 2)) <> "PT"
                    T = T + 1
                        If T > 80 Then
                            Exit Do
                        End If
                    Loop
                    Sheets("file").Cells(ay, 3) = Mid(ligne, T + 3, 5)
     
                    'recuperation masse vanne
                    ma = 1
                    Do While (Mid(ligne, ma, 3)) <> "MA="
                    ma = ma + 1
                        If ma > 80 Then
                            Exit Do
                        End If
                    Loop
                    Sheets("file").Cells(ay, 4) = Mid(ligne, ma + 3, 6)
                    'convertion tonnes en kg
                    Cells(ay, 4) = CDbl(Cells(ay, 4).Value * 1000)
     
                    'passe à la ligne
                    ay = ay + 1
                  End If
     
    Loop
    Close #1    ' Ferme le fichier.
    Le problème est le suivant : si l'utilisateur n'a pas entré toutes les infos sur 1 seule ligne, mon programme ne fonctionne pas.

    J'aimerai donc trouver un code qui se résumerai à:
    1) chercher une ligne commençant par VALV
    2) enregistrer le numéro de cette ligne (n)
    3) chercher les infos sur la ligne (n)
    4) si je ne trouve pas les infos sur la ligne (n), chercher ces infos sur la ligne (n+1)

    remarque : l'utilisateur ne peut pas définir un type VALV sur plus de 2 lignes.

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Moi je chercherai "VALV" (ce que tu fais) et "/VALV" si trouvé une ligne sinon 2 lignes

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    A ta place, au lieu de passer par un Open For Input, je passerais par un banal Workbooks.Open en prenant pour délimiteur "/".

    Ce code devrait te mettre tous les articles sur une seule ligne.
    N'ayant pas ton fichier, je n'ai pas testé. Considère donc que c'est juste pour donner le principe général et qu'il y aura sans doute du débugage à faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim i as Long
    Workbooks.Open Filename:=chemin, Delimiter:="/"
    For i = cells(Rows.Count,1).End(xlUp).Row to 1 Step -1
       If Cells(i,2) = "" Then
          Cells(i,1) = Cells(i,1) & " " & Cells(i+1,1)
          Cells(i,2) = Cells(i+1,2)
          Rows(i+1).Delete
       End If
    Next i

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Bonjour,

    Moi je chercherai "VALV" (ce que tu fais) et "/VALV" si trouvé une ligne sinon 2 lignes
    Re-bonjour,

    le soucis est que cette astuce ne peut marcher que dans le cadre de cet exemple, or les données entre les "/" ne servent qu'à préciser le nom de l'élément VALV utilisé dans le logiciel...

    Comment je peux le faire chercher dans 2 lignes ?

    Je peux donner un autre exemple:
    VALV PT=40 DY=0.11 EW=2
    PB=45 MA=0.0021 AL=/toto/
    TANG PT=70 DY=0.050 EW=3
    CROS CD=33
    VALV PT=80 DY=0.040 PB=81 EW=2 MA=0.0021 AL=/titi/

    remarque : la 2eme ligne dans l'exemple ci-dessus ne peut commencé qu'à partir du 5eme caractère.

    Avec le programme initial, la macro :
    1) ouvre le fichier texte
    2) explore ligne par ligne
    3) trouve une ligne qui commence par VALV
    4) extrait les infos de cette ligne
    5) passe à la ligne d'après, mais en cherchant un début de ligne = VALV

    VALV définit un type de vanne, PT définit le nœud où se situe la vanne, DY(ou DX ou DZ) donne la longueur de la vanne dans la direction indiquée, MA donne la masse (en tonne) et AL fournit la référence de la vanne.

    Donc dans mon fichier Excel, je me retrouve avec :
    une vanne identifiée au nœud 40, sans masse et sans référence (ce qui est fort regrettable n'est-ce pas?)
    une vanne identifiée au nœud 80, avec toutes les infos dispo.


  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Menhir Voir le message
    A ta place, au lieu de passer par un Open For Input, je passerais par un banal Workbooks.Open en prenant pour délimiteur "/".

    Ce code devrait te mettre tous les articles sur une seule ligne.
    N'ayant pas ton fichier, je n'ai pas testé. Considère donc que c'est juste pour donner le principe général et qu'il y aura sans doute du débugage à faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim i as Long
    Workbooks.Open Filename:=chemin, Delimiter:="/"
    For i = cells(Rows.Count,1).End(xlUp).Row to 1 Step -1
       If Cells(i,2) = "" Then
          Cells(i,1) = Cells(i,1) & " " & Cells(i+1,1)
          Cells(i,2) = Cells(i+1,2)
          Rows(i+1).Delete
       End If
    Next i
    Re-bonjour,

    je ne sais pas si la solution de mettre tout le fichier texte sur une seule et même ligne puisse m'aider...
    Je joins un exemple avec macro + fichier texte.
    Si vous avez des idées

    Résumé-essai.xlsEssai-free.txt

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Tu semblais dire que ton principal problème était que certains articles étaient sur deux lignes.
    Donc, si la solution ne passe pas par la mise de tous les articles sur une seule ligne, je ne comprends plus...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 78
    Par défaut
    il veut peut etre une valv par ligne

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Minise Voir le message
    il veut peut etre une valv par ligne
    C'est exactement ce que génère ma macro.

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Tu semblais dire que ton principal problème était que certains articles étaient sur deux lignes.
    Donc, si la solution ne passe pas par la mise de tous les articles sur une seule ligne, je ne comprends plus...
    Je pense que mon premier exemple a peut être plus embrouillé qu'autre chose...

    Pour pouvoir faire des vérifications sur un fichier de calcul de tuyauterie, j'ai besoin de trier les données entrées par un utilisateur.
    Le logiciel utilisé ne prend en compte que des lignes de codes, il est donc difficile de faire une vérification avec le fichier brut.

    Dans la plupart des cas (tri des supports/tri des données matériaux etc) je n'ai aucun problème de tri car toutes les données sont listées sur une seule ligne.

    Sauf pour les vannes... En effet, l'utilisateur a la liberté de rentrer les informations sur 2 lignes.
    Si j'utilise la macro de Menhir, je vais avoir toutes mes données mélangées et alignées sur 1 seule ligne. Ca aurait été parfait si je n'avais que des données de type VALV... Encore aurait-il fallu que les références des vannes et soient de même longueur (nombre de caractère fixe) et que je retrouve toujours la même structure.

    Le problème reste donc entier et je ne vois pas comment faire pour:
    1) trouver une ligne qui commence par VALV
    2) chercher une info sur cette ligne
    SI je trouve l'info, la lister dans mon fichier excel
    Sinon passer à la ligne N+1 et chercher l'info

    J'ai mis en ligne un exemple plus concret de mon problème.
    On peut voir dans le fichier excel, une fois le bouton "filtrer" activé, que certaines vannes n'ont ni de nom ni de masse.
    Or lorsque l'on regarde dans le fichier texte, ces informations sont bien présentent, mais dans la ligne juste en dessous.

    J'espère avoir été un peu plus clair et je vous remercie pour le temps que vous m'accordez.

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour,

    vu qu'ici c'est le forum des formules de calculs - la prochaine fois poster dans le forum dédié au VBA ! - j'en resterais
    à de la simple logique : si une ligne ne commence pas par VALV, c'est donc la suite de la précédente, non ?!


    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Bonne idée Marc-L

    J'ai essayé la modification suivante dans la macro du fichier excel que j'ai mis dans un de mes précédents posts:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
                    'recuperation type VALV
                If (Left(ligne, 4) = "VALV") Then
     
                    'recuperation noeud
                    T = 1
                    Do While (Mid(ligne, T, 2)) <> "PT"
                    T = T + 1
                        If T > 80 Then
                            Exit Do
                        End If
                    Loop
                    Sheets("file").Cells(ay, 3) = Mid(ligne, T + 3, 5)
     
                     'recuperation nom vanne
                    T = 1
                    Do While (Mid(ligne, T, 3)) <> "AL="
                    T = T + 1
                        If T > 80 Then
                        Line Input #1, ligne   ' Lit une ligne
                        T = 1
                            Do While (Mid(ligne, T, 3)) <> "AL="
                            T = T + 1
                                If T > 80 Then
                                Exit Do
                                End If
                            Loop
                        End If
                    Loop
                    Sheets("file").Cells(ay, 2) = Mid(ligne, T + 3, 15)
     
                    'recuperation masse vanne
                    ma = 1
                    Do While (Mid(ligne, ma, 3)) <> "MA="
                    ma = ma + 1
                        If ma > 80 Then
                        Exit Do
                        End If
                    Loop
                    Sheets("file").Cells(ay, 4) = Mid(ligne, ma + 3, 6)
                    'convertion tonnes en kg
                    Cells(ay, 4) = CDbl(Cells(ay, 4).Value * 1000)
     
                    'passe à la ligne
                    ay = ay + 1
                  End If
    Lorsque je cherche sur la ligne "n" et que je ne trouve pas mon info, je passe à la ligne et je cherche à nouveau.
    Exemple de problème sur la vanne présente au nœud 40. Je passe à la ligne et je ne peux plus remonter pour chercher la dernière info...

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Si la ligne suivante est la suite de la première, les concaténer avant de procéder à l'extraction !

    En fait, après avoir vérifier la ligne suivante est bien une nouvelle ligne de données, procéder à l'extraction des données …

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Marc-L Voir le message


    Si la ligne suivante est la suite de la première, les concaténer avant de procéder à l'extraction !

    En fait, après avoir vérifier la ligne suivante est bien une nouvelle ligne de données, procéder à l'extraction des données …
    Malheureusement je ne sais pas programmer la partie de la phrase "si la ligne suivante"
    Un petit indice ? Je sens qu'on y est presque !

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Apparemment la fin d'une ligne VALV soit se terminer par AL= avec un / final.
    Donc, si la ligne commence par VALV mais ne finit pas par un / (voir l'aide VBA de l'opérateur Like),
    lire la ligne suivante et la concaténer à la première (opérateur &) …

  15. #15
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Sub Ranger()
     
    Dim i As Long, j As Integer
    Dim t As Range
    Dim WSS As Worksheet, WSD As Worksheet
     
    Workbooks.Open Filename:=chemin
     
    Set WSS = ActiveSheet
     
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
       If Mid(Cells(i, 1), 3, 1) = "=" Then
          Cells(i - 1, 1) = Cells(i - 1, 1) & " " & Cells(i, 1)
          Rows(i).Delete
       End If
    Next i
     
    Range("A1", Range("A1").End(xlDown).Address).TextToColumns _
       Destination:=Range("A1"), _
       DataType:=xlDelimited, _
       TextQualifier:=xlNone, _
       ConsecutiveDelimiter:=True, _
       Tab:=False, _
       Semicolon:=False, _
       Comma:=False, _
       Space:=True, _
       Other:=True, _
       OtherChar:="=", _
       DecimalSeparator:="."
     
    Set WSD = Worksheets.Add
     
    For i = 1 To WSS.Cells(Rows.Count, 1).End(xlUp).Row
       WSD.Cells(i + 1, 1).Value = WSS.Cells(i, 1).Value
       j = 2
       While WSS.Cells(i, j).Value <> ""
          Set t = WSD.Range("A1", Cells(1, Columns.Count).End(xlToLeft).Address).Find(WSS.Cells(i, j))
          If t Is Nothing Then
             Set t = WSD.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
             Debug.Print t.Address
             t.Value = WSS.Cells(i, j).Value
          End If
          WSD.Cells(i + 1, t.Column).Value = WSS.Cells(i, j + 1).Value
          j = j + 2
       Wend
    Next i
     
    Application.DisplayAlerts = False
    WSS.Delete
    Application.DisplayAlerts = True
     
    End Sub
    Il y a un truc qui me dérange dans tes données : le TANG et le CROS.
    Il n'y aurait pas de lignes autres que les valves dans ce que tu as donné ?

  16. #16
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Marc-L Voir le message


    Apparemment la fin d'une ligne VALV soit se terminer par AL= avec un / final.
    Donc, si la ligne commence par VALV mais ne finit pas par un / (voir l'aide VBA de l'opérateur Like),
    lire la ligne suivante et la concaténer à la première (opérateur &) …
    Bonjour à tous.

    Malheureusement, la fin d'une ligne VALV ne se termine pas toujours avec un / final...
    Par contre je viens de penser que le logiciel reste dans un élément de type VALV tant que la ligne suivante commence par un " "

    La clé est donc certainement dans une code faisant:
    1) trouver ligne qui commence par VALV
    2) enregistrer toute la ligne dans une variable LIGNE type String
    3) passer à la ligne suivante
    -- Si la ligne suivante commence par " ", alors concatener cette ligne et la variable LIGNE
    4) extraire les données voulues de la variable LIGNE

    Vous en pensez quoi ?

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Menhir Voir le message

    Il y a un truc qui me dérange dans tes données : le TANG et le CROS.
    Il n'y aurait pas de lignes autres que les valves dans ce que tu as donné ?
    Bonjour Menhir, effectivement il y a d'autre type d'éléments.
    Exemple :
    CROS définit la section de la tuyauterie aval
    TANG définit un bout de tuyauterie droite ayant certaines caractéristiques.

    Pour le moment je ne cherche qu'à trier les types VALV car ce sont les seuls qui sont définit sur une deux lignes.

    J'ai essayé ta macro, elle a ouvert un fichier Excel et à partir de l'onnglet de départ, crée un autre onglet pour travailler dedans.
    Malheureusement, je ne vois pas les "nouvelles" lignes VALV. N'y aurait-il pas un petit bug dans la dernière boucle for ?

  18. #18
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par groudoudou97440 Voir le message
    Bonjour Menhir, effectivement il y a d'autre type d'éléments.
    Exemple :
    CROS définit la section de la tuyauterie aval
    TANG définit un bout de tuyauterie droite ayant certaines caractéristiques.

    Pour le moment je ne cherche qu'à trier les types VALV car ce sont les seuls qui sont définit sur une deux lignes.
    Si d'autres éléments sont au milieu de tes données, je ne vois pas comment on peut éviter de les traiter.

    Malheureusement, je ne vois pas les "nouvelles" lignes VALV. N'y aurait-il pas un petit bug dans la dernière boucle for ?
    Qu'est-ce que tu entends par "nouvelles" lignes VALV ?
    J'ai mis bout à bout les deux exemple que tu as donnés et ma macro les traite sans problème.

  19. #19
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Ahhhhhh la satisfaction du travail accompli !! Que c'est bon !

    En modifiant légèrement la structure de la macro et en suivant la procédure que j'ai décrite un peu plus tôt ce matin, j'ai réussi à obtenir le résultat voulu !

    Je vous remercie tous pour vos différentes idées

    A bientôt pour de nouvelles aventure.

    PS : je ferais attention à poster dans le bon endroit sur le site la prochaine fois ...

  20. #20
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Si d'autres éléments sont au milieu de tes données, je ne vois pas comment on peut éviter de les traiter.


    Qu'est-ce que tu entends par "nouvelles" lignes VALV ?
    J'ai mis bout à bout les deux exemple que tu as donnés et ma macro les traite sans problème.
    Pour essayer d'expliquer mon problème initial, j'ai mis en ligne 2 fichier (1 xlsm et 1 txt).
    Si tu lance la macro initiale, il y a des résultats incohérents.
    Si tu implante la macro que tu nous a proposé dans le fichier excel que j'ai fourni, il y a des résultats incohérents.

    Par contre je te remercie pour toutes ces lignes que tu as mis à disposition car je n'ai pas encore eu l'occasion de travailler avec cette manière de programmer (je suis novice apprenti sorcier).

    En te souhaitant une bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer un fichier texte via VBA
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/04/2008, 22h01
  2. Réponses: 3
    Dernier message: 01/08/2006, 15h18
  3. [VB.NET]comment écrire/lire dans un fichier text
    Par zouhib dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/05/2006, 17h11
  4. Retour à la ligne dans Zone de texte. Via VBA
    Par GuidoBrasletti dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 11h56
  5. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo