type TTabString = Array [0..99] of String; // avec les tableaux dynamiques j'ai un Pb PTabString = ^TTabString; var ColonneTri : Integer; // Colonne de base pour le tri; // fonction de comparaison function ListSortCompare(Item1, Item2: Pointer): Integer; var PLigne1, PLigne2 : PTabString; begin Pligne1 := Item1; Pligne2 := Item2; if PLigne1^[ColonneTri]>Pligne2^[ColonneTri]then result:=1; if PLigne1^[ColonneTri]0 then exit; ColonneTri := C; MyList := TList.Create; MyList.Capacity := StringGrid1.RowCount; //1- Copie des lignes non fixes for j:= StringGrid1.FixedRows to StringGrid1.RowCount-1 do begin // Nouveau pointeur New(PLigne); // remplissage du tableau for i:=0 to StringGrid1.ColCount-1 do PLigne^[i]:=StringGrid1.Cells[i,j]; // Ajout à la liste MyList.Add(PLigne); end; // 2 - Tri de la liste MyList.Sort(ListSortCompare); // Remplissage du tableau for j:= StringGrid1.FixedRows to StringGrid1.RowCount-1 do begin // Recup ligne Pligne := MyList.List[j-StringGrid1.FixedRows]; // remplissage des colonnes for i:=0 to StringGrid1.ColCount-1 do begin StringGrid1.Cells[i,j] := PLigne^[i]; end; Dispose(PLigne); // libération mémoire ligne end; // libération Liste MyList.Free; end;