rem: date_debut_periode = operation -> date;
add: {    switch ( etat_courant -> type_separation_plage ) { case 0:   date_debut_periode = g_date_new_dmy ( g_date_day ( operation -> date ), g_date_month ( operation -> date ), g_date_year ( operation -> date ));  if ( g_date_weekday ( date_debut_periode )  != (etat_courant -> jour_debut_semaine + 1 )) { if ( g_date_weekday ( date_debut_periode ) < (etat_courant -> jour_debut_semaine + 1 )) g_date_subtract_days ( date_debut_periode, g_date_weekday ( date_debut_periode ) + etat_courant -> jour_debut_semaine - 2 ); else g_date_subtract_days ( date_debut_periode, g_date_weekday ( date_debut_periode ) - etat_courant -> jour_debut_semaine - 1 ); } break;  case 1:   date_debut_periode = g_date_new_dmy ( 1, g_date_month ( operation -> date ), g_date_year ( operation -> date )); break;  case 2:   date_debut_periode = g_date_new_dmy ( 1, 1, g_date_year ( operation -> date )); break; } }
context: gint gtktable_affiche_total_periode ( struct structure_operation *operation,				      gint ligne,				      gint force ){  GtkWidget *label;  GtkWidget *separateur;  if ( etat_courant -> separation_par_plage )    {      gchar *message;      message = NULL;      /* si l'ancienne date est nulle, on la met  la date de l'opration */      if ( !date_debut_periode )	{	  if ( operation )	    date_debut_periode = operation -> date;	  else	    date_debut_periode = NULL;	  return ( ligne );	}      /* on vrifie maintenant s'il faut afficher un total ou pas */      switch ( etat_courant -> type_separation_plage )	{	  gchar buffer[30];	  GDate *date_tmp;	case 0:	  /* sparation par semaine */	  /* 	  si c'est le mme jour que l'op prcdente, on fait rien */	  if ( !force	       &&	       !g_date_compare ( operation -> date,				date_debut_periode ))	    return ( ligne );	  /* 	  si on est en dbut de semaine, on met un sous total */	  date_tmp = g_date_new_dmy ( g_date_day ( date_debut_periode ),				      g_date_month ( date_debut_periode ),				      g_date_year ( date_debut_periode ));	  g_date_add_days ( date_tmp,			    7 );	  if ( !force	       &&	       ( g_date_weekday ( operation -> date )  != (etat_courant -> jour_debut_semaine + 1 )		 &&		 g_date_compare ( operation -> date,				  date_tmp ) < 0 ))	    return ( ligne );	  /* on doit retrouver la date du dbut de semaine et y ajouter 6j pour afficher la priode */	  if ( g_date_weekday ( date_debut_periode )  != (etat_courant -> jour_debut_semaine + 1 ))	    {	      if ( g_date_weekday ( date_debut_periode ) < (etat_courant -> jour_debut_semaine + 1 ))		g_date_subtract_days ( date_debut_periode,				       g_date_weekday ( date_debut_periode ) + etat_courant -> jour_debut_semaine - 2 );	      else		g_date_subtract_days ( date_debut_periode,				       g_date_weekday ( date_debut_periode ) - etat_courant -> jour_debut_semaine - 1 );	    }	  g_date_free ( date_tmp );	  date_tmp = g_date_new_dmy ( g_date_day ( date_debut_periode ),				      g_date_month ( date_debut_periode ),				      g_date_year ( date_debut_periode ));	  g_date_add_days ( date_tmp,				6 );	  message = g_strdup_printf ( _( "Rsultat du %d/%d/%d au %d/%d/%d :" ),				      g_date_day ( date_debut_periode ),				      g_date_month ( date_debut_periode ),				      g_date_year ( date_debut_periode ),				      g_date_day ( date_tmp ),				      g_date_month ( date_tmp ),				      g_date_year ( date_tmp ));	  break;	case 1:	  /* sparation par mois */	  if ( !force	       &&	       operation -> mois == g_date_month ( date_debut_periode ) )	    return ( ligne );	  g_date_strftime ( buffer,			    29,			    "%B %Y",			    date_debut_periode );			    	  message = g_strconcat ( _( "Rsultat de " ),				  buffer,				  " : ",				  NULL );				      	  break;	case 2:	  /* sparation par an */	  if ( !force	       &&	       operation -> annee == g_date_year ( date_debut_periode ) )	    return ( ligne );	  g_date_strftime ( buffer,			    29,			    "%Y",			    date_debut_periode );			    	  message = g_strconcat ( _( "Rsultat de l'anne" ),				  buffer,				  " : ",				  NULL );	  break;/* 	case 3: */	  /* sparation perso *//* 	  date_tmp = g_date_new_dmy ( g_date_day ( date_debut_periode ), *//* 				      g_date_month ( date_debut_periode ), *//* 				      g_date_year ( date_debut_periode )); */	  /* on ajoute  date_tmp la ppriodicit et on regarde si on l'a dpass *//* 	  switch ( etat_cournat -> type_separation_perso ) *//* 	    { *//* 	    case 0: */ 	      /* jours */ /* 	      g_date_add_days ( date_tmp, *//* 				etat_courant -> delai_separation_perso ); *//* 	      break; *//* 	    case 1: */	      /* mois *//* 	      g_date_add_months ( date_tmp, *//* 				etat_courant -> delai_separation_perso ); *//* 	      break; *//* 	    case 2: */          /* ans */ /* 	      g_date_add_years ( date_tmp, *//* 				 etat_courant -> delai_separation_perso ); *//* 	      break; *//* 	    } *//* 	    return ( ligne ); *//* 	  break; */	}      /*       si on arrive ici, c'est qu'il y a un chgt de priode ou que c'est forc */      /* 	  si on affiche les ops, on met les traits entre eux */      if ( etat_courant -> afficher_opes	   &&	   ligne_debut_partie != -1 )	{	  gint i;	  gint colonne;	  colonne = 2;	  for ( i=0 ; i<((nb_colonnes-2)/2) ; i++ )	    {	      separateur = gtk_vseparator_new ();	      gtk_table_attach ( GTK_TABLE ( table_etat ),				 separateur,				 colonne, colonne + 1,				 ligne_debut_partie, ligne,				 GTK_SHRINK | GTK_FILL,				 GTK_SHRINK | GTK_FILL,				 0, 0 );	      gtk_widget_show ( separateur );	      colonne = colonne + 2;	    }	  ligne_debut_partie = -1;	}      label = gtk_label_new ( "" );      gtk_misc_set_alignment ( GTK_MISC ( label ),			       0,			       0.5 );      gtk_table_attach ( GTK_TABLE ( table_etat ),			 label,			 1, GTK_TABLE ( table_etat ) -> ncols - 1,			 ligne, ligne + 1,			 GTK_SHRINK | GTK_FILL,			 GTK_SHRINK | GTK_FILL,			 0, 0 );      gtk_widget_show ( label );      ligne++;      separateur = gtk_hseparator_new ();      gtk_table_attach ( GTK_TABLE ( table_etat ),			 separateur,			 1, GTK_TABLE ( table_etat ) -> ncols,			 ligne, ligne + 1,			 GTK_SHRINK | GTK_FILL,			 GTK_SHRINK | GTK_FILL,			 0, 0 );      gtk_widget_show ( separateur );      ligne++;      label = gtk_label_new ( message );      gtk_misc_set_alignment ( GTK_MISC ( label ),			       0,			       0.5 );      gtk_table_attach ( GTK_TABLE ( table_etat ),			 label,			 1, GTK_TABLE ( table_etat ) -> ncols - 1,			 ligne, ligne + 1,			 GTK_SHRINK | GTK_FILL,			 GTK_SHRINK | GTK_FILL,			 0, 0 );      gtk_widget_show ( label );      label = gtk_label_new ( g_strdup_printf ( "%4.2f %s",						montant_periode_etat,						devise_generale_etat -> code_devise ));      gtk_table_attach ( GTK_TABLE ( table_etat ),			 label,			 GTK_TABLE ( table_etat ) -> ncols - 1, GTK_TABLE ( table_etat ) -> ncols,			 ligne, ligne + 1,			 GTK_SHRINK | GTK_FILL,			 GTK_SHRINK | GTK_FILL,			 0, 0 );      gtk_widget_show ( label );      ligne++;	  label = gtk_label_new ( "" );	  gtk_misc_set_alignment ( GTK_MISC ( label ),				   0,				   0.5 );	  gtk_table_attach ( GTK_TABLE ( table_etat ),			     label,			     1, GTK_TABLE ( table_etat ) -> ncols - 1,			     ligne, ligne + 1,			     GTK_SHRINK | GTK_FILL,			     GTK_SHRINK | GTK_FILL,			     0, 0 );	  gtk_widget_show ( label );	  ligne++;      montant_periode_etat = 0;      if ( operation )	date_debut_periode = operation -> date;      else	date_debut_periode = NULL;    }  return (ligne );}