rem: contre_operation = operation_par_no ( operation -> relation_no_operation, operation -> relation_no_compte );
add: contre_operation = operation_par_no ( transaction -> relation_no_operation, transaction -> relation_no_compte );
context: void recuperation_categorie_formulaire ( struct structure_operation *operation,					 gint modification ){    gchar *pointeur_char;    gchar **tableau_char;    struct structure_operation *contre_operation;    GtkWidget *entree_categ;    if ( !verifie_element_formulaire_existe ( TRANSACTION_FORM_CATEGORY ))	return;    entree_categ = GTK_COMBOFIX ( widget_formulaire_par_element (TRANSACTION_FORM_CATEGORY) ) -> entry;    if ( gtk_widget_get_style ( entree_categ ) == style_entree_formulaire[ENCLAIR] )    {	struct struct_categ *categ;	pointeur_char = g_strstrip ( g_strdup ( gtk_entry_get_text ( GTK_ENTRY ( entree_categ ))));	/* récupération de la ventilation si nécessaire */	if ( !strcmp ( pointeur_char,		       _("Breakdown of transaction") ))	{	    /* c'est une opé ventilée, on va appeler la fonction validation_ope_de_ventilation */	    /* qui va créer les nouvelles opé, les contre-opérations et faire toutes les */	    /* suppressions nécessaires */	    /*  auparavant, si c'est une modif d'opé et que l'ancienne opé était un virement, on  */	    /* vire l'ancienne opé associée */	    if ( modification &&		 operation -> relation_no_operation )	    {		/* c'était un virement, et ce ne l'est plus, donc on efface l'opé en relation */		contre_operation = operation_par_no ( operation -> relation_no_operation,						      operation -> relation_no_compte );		if ( contre_operation )		{		    contre_operation -> relation_no_operation = 0;		    supprime_operation ( contre_operation );		}		operation -> relation_no_operation = 0;		operation -> relation_no_compte = 0;	    }	    validation_ope_de_ventilation ( operation );	    operation -> operation_ventilee = 1;	    operation -> categorie = 0;	    operation -> sous_categorie = 0;	}	else	{	    /* ce n'est pas une opé ventilée, si c'est une modif d'opé et que */	    /* c'en était une, on supprime les opés de ventil asssociées */	    if ( modification		 &&		 operation -> operation_ventilee )	    {		GSList *liste_tmp;		liste_tmp = gsb_account_get_transactions_list (compte_courant);		while ( liste_tmp )		{		    struct structure_operation *ope_tmp;		    ope_tmp = liste_tmp -> data;		    if ( ope_tmp -> no_operation_ventilee_associee == operation -> no_operation )		    {			liste_tmp = liste_tmp -> next;			supprime_operation ( ope_tmp );		    }		    else			liste_tmp = liste_tmp -> next;		}		operation -> operation_ventilee = 0;	    }	    /* on va maintenant séparer entre virement et catég normale */	    tableau_char = g_strsplit ( pointeur_char,					":",					2 );	    tableau_char[0] = g_strstrip ( tableau_char[0] );	    if ( tableau_char[1] )		tableau_char[1] = g_strstrip ( tableau_char[1] );	    if ( strlen ( tableau_char[0] ) )	    {		if ( !strcmp ( tableau_char[0],			       _("Transfer") )		     && tableau_char[1]		     && strlen ( tableau_char[1] ) )		{		    /* c'est un virement, il n'y a donc aucune catégorie */		    operation -> categorie = 0;		    operation -> sous_categorie = 0;		    /* sépare entre virement vers un compte et virement vers un compte supprimé */		    if ( strcmp ( tableau_char[1],				  _("Deleted account") ) )		    {			/* c'est un virement normal, on appelle la fonction qui va traiter ça */			validation_virement_operation ( operation,							modification,							tableau_char[1] );		    }		    else		    {			/* c'est un virement vers un compte supprimé */			operation -> relation_no_compte = -1;			operation -> relation_no_operation = 1;		    }		}		else		{		    /* c'est une catég normale, si c'est une modif d'opé, vérifier si ce n'était pas un virement */		    if ( modification			 &&			 operation -> relation_no_operation )		    {			/* c'était un virement, et ce ne l'est plus, donc on efface l'opé en relation */			contre_operation = operation_par_no ( operation -> relation_no_operation,							      operation -> relation_no_compte );			if ( contre_operation )			{			    contre_operation -> relation_no_operation = 0;			    supprime_operation ( contre_operation );			}			operation -> relation_no_operation = 0;			operation -> relation_no_compte = 0;		    }		    categ = categ_par_nom ( tableau_char[0],					    1,					    operation -> montant < 0,					    0 );		    if ( categ )		    {			struct struct_sous_categ *sous_categ;			operation -> categorie = categ -> no_categ;			sous_categ = sous_categ_par_nom ( categ,							  tableau_char[1],							  1 );			if ( sous_categ )			    operation -> sous_categorie = sous_categ -> no_sous_categ;		    }		}	    }	    g_strfreev ( tableau_char );	}    }}