Vous voyez bien sur la routine que la pile est très bien gérée.
De toutes façon j'ai réussi à faire ma routine d'une autre manière, donc la résolution de ce bug n'est plus importante pour moi.
Mais ça reste intéressant, donc cherchons l'erreur 
 
***************************************
(la nouvelle fonction pour les curieux:; *****************************************************************
; ***              Récupération d'un fichier  :))               ***
; *****************************************************************
; *** Nécessite 2 paramètres :
; *** a5 = pointeur sur le nom du folder où se situait le fichier
; *** a6 = pointeur sur le nom du fichier en VAT virtuelle
; *****************************************************************
recuperation:
	movem.l		d0-a6,-(a7)			; on sauve les registres
	lea		(a5),a0				; a0 pointe sur le nom du folder où était la var
	bsr		Chercher_Folder			; teste l'existence du folder qui contenait le fichier
	tst.w		d7				; déjà là ?
	bne.s		ContinuerRecup			; alors on continue
	jsr		filelib::createfolder		; sinon on le recrée
	bsr		Chercher_Folder			; on va chercher le handle de ce folder
ContinuerRecup:
	move.w		d7,d3				; d3.w = handle du folder de l'ancienne variable
	lea		Folder_Tempo(pc),a0		; a0 pointe sur le nom du dossier temporaire dans lequel la variable va être récupérée
	NouveauFichier	(a0),(a6),a4			; on re-crée la variable invisible
	move.w		12(a4),d2			; d2.w = handle du nouveau fichier
	jsr		filelib::hdltoindex		; recherche de son index dans le dossier
	lsl.w		#2,d2				; d2.w = adresse relative du handle de la nouvelle var
        move.l		doorsos::Heap,a1		; a1 pointe sur la table des handles
	move.l		12(a6),0(a1,d2.w)		; au handle du nouveau fichier correspond l'adresse de l'ancien
	lea		Folder_Tempo(pc),a0		; a0 pointe sur le nom du dossier temporaire dans lequel la variable a été récupérée
	bsr		Chercher_Folder			; recherche du handle du folder temporaire
	move.w		d7,d0				; d0.w = handle du folder temporaire
	move.w		d3,d2				; d2.w = handle du folder de l'ancienne variable
	jsr		filelib::move			; déplacement du fichier restauré dans son folder d'origine
	move.w		d0,d2				; d2.w = handle du folder temporaire
	jsr		filelib::hdltoindex		; recherche de l'index de ce folder dans la FAT
	jsr		filelib::delete			; effacement du dossier temporaire
	lea		(a5),a0				; a0 pointe sur le nom du folder de la var restaurée
	lea		(a6),a1				; a1 pointe sur le nom de la var elle-même
	bsr		Tester_Exist			; recherche de l'adresse de son entrée en VAT
	lea		(a6),a4				; a4 pointe sur l'entrée en VAT de la variable restaurée
	move.w		Nombre_de_Recups(pc),d0		; d0.w = nombre de fichiers récupérés jusqu'ici
	lsl.w		#2,d0				; d0.w = adresse relative des coordonnées à ajouter
	lea		Liste_Recups(pc),a6		; a6 pointe sur la liste des vars récupérées
	move.l		a4,0(a6,d0.w)			; écriture de l'adresse de l'entrée en VAT
	move.w		Nombre_de_Recups(pc),d0		; d0.w = nombre de fichiers récupérés jusqu'ici
	beq.s		FinRecup			; aucun ? Alors on se barre
	subq.w		#1,d0				; -1 pour... pfff j'en ai marre
LoopCorrectionAE:
	move.l		(a6)+,d1			; d1.l = adresse de l'entrée en VAT d'un des fichiers déjà récupérés
	cmp.l		a4,d1				; on la compare avec celle du fichier qui vient d'être restauré
	bcc.s		CorrigerAddEntry		; si celui-ci est situé devant, il faut corriger l'AdEeVAT du fichier déjà récupéré
	dbf		d0,LoopCorrectionAE		; passage au fichier récupéré suivant
	bra.s		FinRecup			; correction terminée :)
CorrigerAddEntry:
	add.l		#14,-4(a6)			; correction de l'adresse de l'entrée en VAT d'un fichier déjà récupéré
	dbf		d0,LoopCorrectionAE		; passage au fichier récupéré suivant
FinRecup:
	addq.w		#1,Nombre_de_Recups		; mise à jour du nombre de fichiers récupérés
	movem.l		(a7)+,d0-a6			; on restaure les registres
	rts						; voilà c'est fini :)
; **************************)