Mise en page, mettre 2 lignes sur une seul

Bonjour,

je reçois des données depuis une liaison en RS232, et les stock dans un fichier *.txt

J'arrive à l'importer par macro dans excel en utilisant la fonction import de données (pour faire une première mise en forme en important sur plusieurs colonnes), mais j'aurai besoin de modifier encore cette mise en forme pour faciliter ensuite le trie. Il faudrai que je mette tout ce qui est liée à un défaut sur une seule ligne.

Voir le fichier joint.

Je pensais faire une détection sur la colone A, et si détection de C** E** décaller le contenue des cases A à D sur la ligne de dessus E à G.

Les informations arrivant au fil de l'eau dans le fichier txt, je pensais utiliser la fonction actualiser les données du classeur pour faire la mise à jour. (ActiveWorkbook.RefreshAll)

Le problème c'est qu'à chaque actualisation le traitement de mise en forme se refferra.

Le flot de données n'est pas très important, j'estime à 300 défauts par an, avec possibilité par l'utilisateur d'archiver les anciens défauts pour repartir sur un fichier vide.

Merci d'avance pour vos conseils.

24defauts.xls (20.00 Ko)

Bonour Ben01,

Un des codes possibles est celui-ci :

Option Explicit

Sub MefImport()
   Dim LigIn As Long, LigOut As Long, ColIn As Long, ColOut As Long, ShIn As Worksheet, ShOut As Worksheet

   Set ShIn = ThisWorkbook.Worksheets("Avant")
   Set ShOut = ThisWorkbook.Worksheets("Après")

   ' Vidage de la feuille "Après"
   ShOut.Cells.Clear

   ' Boucle sur les lignes importées
   For LigIn = 1 To ShIn.UsedRange.Rows.Count
      Select Case Mid(ShIn.Cells(LigIn, "A").Text, 1, 3)
         Case "EVT"
            LigOut = LigOut + 1
            ColOut = 0
            With ShOut
               ' Traitement ligne EVT
               For ColIn = 1 To ShIn.UsedRange.Columns.Count
                  ColOut = ColOut + 1
                  ShOut.Cells(LigOut, ColOut).Value = ShIn.Cells(LigIn, ColIn).Text
               Next ColIn
               ' Traitement ligne suivante (C??E??)
               LigIn = LigIn + 1
               For ColIn = 1 To ShIn.UsedRange.Columns.Count
                  ColOut = ColOut + 1
                  ShOut.Cells(LigOut, ColOut).Value = ShIn.Cells(LigIn, ColIn).Text
               Next ColIn
            End With
         Case Else
      End Select
   Next LigIn
End Sub

Il y a bien sûr d'autres possibilités (par exemple avec une seule boucle), mais ce code est simple et non optimisé.

A adapter en fonction de tes besoins.

25defauts.zip (11.67 Ko)

A+

Benoît Marchand

[Benead]

Super, Merci beaucoup pour votre réactivité!

Ca fonctionne à merveille!

A+

Ben

Bonjour,

la macro fonctionne bien,

mais il manque la dernière alarme dans la partie "après".

J'ai essayé plusieurs trucs mais ça ne marche pas.

Même en rajoutant des lignes dans la partie importé, il manque sistématiquement la denière alarme.

Merci pour ton futur coup de main.

A+

Bonjour,

Je pense que le problème initial vient de ton fichier d'importation qui met des lignes vides au début de la feuille. "Usedrange" n'aime pas cela (ni les colonnes vides d'ailleurs), j'ai donc modifié le code pour prendre en compte ce point :

Option Explicit

Sub MefImport()
   Dim LigIn As Long, LigOut As Long, ColIn As Long, ColOut As Long, ShIn As Worksheet, ShOut As Worksheet, LigFin As Long

   Set ShIn = ThisWorkbook.Worksheets("Avant")
   Set ShOut = ThisWorkbook.Worksheets("Après")

   ' Vidage de la feuille "Après"
   ShOut.Cells.Clear

   ' Boucle sur les lignes importées
   LigFin = (ShIn.UsedRange.Row - 1 + ShIn.UsedRange.Rows.Count)
   For LigIn = 1 To LigFin
      Select Case Mid(ShIn.Cells(LigIn, "A").Text, 1, 3)
         Case "EVT"
            LigOut = LigOut + 1
            ColOut = 0
            With ShOut
               ' Traitement ligne EVT
               For ColIn = 1 To ShIn.UsedRange.Columns.Count
                  ColOut = ColOut + 1
                  ShOut.Cells(LigOut, ColOut).Value = ShIn.Cells(LigIn, ColIn).Text
               Next ColIn
               ' Traitement ligne suivante (C??E??)
               LigIn = LigIn + 1
               For ColIn = 1 To ShIn.UsedRange.Columns.Count
                  ColOut = ColOut + 1
                  ShOut.Cells(LigOut, ColOut).Value = ShIn.Cells(LigIn, ColIn).Text
               Next ColIn
            End With
         Case Else
      End Select
   Next LigIn
End Sub
11defauts.zip (11.82 Ko)

A+

Benoît Marchand

[Benead]

Merci beaucoup,

je regarde tout ça en début de semaine prochaine...

A+

Rechercher des sujets similaires à "mise page mettre lignes seul"