Bonjour,
J'ai utilisé Decaler() parce que les colonnes 'Unité' ne sont pas nommées
(ce n'est pas la peine de les nommer, comme ça on garde la même formule sur tout le tableau)
Dans la formule
SOMMEPROD((Deb>=$B10)*(Fin<=$C10)*DECALER(Fin;;EQUIV(D$5;Uni;0)))
la plage 'Fin' est décalée plus ou moins vers la droite,
selon la position de D5 dans la ligne des titres
DECALER(Fin;;EQUIV(D$5;Uni;0)) = Decaler(Plage 'Fin'; 0 ligne; n colonnes vers la droite)
Le 'n colonnes' étant défini par Equiv(Réf; Plage des titres; 0)
EQUIV(D$5;Uni;0)
renvoie la position de D5 dans la plage 'Uni'
Si on a 'Unité A' en D5, Equiv() renvoie 1
La plage prise en compte sera la colonne D : Decaler(Fin; 0;1)
Si on a 'Unité B' en D5, Equiv() renvoie 2
La plage prise en compte sera la colonne E : Decaler(Fin; 0;2)
C'est l'onglet 'Acquisition' qui vient d'un copié-collé VBA non ?
Si c'est oui, un copié-coller ne va pas déranger tout ça
Mais je n'y connais rien en macro
A la rigueur, pour la plage des jours, par exemple,
pour la nommer,
au lieu de DECALER(Acquisition!$A$4;;;Long)
on peut mettre DECALER(Acquisition!$A$1;3;;Long)
(on part de A1 au lieu de A4, mais on décale de 3 lignes vers le bas, donc la plage démarre vraiment en A4)
- NB -
J'ai oublié un truc
La fonction Decaler() a 2 autres arguments
Decaler(Réf; nb de lignes; nb de colonnes ; Hauteur; Largeur)
Les 2 dernier pour définir un tableau, par exemple
DECALER(A1;0;0;5;5) = A1:E5, une plage de 5 sur 5
Message édité par: monique, à: 01/05/2006 21:24