Using a struct to store data with VirtualWire

#include <VirtualWire.h>
/*
  #define transmit_pin  12
  #define receive_pin 11
  #define transmit_en_pin 3
*/
unsigned int recent = 0;
const byte myAdress = 0x65;
unsigned char aantalMeetmodules = 25;
unsigned char geregistreerdeMeetmodules = 0;
byte adressMeetmodules[25];

byte vorigeFunctieCode;
byte vorigeData;
byte STATUS1;
byte STATUS2;
byte STATUS;

byte bericht[VW_MAX_MESSAGE_LEN];

struct opslag {
  float MAX[];
  float MIN[];
  float GEM[];
} sensor[25][3];

union translate {
  byte bytes[4];
  float getal;
} GEM, MAX, MIN;

unsigned int LRCfout = 0;
unsigned int tijd;
void(* resetFunc) (void) = 0;

void setup()
{
  Serial.begin(9600); // Debugging only
  Serial.println("setup");
  // Initialise the IO and ISR
  /*
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
  */
  vw_set_ptt_inverted(true);               // Required for DR3100
  vw_setup(2000);                         // Bits per sec
  vw_rx_start();                           // Start the receiver PLL running
  tijd = millis();
}

void loop()
{
  ontvangen();
}

void ontvangen() {
  byte lengte = VW_MAX_MESSAGE_LEN;

  vw_wait_rx();
  vw_get_message(bericht, &lengte); // Non-blocking

  Serial.println("BOODSCHAP!");
  Serial.print("GOT : ");
  for (unsigned char b = 0; b < lengte; b++) {
    Serial.print(bericht[b], HEX);
    Serial.print(" ");
  }
  Serial.println();

  if (bericht[0] == 0x01) {                                                                                                             //Startbit check.
    byte LRCcheck = 0x00;                                                                                                               //LRC check.
    for (unsigned char a = 0; a <= lengte; a++) {
      LRCcheck = LRCcheck ^ bericht[a];
    }
    if (LRCcheck == bericht[lengte]) {
      if (bericht[4] == myAdress) {                                                                                                        //Adress check.

        switch (bericht[2]) {
          case 0xC3: //retransmit
            verzenden(vorigeFunctieCode, bericht[3]);
            Serial.println("RETRANSMIT");
            break;
          case 0xD7: //klaar voor binnenkrijgen meetwaarden?
            verzenden(0xEC, bericht[3]);
            //verzenden(0xEC, bericht[3]);
            break;
          case 0xD4:
            dataOpslaan();
            verzenden(0xEC, bericht[3]);
            //verzenden(0xEC, bericht[3]);
            break;
          case 0xEC: //Goede aankomst bericht.
            //Serial.println("Goed aangekomen");
            break;
          case 0xDB: //RESET
            verzenden(0xCE, bericht[3]);
            resetFunc();
            break;
          case 0xDF:                                                                                                                    //Status aanvraag.
            STATUS = STATUS1 + STATUS2;
            verzendenMetDATA(0xDC, bericht[3], STATUS);
            break;
          default :
            //Serial.println("ERROR");
            STATUS1 = 0x03;
            break;
        }
      }
    }
    else {
      LRCfout++;
      verzenden(0xC3, bericht[3]);                                                                                                        //Aanvraag retransmit
    }
  }
}

void dataOpslaan() {
  unsigned char meetModule;
  Serial.println("DATA");
  for (aantalMeetmodules = 0; aantalMeetmodules < 25; aantalMeetmodules++) {
    if (adressMeetmodules[aantalMeetmodules] == bericht[5]) {
      meetModule = aantalMeetmodules;
    }
    else {
      if (geregistreerdeMeetmodules >= 25) {
        //ERROR
        STATUS1 = 0x04;
        STATUS2 = 0x03;
        break;
      }
      adressMeetmodules[geregistreerdeMeetmodules] = meetModule = bericht[5];
    }
  }
  recent++;
  for (unsigned short i = 0; i < 3; i++) {
    for (unsigned short a = 0; a < 4; a++) {
      GEM.bytes[a] = bericht[4 * i + 6 + a];
      MAX.bytes[a] = bericht[4 * i + 18 + a];
      MIN.bytes[a] = bericht[4 * i + 33 + a];
      Serial.println(bericht[4 * i + 6 + a], HEX);
    }
    float a = sensor[meetModule][i].GEM[recent] = GEM.getal;
    sensor[meetModule][i].MAX[recent] = MAX.getal;
    sensor[meetModule][i].MIN[recent] = MIN.getal;
    Serial.println(GEM.getal);
    Serial.println(sensor[meetModule][i].GEM[recent]);
    Serial.println(a);
  }
  doorsturenNaarProcessing(meetModule);
}
float a = sensor[meetModule][i].GEM[recent] = GEM.getal;
    sensor[meetModule][i].MAX[recent] = MAX.getal;
    sensor[meetModule][i].MIN[recent] = MIN.getal;
    Serial.println(GEM.getal);
    Serial.println(sensor[meetModule][i].GEM[recent]);
    Serial.println(a);

In this piece of code variable a is the same as GEM.getal while with using the struct "sensor[meetModule].GEM[recent]" the variable is 0.00
What do I have to do to make the data in "sensor[meetModule].GEM[recent]" the same as the received data