rem: operation -> taux_change = taux_de_change[0]; operation -> frais_change = taux_de_change[1];  if ( operation -> taux_change < 0 )
add: transaction -> taux_change = taux_de_change[0]; transaction -> frais_change = taux_de_change[1];  if ( transaction -> taux_change < 0 )
context: void recuperation_donnees_generales_formulaire ( struct structure_operation *operation ){    gchar **tableau_char;    struct struct_devise *devise;    gint i, j;    struct organisation_formulaire *organisation_formulaire;    /*     on fait le tour du formulaire en ne récupérant que ce qui est nécessaire */    organisation_formulaire = renvoie_organisation_formulaire ();    for ( i=0 ; i < organisation_formulaire -> nb_lignes ; i++ )	for ( j=0 ; j <  organisation_formulaire -> nb_colonnes ; j++ )	{	    GtkWidget *widget;	    widget =  widget_formulaire_par_element ( organisation_formulaire -> tab_remplissage_formulaire[i][j] );	    switch ( organisation_formulaire -> tab_remplissage_formulaire[i][j] )	    {		case TRANSACTION_FORM_DATE:		    sscanf ( gtk_entry_get_text ( GTK_ENTRY ( widget )),			     "%d/%d/%d",			     &operation -> jour,			     &operation -> mois,			     &operation -> annee );		    operation -> date = g_date_new_dmy ( operation -> jour,							 operation -> mois,							 operation -> annee );		    break;		case TRANSACTION_FORM_VALUE_DATE:		    if ( gtk_widget_get_style ( widget ) == style_entree_formulaire[ENCLAIR] )		    {			sscanf ( gtk_entry_get_text ( GTK_ENTRY ( widget )),				 "%d/%d/%d",				 &operation -> jour_bancaire,				 &operation -> mois_bancaire,				 &operation -> annee_bancaire );			operation -> date_bancaire = g_date_new_dmy ( operation -> jour_bancaire,								      operation -> mois_bancaire,								      operation -> annee_bancaire );		    }		    else		    {			operation -> jour_bancaire = 0;			operation -> mois_bancaire = 0;			operation -> annee_bancaire = 0;			operation->date_bancaire = NULL;		    }		    break;		case TRANSACTION_FORM_EXERCICE:		    /* si l'exo est à -1, c'est que c'est sur non affiché */		    /* soit c'est une modif d'opé et on touche pas à l'exo */		    /* soit c'est une nouvelle opé et on met l'exo à 0 */		    if ( GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget ) -> menu_item ),								 "no_exercice" )) == -1 )		    {			if ( !operation -> no_operation )			    operation -> no_exercice = 0;		    }		    else			operation -> no_exercice = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget ) -> menu_item ),											   "no_exercice" ));		    break;		case TRANSACTION_FORM_PARTY:		    if ( gtk_widget_get_style ( GTK_COMBOFIX ( widget ) -> entry ) == style_entree_formulaire[ENCLAIR] )		    {			operation -> tiers = tiers_par_nom ( gtk_combofix_get_text ( GTK_COMBOFIX ( widget )),							     1 ) -> no_tiers;		    }		    else			operation -> tiers = 0;		    break;		case TRANSACTION_FORM_DEBIT:		    if ( gtk_widget_get_style ( widget ) == style_entree_formulaire[ENCLAIR] )			operation -> montant = -calcule_total_entree ( widget );		    break;		case TRANSACTION_FORM_CREDIT:		    if ( gtk_widget_get_style ( widget ) == style_entree_formulaire[ENCLAIR] )			operation -> montant = calcule_total_entree ( widget );		    break;		case TRANSACTION_FORM_BUDGET:		    /* si c'est une opé ventilée, on ne récupère pas l'ib */		    if ( gtk_widget_get_style ( GTK_COMBOFIX ( widget ) -> entry ) == style_entree_formulaire[ENCLAIR]			 &&			 (!verifie_element_formulaire_existe ( TRANSACTION_FORM_BREAKDOWN )			  ||			  !GTK_WIDGET_VISIBLE ( widget_formulaire_par_element (TRANSACTION_FORM_BREAKDOWN) )))		    {			struct struct_imputation *imputation;			tableau_char = g_strsplit ( gtk_combofix_get_text ( GTK_COMBOFIX ( widget )),						    ":",						    2 );			imputation = imputation_par_nom ( tableau_char[0],							  1,							  operation -> montant < 0,							  0 );			if ( imputation )			{			    struct struct_sous_imputation *sous_imputation;			    operation -> imputation = imputation -> no_imputation;			    sous_imputation = sous_imputation_par_nom ( imputation,									tableau_char[1],									1 );			    if ( sous_imputation )				operation -> sous_imputation = sous_imputation -> no_sous_imputation;			    else				operation -> sous_imputation = 0;			}			else			    operation -> imputation = 0;			g_strfreev ( tableau_char );		    }		    else		    {			operation -> imputation = 0;			operation -> sous_imputation = 0;		    }		    break;		case TRANSACTION_FORM_NOTES:		    if ( gtk_widget_get_style ( widget ) == style_entree_formulaire[ENCLAIR] )			operation -> notes = g_strstrip ( g_strdup ( gtk_entry_get_text ( GTK_ENTRY ( widget ))));		    else			operation -> notes = NULL;		    break;		case TRANSACTION_FORM_TYPE:		    if ( GTK_WIDGET_VISIBLE ( widget_formulaire_par_element (TRANSACTION_FORM_TYPE) ))		    {			operation -> type_ope = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget ) -> menu_item ),											"no_type" ));			if ( GTK_WIDGET_VISIBLE ( widget_formulaire_par_element (TRANSACTION_FORM_CHEQUE) )			     &&			     gtk_widget_get_style ( widget_formulaire_par_element (TRANSACTION_FORM_CHEQUE) ) == style_entree_formulaire[ENCLAIR] )			{			    struct struct_type_ope *type;			    type = gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget ) -> menu_item ),							 "adr_type" );			    operation -> contenu_type = g_strstrip ( g_strdup ( gtk_entry_get_text ( GTK_ENTRY ( widget_formulaire_par_element (TRANSACTION_FORM_CHEQUE) ))));			    if ( type -> numerotation_auto )				type -> no_en_cours = ( my_atoi ( operation -> contenu_type ));			}			else			    operation -> contenu_type = NULL;		    }		    else		    {			operation -> type_ope = 0;			operation -> contenu_type = NULL;		    }		    break;		case TRANSACTION_FORM_DEVISE:		    /* récupération de la devise */		    devise = gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget ) -> menu_item ),						   "adr_devise" );		    /* si c'est la devise du compte ou */		    /* si c'est un compte qui doit passer à l'euro ( la transfo se fait au niveau de l'affichage de la liste ) */		    /* ou si c'est un compte en euro et l'opé est dans une devise qui doit passer à l'euro -> pas de change à demander */		    if ( !devise_compte			 ||			 devise_compte -> no_devise != gsb_account_get_currency (compte_courant) )			devise_compte = devise_par_no ( gsb_account_get_currency (compte_courant) );		    operation -> devise = devise -> no_devise;		    if ( !( operation -> no_operation			    ||			    devise -> no_devise == gsb_account_get_currency (compte_courant)			    ||			    ( devise_compte -> passage_euro			      &&			      !strcmp ( devise -> nom_devise, _("Euro") ))			    ||			    ( !strcmp ( devise_compte -> nom_devise, _("Euro") )			      &&			      devise -> passage_euro )))		    {			/* c'est une devise étrangère, on demande le taux de change et les frais de change */			demande_taux_de_change ( devise_compte, devise, 1,						 ( gdouble ) 0, ( gdouble ) 0, FALSE );			operation -> taux_change = taux_de_change[0];			operation -> frais_change = taux_de_change[1];			if ( operation -> taux_change < 0 )			{			    operation -> taux_change = -operation -> taux_change;			    operation -> une_devise_compte_egale_x_devise_ope = 1;			}		    }		    break;		case TRANSACTION_FORM_BANK:		    if ( gtk_widget_get_style ( widget ) == style_entree_formulaire[ENCLAIR] )			operation -> info_banque_guichet = g_strstrip ( g_strdup ( gtk_entry_get_text ( GTK_ENTRY ( widget ))));		    else			operation -> info_banque_guichet = NULL;		    break;		case TRANSACTION_FORM_VOUCHER:		    if ( gtk_widget_get_style ( widget ) == style_entree_formulaire[ENCLAIR] )			operation -> no_piece_comptable = g_strstrip ( g_strdup ( gtk_entry_get_text ( GTK_ENTRY ( widget ))));		    else			operation -> no_piece_comptable = NULL;		    break;	    }	}}