Bonjour, voici le code...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
private void Test_Contrat(int[] Tab, string ID, int Choix)
		{
			this.dsPrincipal1.Table_Contrats.Clear();
			this.daContrats.Fill(this.dsPrincipal1.Table_Contrats);
			string Nouvelle_Date="";
			MessageBox.Show("OK");
			if(Choix==1)
			{
				//---Compte le nbre d'enregistrement à tester pour ce candi---//
				int m=0, Cpt=0;
				while(m<Tab.Length && Tab[m]!=-1)
				{
					Cpt++;
					m++;						
				}
				MessageBox.Show(Cpt.ToString());
 
				if(Cpt>1)
				for(int j=1;j<Cpt;j++)
				{
					//---Si ils ont les mêmes horaires, baremes, et status, on fusionne---//
					if(Tab[j-1]!=-1 && Tab[j]!=-1 && this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Status_Nom"].ToString() == this.dsPrincipal1.Table_Contrats[Tab[j]]["Status_Nom"].ToString() && this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Horaires_Heure"].ToString()==this.dsPrincipal1.Table_Contrats[Tab[j]]["Horaires_Heure"].ToString() && this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Baremes_Valeur"].ToString()==this.dsPrincipal1.Table_Contrats[Tab[j]]["Baremes_Valeur"].ToString())
					{                       
						//-----------------------//
						//---Fusion des dates---//
						//---------------------//
						Nouvelle_Date=this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Periode_Dates"].ToString().Substring(0,this.dsPrincipal1.Table_Contrats[Tab[j-1]]["Periode_Dates"].ToString().IndexOf(" "));
						Nouvelle_Date+=" "+this.dsPrincipal1.Table_Contrats[Tab[j]]["Periode_Dates"].ToString().Substring(this.dsPrincipal1.Table_Contrats[Tab[j]]["Periode_Dates"].ToString().IndexOf(" ")+1);
 
						//---Ecrire le nouvel enregistrement fusionné---//
						Ecrire_Fusion(Tab[j-1],Tab[j], Nouvelle_Date);			
 
						//---On efface les 2 que l'on va fusionner---//
						Efface_Table_Contrat(this.dsPrincipal1.Table_Contrats[Tab[j-1]]["ID_Contrat"].ToString());
						Efface_Table_Contrat(this.dsPrincipal1.Table_Contrats[Tab[j]]["ID_Contrat"].ToString());
 
						//---On recommence les tests---//
						this.dsPrincipal1.Table_Contrats.Clear();
						this.daContrats.Fill(this.dsPrincipal1.Table_Contrats);
						Tab=Offset_Table_Contrats(ID); //---On recalcule les offsets---//
						Test_Contrat(Tab, ID, 1); //---On réeffectue les tests---//
					}
				}				
			}
 
		MessageBox.Show("OUT");
		}
J'ai donc une fonction récursive... elle ne rentrera plus dans le for à partir du moment où le cpt est arrivé à 1...
Tout cela parfaitement...
A l'affichage j'ai

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
OK
4
OK
3
OK
2
OK
1
OUT
OUT
OUT
OUT
C'est justement les 4 OUT qui me dérangent... Comment est ce possible qu'il passe 4 fois par là alors qu'il ne passe pas par le début de cette fonction (étant donné qu'il ne m'affiche pas OK avant le OUT...)...

Je n'ai jamais utilisé de fonction récursive (je ne sais d'ailleurs pas si le terme est adapter à ce que je fais...), peut être est ce que je m'y prend mal... Mais ce me depasse.

Est ce que il y a une explication qui saute aux yeux ?

Où comment arriver à debugger cela, parce que je ne comprend pas comment c'est possible...

HELP.
Merci.