$fn=100;

// Paramètres
longueur = 80;          // Longueur de la boîte
largeur = 40;           // Largeur de la boîte
hauteur = 80;           // Hauteur de la boîte
epaisseur = 3;          // Épaisseur des parois
diametre_trou = 14;     // Diamètre des trous
nombre_trous = 3;       // Nombre de trous sur le dessus

// Calculs pour positionnement
espace_total = longueur - nombre_trous * diametre_trou; // Espace libre total sur la longueur
espacement_bord = espace_total / (nombre_trous + 1);    // Espacement exact entre les bords et les trous

// Module pour le parallélépipède extérieur
module exterieur() {
    cube([longueur, largeur, hauteur]);
}

// Module pour la cavité intérieure
module interieur() {
    translate([epaisseur, epaisseur, epaisseur])
        cube([longueur - 2 * epaisseur, largeur - 2 * epaisseur, hauteur - 2 * epaisseur]);
}

// Module pour un trou unique
module trou(pos_x) {
    translate([pos_x, largeur / 2, hauteur - epaisseur])
        cylinder(h = epaisseur, r = diametre_trou / 2);
}

// Module pour les trous sur le dessus
module trous() {
    for (i = [0 : nombre_trous - 1]) {
        trou(espacement_bord + i * (diametre_trou + espacement_bord) + diametre_trou / 2);
    }
}

// Générer la boîte avec les trous
difference() {
    exterieur();
    interieur();
    trous();
}