Bonjour le Forum,

J'utilise Excel pour vérifier et corriger mes fichiers de généalogie à la norme GEDCOM (.ged)
Un fichier Gedcom est un simple fichier texte monocolonne au format UTF8 avec BOM.
Jusqu'à présent, pour ouvrir et enregistrer le fichier, j'utilisais ADODB.Steam qui fonctionne très bien.

Avec le temps mon fichier a pris de l'ampleur (150 000 lignes) et cette méthode s'avère lente, 1 minute pour ouvrir et 4 à 5 minutes pour enregistrer.
Pour ouvrir, OpenText est bien plus rapide et fonctionne parfaitement,
je cherche une méthode pour enregistrer
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
 
Sub Gedcom()
 
Dim wbkGed As Excel.Workbook
  ' Ouverture d'un fichier Gedcom
  Application.Workbooks.OpenText _
      Filename:=nomCompletFichier, _
      Origin:=65001, _
      DataType:=xlDelimited, _
      TextQualifier:=xlNone, _
      FieldInfo:=Array(1, 2)
  Set wbkGed = Application.ActiveWorkbook
 
  ' Commandes d'enregistrements qui ne conviennent pas
  wbkGed.Save
  ' et
  wbkGed.SaveAs _
      Filename:=ged.FullName, _
      FileFormat:=xlCSVUTF8
  ' et
  wbkGed.SaveAs _
      Filename:=ged.FullName, _
      FileFormat:=xlCSVUTF8, _
      Local:=True
 
  ' Enregistrement fonctionnel (mais lent)
Dim fUtf8avecBOM As ADODB.Stream
Dim g As Variant
Dim txt As String
Dim n°L As Long
 
  Set fUtf8avecBOM = New Stream
  fUtf8avecBOM.Charset = "utf-8"
  fUtf8avecBOM.Mode = adModeReadWrite
  fUtf8avecBOM.Type = adTypeText
  fUtf8avecBOM.Open
  g = wbkGed.Worksheets(1).Range("A1").CurrentRegion.Columns(1).Value
  txt = ""
  For n°L = 1 To UBound(g)
    txt = txt & g(n°L, 1) & vbCrLf
  Next n°L
  fUtf8avecBOM.WriteText txt
  fUtf8avecBOM.Flush
  fUtf8avecBOM.SaveToFile nomCompletFichier, adSaveCreateOverWrite
  fUtf8avecBOM.Close
  Set fUtf8avecBOM = Nothing
 
End Sub
Ce qui génére la lenteur c'est la boucle For Next, mais avec Join() ce n'est pas plus rapide.

Que ce soit avec Save ou SaveAs, Excel ajoute des doubles côtes sur certaines lignes de texte, celles qui contiennent des , ou des " en anglais ou des ; en local (ce qui logique pour du CSV multicolonne).
C'est incompatible avec la norme GEDCOM.

Si quelqu'un à une solution ....

Cordialement

Patrice