Si vous utilisez des formules qui donne à vos cellules l'apparence de cellules vides. Les cellules sont malgré tout occupées.
De la sorte elle sont comptabilisées comme tel dans CurrentRegion.
Il faut alors définir votre plage différemment. Je le ferai dans un moment et reviendrai vers vous avec un code modifié.
Cependant j'ai quand même un problème :
Votre macro fait état de données incohérentes avec votre modèle :
For Each Oc In oL.Cells
Select Case Oc.Column
Case 6: Tmp = Tmp & Format(Oc.Value, "dd/mm/yyyy") & "|"
Case 7: Tmp = Tmp & Format(Oc.Value, "hh:mm") & "|"
Case Else: Tmp = Tmp & CStr(Oc.Text) & "|"
End Select
Next
Il faut fournir une fichier cohérents avec le code ! Dans l'immédiat je ne sais pas comment interpréter ces incohérences !
Sur la complexité de votre macro, cela dépend beaucoup du besoin à quoi vous sert cet export en UTF8 ? Je n'avais encore jamais éprouvé cette nécessité !
Et les pipes ? En voilà une drôle d'idée. A quoi cela peut-il bien servir ?
Et pourquoi pas de délimiteur en fin de ligne. Votre cahier des charges est-il réellement aussi contraignant ?