Conflict between LCD and Relay

Hi,
I've been working on an arduino project lately and i can't figure out an issue.
My UNO is linked to both a LCD screen TC1602A-01T and a Relay SRD-05DC-SL-C.
If my relay is not connected to the 24V power source, the LCD works perfectly, but as soon as I turn on the 24V, it print random characters.
I've put an external source, as i feared it was the backlight who messed all up, but it didn't solve the thing.

Only one relay but the circuit is the same.

I'm working on a BreadBoard, but the two components are at both end of it. As shown below:

During a normal functionnement:

And as soon as the relay is under the 24V tension, this kind of things appen:

And the character often jump one place to the left each iteration, and sometimes the correct number is printed.

Here is my code:

#include <LiquidCrystal.h>
//import bibliothèque lcd, définition des pins du lcd que l'on utilise sur l'arduino (dans l'ordre: RS, E, D4, D5, D6,D7)
LiquidCrystal lcd(2, 3, 8, 9, 10, 11);
//definition des constantes et pins
long nbCycle = 10000;
const int pinStart = 12;
const int pinPause = 13;
bool val_bouton_start = 0;
bool val_pause = 0;


void setup() {
  // le lcd vas avoir 2 rangé de 16 caractères
  lcd.begin(16, 2);
  lcd.clear();
  //affichage des paramètres initiaux
  lcd.print("Nb Cycle:");
  lcd.print(nbCycle);
  //def des pins, on en utilise deux pour les boutons debut et pause/reprise. Le pin 5 sert à controler le relais
  pinMode(pinStart, INPUT);
  pinMode(pinPause, INPUT);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}



void loop() {
  // depart seulement quand le bouton de depart est pressé
  val_bouton_start = digitalRead(pinStart);
  if (val_bouton_start == HIGH) {
    //affichage des infos sur le lcd
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Progression");
    lcd.setCursor(7, 1);
    lcd.print("/");
    lcd.print(nbCycle);
    //debut du cyclage
    for (long i = 1; i <= nbCycle; i++) {
      digitalWrite(5, HIGH);
      //temps à définir selon l'essais
      delay(500);
      digitalWrite(5, LOW);
      delay(500);
      //à chaque fin de cycle on vérifie si la pause à été enclenché
      val_pause = digitalRead(pinPause);
      if (val_pause) {
        lcd.setCursor(0, 0);
        lcd.print("Pause          ");
        delay(50);
        val_pause = digitalRead(pinStart);
        //puis on regarde quand la reprise est enclenché (1s de délais entre les deux vérifications
        while (val_pause == 0) {
          delay(50);
          val_pause = digitalRead(pinStart);
        }
        lcd.setCursor(0, 0);
        lcd.print("Progression    ");
      }

      //màj du nombre de cycle effectué
      lcd.setCursor(0, 1);
      lcd.print(i);
      //communication avec la raspberryPI
      Serial.println(i);

    }
    //une fois sortis de la boucle, le cyclage est terminé, on affiche que c'est finis
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Essais Accomplis");
    lcd.setCursor(0, 1);
    lcd.print("Cycles: ");
    lcd.print(nbCycle);
  }
}

Are your +24V supply's ground and your +5V supply's ground connected?

Your schematic shows the 24vdc coil relays being driven by the 5vdc supply. Not sure that is going to work. You might want to post the new schematic with the separate 24vdc supply. Sounds like a wiring problem.