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.
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 SubIl 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.
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
A+
Benoît Marchand
[Benead]
Merci beaucoup,
je regarde tout ça en début de semaine prochaine...
A+