public IMessage decrypter(IMessage crypte, String key) {
		/*
		 * La mthode lit d'abord la cl, puis
		 * parcourt le message afin de transmettre les caractres
		 * correspondant  des lettres deux  deux 
		 * la mthode decoderChar tout en recopiant les caracteres
		 * contenus dans IGNORE, puis desadapte le message
		 */
		try {
			long d=new Date().getTime();
			char[][] c=this.remplirTabChar(key);
			char c1=' '; int r1=0;
			char c2=' '; int r2=0;
			boolean act=true;
			char[] nouveau=new char[crypte.taille()];
			for(int i=0;i<crypte.taille();i=i+2) {
				if(i!=crypte.taille()-1) {
					r1=0;
					r2=0;
					act=true;
					if(IGNORE.contains(crypte.getChar(i))) {
						if(!IGNORE.contains(crypte.getChar(i+1))) {
							if(!IGNORE.contains(crypte.getChar(i+2))) {
								c1=crypte.getChar(i+1);
								c2=crypte.getChar(i+2);
								r1=1;
								r2=1;
								nouveau[i]=crypte.getChar(i);
							}
							else {
								act=false;
								nouveau[i]=crypte.getChar(i);
								i--;
							}
						}
						else {
							nouveau[i]=crypte.getChar(i);
							nouveau[i+1]=crypte.getChar(i+1);
							act=false;
						}
					}
					else {
						if(IGNORE.contains(crypte.getChar(i+1))) {
							c1=crypte.getChar(i);
							c2=crypte.getChar(i+2);
							r1=0;
							r2=1;
							nouveau[i+1]=crypte.getChar(i+1);
						}
						else {
							c1=crypte.getChar(i);
							c2=crypte.getChar(i+1);
						}
					}
					if(act) {
						this.decoderChar(c1, c2,c);
						nouveau[i+r1]=this.t1;
						nouveau[i+1+r2]=this.t2;
						if(r1==1 || r2==1) {
							i++;
						}

					}
				}
				else {
					if(IGNORE.contains(crypte.getChar(i))) {
						nouveau[i]=crypte.getChar(i);
					}
				}
			}
			this.time=new Date().getTime()-d;
			return this.desadapter(Fabrique.fabriquerMessage(nouveau));
		}
		catch(Exception e) {
			JOptionPane.showMessageDialog(null, "Ce message n'a pas t cod  l'aide de ce type de code", "Erreur", JOptionPane.ERROR_MESSAGE);
			return Fabrique.fabriquerMessage("Erreur");
		}
	}