Conversion de fichiers MS Money vers ses équivalents libres (ou non)

Comme beaucoup, j'ai longtemps utilisé l'excellent Wine comme béquille pour continuer à utiliser MS Money sous Linux bien longtemps après avoir (lâchement) abandonné Windows.

Heureusement ;-) , en passant brutalement de Kubuntu 8.04 à Kubuntu 9.04, passant ainsi à Wine 1.1.20, MS Money 2004 ne semble plus marcher sous cette version ainsi que sous toutes les versions 1.x de Wine. Ceci malgré de nombreux essais opérés en suivant les indications trouvées sur winehq.

Comme j'en avais assez de perdre mon temps en essais et bidouilles pour essayer de faire marcher un mouton à 5 pattes (imaginez l'inéptie de devoir installer IE6 pour faire tourner Money ?!?), je me suis donc retroussé les manches pour passer à une alternative libre.

J'ai fait le tour des forums et mon choix s'est porté sur KMyMoney2 sur lequel j'ai testé ce guide mais il peut à mon avis s'appliquer aux Grisbi, GnuCash et autres…

Voici donc des conseils pour convertir vos fichiers MS Money vers leurs équivalents libres. La première version de cette doc se basant sur KMyMoney 0.9.2, des choses devriendront obsolètes. Déjà la version 0.9.3 (non proposée de base dans Kubuntu 9.04) propose un meilleurs import de fichier QIF. Pour pouvoir utiliser une version plus récente (version svn) de KMyMoney que celle proposée par votre distribution, suivez ce lien.

Comme c'est ma première doc complète sur ce site n'hésitez pas à la remanier, l'enrichir, la corriger, etc. Je ne m'en formaliserais pas. A partir de maintenant, je ne me considère pas comme propriétaire/mainteneur de cette doc puisque, de mon côté, je ne pense plus JAMAIS en avoir besoin! ;-)

Skrooge est capable, depuis la version 1.7.4, d'importer directement les fichiers .mny de Microsoft Money. C'est la façon la plus sure et simple pour se passer des Microsoft Money.

La première chose à faire est d'exporter chaque compte, un à un, à partir de MS Money au format QIF avec compatibilité relative (“Loose” QIF exports en anglais).

Profitez-en pour faire un screen shot du solde de tous vos comptes sous MS Money pour vérifier si vous arrivez bien au bon solde au final.

Manuellement

Une fois que vous avez vos fichiers QIF, il va vous falloir faire quelques conversion avant de les importer tel quel dans votre logiciel :

  • convertir l'encodage en UTF8,
  • convertir les dates en "D31.12.2008",
  • convertir les montants en "T1234,56",
  • supprimer les montants en Francs (avant le 1/1/2002).

NOTE IMPORTANTE En fait, certaines conversions fastidieuses peuvent être évitées en créant un "profil d'import QIF", et en y définissant le format de la date, des sommes monétaires, etc. Mais comme je n'ai pas essayé, je laisse mes successeurs mettre à jour cette documentation s'ils ont réussi à tout faire simplement avec ces profils d'import.

Pour convertir l'encodage, a priori de l'ISO 8859-15 : Vous ouvrez dans votre éditeur de texte, vous indiquez si votre éditeur ne l'a pas reconnu que le fichier est en ISO 8859-15, puis vous le sauvez (dans un autre fichier), au format UTF8. Le fichier script suivant permet une conversion par lot des fichiers QIF:

#!/bin/bash
mkdir utf8_files
for f in *.qif; do
  #echo $f
  # Changer iso8859-15 en fonction de l'encodage source
  iconv -f iso8859-15 -t utf8 ${f} -o ./utf8_files/${f}
done

Pour convertir les dates, a priori au format "D31/12'2008" et parfois "D31/12/2008" : Dans votre éditeur de texte préféré (par exemple Kate), vous faite une recherche/remplacement par expression régulière ("Expression rationnelle" sous Kate) sur le motif :

D(\d\d)/(\d\d)'(\d\d\d\d)

puis

D(\d\d)/(\d\d)/(\d\d\d\d)

(Que quelqu'un n'hésite pas à remplacer par une expression régulière qui fait les deux remplacements d'un coup!)

à remplacer par :

D\1.\2.\3

Vous obtiendrez ainsi des dates au format : "D31.12.2008"

Pour convertir les montants, à priori en "T1,234.56" : Commencez par supprimer toutes les virgules du fichier en les remplaçant par rien. Vous allez perdre des virgules de vos commentaires, mais tant pis…

Vous obtiendrez ainsi "T1234.56". Reste à remplacer le "." par une ",".

Encore une fois, on utilise une expression régulière :

T(-)?(\d+).(\d\d)

remplacé par :

T\1\2,\3

J'ai été extrêmement surpris de trouver des valeurs exportées en $!!! Par exemple : $415.22 au lieu de T415.22 Il semblerait (information à vérifier) que les $ sont utilisés lorsque des opérations sont "ventilées" dans Money. En remplaçant les $ par des T, selon le logiciel d'import, il peut apparaître une incohérence entre le total de l'opération et les montants ventilés (c'est le cas notamment avec Homebank qui n'a pas la fonctionnalité "ventilation" et Skrooge qui interprète correctement les $ sans que l'on ait besoin de les remplacer par T).

Pour les remplacer, on utilisera l'expression régulière suivante :

\$(-)?(\d+).(\d\d)

remplacé par :

T\1\2,\3

Dans un compte PEA, j'ai également rencontré des sommes précédées par des "I","Q","O" à la place des "T" On applique le même type de remplacement. ex :

I(-)?(\d+).(\d\d)

I\1\2,\3

(Que quelqu'un n'hésite pas à remplacer par une expression régulière qui fait tous les remplacements d'un coup!)

Supprimer les montants en Francs! : MS Money exporte un compte comprenant des sommes en Francs et en Euros sans faire de distinctions entre les sommes dans le fichier d'export!!! Il vous faut donc supprimer tous les montants en Francs et ne garder que ceux en euros. ATTENTION : Si le passage à l'euro s'est fait officiellement le 1/1/2002, vous aurez surement des opérations en Euro avant (des virements par exemple) et des opérations en Franc après (des chèques par exemple). Il vous faut donc connaître le solde du compte au moment du passage à l'Euro. Ce solde vous servira de solde du compte à sa création dans le nouveau logiciel.

Script automatique

Voici un petit script perl qui permet d'automatiser toutes ces manipulations. Il suffit d'exécuter ce script en passant en paramètre le répertoire où se trouvent les fichiers qif à convertir. Le script recherche les fichiers .qif et .QIF dans ce répertoire et effectue la conversion en créant les fichiers dans un sous répertoire output.

Syntaxe : <nom_du_script>.pl -rep <nom_du_repertoire>

Remarque : testé sous Ubuntu 12.04 à partir de fichiers exportés depuis Money 99.

#!/usr/bin/perl
# Automatisation du billet de zFlorent
# disponible sur >doc.ubuntu-fr.org/money
 
use strict;
use Getopt::Long;
 
# code de couleur pour printf
my $ROUGE="\033[0;31;1m";
my $VERT="\033[0;32;1m";
my $JAUNE="\033[0;33;1m";
my $BLEU="\033[0;34;1m";
my $VIOLET="\033[0;35;1m";
my $CYAN="\033[0;36;1m";
my $BLEUJAUNE="\033[0;33;44m";
my $DEFAUT="\033[0m";
 
my $DOS2UNIX = "/usr/bin/perl -i -pe 's/\\r\\n/\\n/g' ";
my $BINDIR;
my $PRGNAME;
my $EXT;
 
my $rep;
my $opt_h;
my $destdir;
 
GetOptions( "rep=s" => \$rep,
			"h" => \$opt_h);
($BINDIR,$PRGNAME,$EXT) = ($0 =~ /^(.+)\/(.+?)(\..*){0,1}$/);
 
sub syntaxe {
	printf "\n${ROUGE}syntaxe : $PRGNAME$EXT -rep=<repertoire>|-h]$DEFAUT\n\n";
	printf "\t$CYAN-icc=<repertoire> : ${DEFAUT}Indique le repertoire avec les fichiers a convertir\n";
	printf "\t$CYAN-h                : ${DEFAUT}Affiche ce message\n";
	printf "$DEFAUT\n";
	exit 1;
}
 
sub erreur {
	printf "\n\n$ROUGE\t>>> $_[0]$DEFAUT\n\n";
	exit 1;
}
 
sub traitement {
	my $nomfichier=$_[0];
	my $tmpfile="/tmp/file1.qif";
	my $outputfile="$destdir/$nomfichier";
 
	unlink $tmpfile;
	system("iconv -f iso8859-15 -t utf8 $rep/$nomfichier -o $tmpfile");
	system("$DOS2UNIX $tmpfile");
	open (IN,$tmpfile) or &erreur("Ouverture fichier $tmpfile impossible : $!");
	open (OUT,">$outputfile") or &erreur("Ouverture fichier $outputfile impossible : $!");
	my $nbligne;
	while (my $ligne = <IN>) {
		$nbligne = $nbligne + 1;
		chomp $ligne;
		if ($ligne =~ /^D(\d{1,2})\/(\d{1,2})('|\/)(\d{1,4})\s*$/) { # convertir les dates
			$ligne="D$1.$2.$4";
		} elsif ($ligne =~ /^(T|\$|I|Q|O)(.+)$/) { # convertir les montants
			my $tmp=$2;
			# suppression , et remplacer . par ,
			$tmp =~ tr/,//d;
			if ($tmp =~ /^(-{0,1}\d+)\.*(\d*)$/) {
				$ligne="T$1,$2";
			} else {
				&erreur("Montant incoherent fichier $nomfichier ligne $nbligne : $ligne");
			}
		}
		print OUT "$ligne\n";
	}
	close IN;
	close OUT;
	unlink $tmpfile;
}
 
######
# Main
######
 
if (! defined $rep) {
	&syntaxe;
}
if (! -d $rep) {
	&erreur("Repertoire $rep inexistant");
}
$destdir="$rep/output";
if (! -d $destdir) {
	mkdir $destdir;
}
opendir(DIR,$rep) || &erreur("Erreur ouverture repertoire $rep");
my @liste_fichier=readdir(DIR);
closedir(DIR);
foreach (@liste_fichier) {
	if ($_ =~ /^.+\.(qif|QIF)$/) {
		&traitement($_);
	}
}

Vous n'avez plus maintenant qu'à importer chaque compte un à un dans le logiciel que vous avez choisi.

Sous KMyMoney2, pensez bien à cliquer sur "Créer automatiquement les tiers manquants". C'est bien dommage qu'il n'existe pas l'équivalent pour les catégories, ça éviterait qu'il nous prompte pour recréer toutes les catégories et sous catégories! Bon, heureusement, c'est rapide, il n'y a qu'à cliquer sur deux boutons. Mais quand même…

Vous aurez probablement à supprimer des opérations en double. En effet, les virement entre comptes ont tendance à être exportés dans les deux fichiers QIF et à donc apparaître dans les deux comptes nouvellement créés. Mais il est en général facile de repérer ces opérations en doublon et de les supprimer.

80% de mes comptes sont équilibrés après avoir passés en revue rapidement les doublons. Il ne me reste qu'à checker un peu plus en profondeur un dernier compte. Et je serais enfin LIBRE!!!!! ;-)

Après mes premiers pas sous KMyMoney, quelques remarques pour ceux qui hésitent à franchir le pas. Certains de mes comptes n'étaient pas équilibrés à cause d'opérations en Francs que je n'avais pas filtrées (voir ma remarque ci dessus). J'ai eu quelques opérations qui ont mystérieusement sautées. Un peu fastidieux à retrouver pour rééquilibrer. Ensuite, dans l'utilisation, on constate des améliorations par rapport à MS Money 2004. Par exemple "l'auto completion" dans les catégories ET sous catégories, et dans les comptes pour les virements. C'est très efficace. L'équilibrage des comptes est aussi très agréable à utiliser : Il vous propose automatiquement la bonne somme (solde du compte dans le logiciel à la date du relevé) comme solde final. Ces petits détails qui vous font gagner du temps. ;-)

  • money.txt
  • Dernière modification: Le 11/09/2022, 11:27
  • par moths-art