add: p_tab_nom_de_compte_variable = p_tab_nom_de_compte_ope_trouvee;
context: void completion_operation_par_tiers ( void ){    struct struct_tiers *tiers;    struct structure_operation *operation;    GSList *pointeur_ope;    gpointer ** p_tab_nom_de_compte_ope_trouvee;    gchar *char_tmp;    /* s'il y a quelque chose dans les entres dbit/crdit ou catgories, on se barre */    if ( gtk_widget_get_style ( widget_formulaire_operations[TRANSACTION_FORM_DEBIT] ) == style_entree_formulaire[ENCLAIR]	 ||	 gtk_widget_get_style ( widget_formulaire_operations[TRANSACTION_FORM_CREDIT] ) == style_entree_formulaire[ENCLAIR]	 ||	 gtk_widget_get_style ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] )->entry ) == style_entree_formulaire[ENCLAIR] )	return;    /* recherche le tiers demand */    tiers = tiers_par_nom ( gtk_combofix_get_text ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_PARTY] )),			    0 );    /*   si nouveau tiers,  on s'en va simplement */    if ( !tiers )	return;    /* on fait d'abord le tour du compte courant pour recherche une op avec ce tiers */    /* s'il n'y a aucune op correspondante, on fait le tour de tous les comptes */    p_tab_nom_de_compte_variable = p_tab_nom_de_compte + compte_courant;    p_tab_nom_de_compte_ope_trouvee = p_tab_nom_de_compte + compte_courant;    operation = NULL;    pointeur_ope = LISTE_OPERATIONS;    while ( pointeur_ope )    {	struct structure_operation *ope_test;	ope_test = pointeur_ope -> data;	if ( ope_test -> tiers == tiers -> no_tiers	     &&	     !ope_test -> no_operation_ventilee_associee )	{	    if ( operation )	    {		if ( g_date_compare ( ope_test -> date,				      operation -> date ) >= 0 )		    operation = ope_test;	    }	    else		operation = ope_test;	}	pointeur_ope = pointeur_ope -> next;    }    if ( !operation )    {	/* aucune opration correspondant  ce tiers n'a t trouve dans le compte courant */	/* on recherche dans les autres comptes, la premire trouve fera l'affaire */	gint i;	p_tab_nom_de_compte_variable = p_tab_nom_de_compte;	for ( i = 0 ; i < nb_comptes ; i++ )	{	    if ( i != compte_courant )	    {		pointeur_ope = LISTE_OPERATIONS;		while ( pointeur_ope )		{		    struct structure_operation *ope_test;		    ope_test = pointeur_ope -> data;		    if ( ope_test -> tiers == tiers -> no_tiers )		    {			operation = ope_test;			pointeur_ope = NULL;			i = nb_comptes;		    }		    else			pointeur_ope = pointeur_ope -> next;		}	    }	    p_tab_nom_de_compte_variable++;	}	p_tab_nom_de_compte_variable--;	p_tab_nom_de_compte_ope_trouvee = p_tab_nom_de_compte_variable;    }    /* si on n'a trouv aucune opration, on se tire */    if ( !operation )	return;    /* remplit les diffrentes entres du formulaire */    p_tab_nom_de_compte_variable = p_tab_nom_de_compte_ope_trouvee;    /* remplit les montant et place le menu correspondant dans l'option menu des types */    if ( operation -> montant < 0 )    {	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_DEBIT] );	gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_DEBIT] ),			     g_strdup_printf ( "%4.2f",					       -operation -> montant ));	/* met le menu des types dbits */	if ( !etat.affiche_tous_les_types )	{	    GtkWidget *menu;	    if ( (menu = creation_menu_types ( 1, compte_courant, 0  )))	    {		gtk_option_menu_set_menu ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] ),					   menu );		gtk_widget_show ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] );	    }	    else	    {		gtk_widget_hide ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] );		gtk_widget_hide ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] );	    }	}    }    else    {	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_CREDIT] );	gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_CREDIT] ),			     g_strdup_printf ( "%4.2f",					       operation -> montant ));	/* met le menu des types crdits */	if ( !etat.affiche_tous_les_types )	{	    GtkWidget *menu;	    if ( (menu = creation_menu_types ( 2, compte_courant, 0 )))	    {		gtk_option_menu_set_menu ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] ),					   menu );		gtk_widget_show ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] );	    }	    else	    {		gtk_widget_hide ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] );		gtk_widget_hide ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] );	    }	}    }    /* met le type correspondant  l'op */    if ( GTK_WIDGET_VISIBLE ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] ))    {	gint place_type;	struct struct_type_ope *type;	/* recherche le type de l'op */	place_type = cherche_no_menu_type ( operation -> type_ope );	/* si aucun type n'a t trouv, on cherche le dfaut */	if ( place_type == -1 )	{	    p_tab_nom_de_compte_variable = p_tab_nom_de_compte + compte_courant;	    if ( operation -> montant < 0 )		place_type = cherche_no_menu_type ( TYPE_DEFAUT_DEBIT );	    else		place_type = cherche_no_menu_type ( TYPE_DEFAUT_CREDIT );	    /* si le type par dfaut n'est pas trouv, on met 0 */	    if ( place_type == -1 )		place_type = 0;	}	/*        ce niveau, place type est mis */	gtk_option_menu_set_history ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] ),				      place_type );	/* rcupre l'adr du type pour mettre un n auto si ncessaire */	type = gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_TYPE] ) -> menu_item ),				     "adr_type" );	if ( type -> affiche_entree )	{	    /* on raffiche l'entre car si le menu avait t mis sur le 0, c'tait pas affich */	    gtk_widget_show ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] );	    if ( type -> numerotation_auto )	    {		entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] );		gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] ),				     itoa ( type -> no_en_cours + 1 ));	    }	    else		if ( operation -> contenu_type )		{		    entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] );		    gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_CHEQUE] ),					 operation -> contenu_type );		}	}    }    /* met la devise */    gtk_option_menu_set_history ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_DEVISE] ),				  g_slist_index ( liste_struct_devises,						  devise_par_no ( operation -> devise )));    /* mise en forme des catgories */    if ( operation -> operation_ventilee )    {	GtkWidget *dialog;	GtkWidget *label;	gint result;	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] );	/* c'est une op ventile, la catgorie est Opration ventile */	/* on demande si on veut rcuprer les anciennes ops de ventilation */	gtk_combofix_set_text ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] ),				_("Breakdown of transaction") );	gtk_widget_show ( widget_formulaire_operations[TRANSACTION_FORM_BREAKDOWN] );	/* affiche la question de rcupration */	dialog = gtk_dialog_new_with_buttons ( _("Recover breakdown?"),					       GTK_WINDOW (window),					       GTK_DIALOG_MODAL,					       GTK_STOCK_YES,0,					       GTK_STOCK_NO,1,					       NULL );	label = gtk_label_new ( _("Do you want to recover all the lines of the last breakdown?") );	gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( dialog ) -> vbox ),			     label,			     FALSE,			     FALSE,			     5 );	gtk_widget_show ( label );	result = gtk_dialog_run ( GTK_DIALOG ( dialog ));	gtk_widget_destroy ( dialog );	if ( !result )	{	    /* rcupration des anciennes ops de la ventilation */	    GSList *liste_des_opes_de_ventilation;	    liste_des_opes_de_ventilation = NULL;	    pointeur_ope = LISTE_OPERATIONS;	    while ( pointeur_ope )	    {		struct structure_operation *ope_test;		ope_test = pointeur_ope -> data;		if ( ope_test -> no_operation_ventilee_associee == operation -> no_operation )		{		    struct struct_ope_ventil *nouvelle_operation;		    nouvelle_operation = calloc ( 1,						  sizeof ( struct struct_ope_ventil ));		    nouvelle_operation -> montant = ope_test -> montant;		    nouvelle_operation -> categorie = ope_test -> categorie;		    nouvelle_operation -> sous_categorie = ope_test -> sous_categorie;		    if ( ope_test -> notes )			nouvelle_operation -> notes = g_strdup ( ope_test -> notes );		    nouvelle_operation -> imputation = ope_test -> imputation;		    nouvelle_operation -> sous_imputation = ope_test -> sous_imputation;		    if ( ope_test -> no_piece_comptable )			nouvelle_operation -> no_piece_comptable = g_strdup ( ope_test -> no_piece_comptable );		    /* 		    on met par_completion  1 pour viter de les effacer si on va dans l'chance */		    /* 			et qu'on annule */		    nouvelle_operation -> par_completion = 1;		    /* si c'est un virement, on met le compte de virement et le type choisi */		    if ( ope_test -> relation_no_operation )		    {			struct structure_operation *contre_operation;			nouvelle_operation -> relation_no_operation = -1;			nouvelle_operation -> relation_no_compte = ope_test -> relation_no_compte;			/*  on va chercher le type de l'op associe */			contre_operation = operation_par_no ( ope_test -> relation_no_operation,							      ope_test -> relation_no_compte );			if ( contre_operation )			    nouvelle_operation -> no_type_associe = contre_operation -> type_ope;			p_tab_nom_de_compte_variable = p_tab_nom_de_compte_ope_trouvee;		    }		    liste_des_opes_de_ventilation = g_slist_append ( liste_des_opes_de_ventilation,								     nouvelle_operation );		}		pointeur_ope = pointeur_ope -> next;	    }	    if ( liste_des_opes_de_ventilation )		gtk_object_set_data ( GTK_OBJECT ( formulaire ),				      "liste_adr_ventilation",				      liste_des_opes_de_ventilation );	    else		gtk_object_set_data ( GTK_OBJECT ( formulaire ),				      "liste_adr_ventilation",				      GINT_TO_POINTER ( -1 ) );	}    }    else	if ( operation -> relation_no_operation )	{	    /* c'est un virement */	    GtkWidget *menu;	    entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] );	    p_tab_nom_de_compte_variable = p_tab_nom_de_compte + operation -> relation_no_compte;	    if ( operation -> relation_no_operation != -1 )		gtk_combofix_set_text ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] ),					g_strconcat ( COLON(_("Transfer")),						      NOM_DU_COMPTE,						      NULL ));	    else		gtk_combofix_set_text ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] ),					_("Transfer") );	    /* comme c'est un virement, on va afficher le type de la contre op s'il existe */	    if ( operation -> montant >= 0 )		menu = creation_menu_types ( 1, operation -> relation_no_compte, 2  );	    else		menu = creation_menu_types ( 2, operation -> relation_no_compte, 2  );	    /*  on ne continue que si un menu a t cr */	    /*    dans ce cas, on va chercher l'autre op et retrouve le type */	    if ( menu )	    {		struct structure_operation *operation_2;		gtk_option_menu_set_menu ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_CONTRA] ),					   menu );		gtk_widget_show ( widget_formulaire_operations[TRANSACTION_FORM_CONTRA] );		operation_2 = operation_par_no ( operation -> relation_no_operation,						 operation -> relation_no_compte );		if ( operation_2 )		    gtk_option_menu_set_history ( GTK_OPTION_MENU ( widget_formulaire_operations[TRANSACTION_FORM_CONTRA] ),						  cherche_no_menu_type_associe ( operation_2 -> type_ope,										 0 ));	    }	    p_tab_nom_de_compte_variable = p_tab_nom_de_compte + compte_courant;	}	else	{	    /* c'est des catgories normales */	    char_tmp = nom_categ_par_no ( operation -> categorie,					  operation -> sous_categorie );	    if ( char_tmp )	    {		entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] );		gtk_combofix_set_text ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_CATEGORY] ),					char_tmp );	    }	}    /* met en place l'imputation budgtaire */    char_tmp = nom_imputation_par_no ( operation -> imputation,				       operation -> sous_imputation );    if ( char_tmp )    {	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_BUDGET] );	gtk_combofix_set_text ( GTK_COMBOFIX ( widget_formulaire_operations[TRANSACTION_FORM_BUDGET] ),				char_tmp );    }    /* mise en place de la pice comptable */    if ( operation -> no_piece_comptable )    {	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_VOUCHER] );	gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_VOUCHER] ),			     operation -> no_piece_comptable );    }    /*   remplit les notes */    if ( operation -> notes )    {	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_NOTES] );	gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_NOTES] ),			     operation -> notes );    }    /*   remplit les infos guichet / banque */    if ( operation -> info_banque_guichet )    {	entree_prend_focus ( widget_formulaire_operations[TRANSACTION_FORM_BANK] );	gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_operations[TRANSACTION_FORM_BANK] ),			     operation -> info_banque_guichet );    }}