Adapter une formule matriciel en macro

  • Initiateur de la discussion Initiateur de la discussion chich
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chich

XLDnaute Occasionnel
Bonjour
comment adapter cette formule matriciel en macro pour la gestion des absence des 10 collaborateurs
Je souhaite que l'équivalent de cette formule s'applique pour le collaborateur 1 dans la plage(FU14 : TU14)
En fonction des dates de debut et de fin que je saisi dans les différente periode plus bas dans la feuille a la ligne 39 dans le fichier joint

{=SI(OU(ET(FU$3>=$FP39;FU$3<=$FR39);ET(FU$3>=$FS39;FU$3<=$FU39);ET(FU$3>=$FX39;FU$3<=$GB39);ET(FU$3>=$GE39;FU$3<=$GI39);ET(FU$3>=$GL39;FU$3<=$GP39));"CP";SI(OU(ET(FU$3>=$FP40;FU$3<=$FR40);ET(FU$3>=$FS40;FU$3<=$FU40);ET(FU$3>=$FX40;FU$3<=$GB40);ET(FU$3>=$GE40;FU$3<=$GI40);ET(FU$3>=$GL40;FU$3=$GP40));"CN";SI(OU(ET(FU$3>=$FP41;FU$3<=$FR41);ET(FU$3>=$FS41;FU$3<=$FU41);ET(FU$3>=$FX41;FU$3<=$GB41);ET(FU$3>=$GE41;FU$3<=$GI41);ET(FU$3>=$GL41;FU$3=$GP41));"CD";SI(OU(ET(FU$3>=$FP42;FU$3<=$FR42);ET(FU$3>=$FS42;FU$3<=$FU42);ET(FU$3>=$FX42;FU$3<=$GB42);ET(FU$3>=$GE42;FU$3<=$GI42);ET(FU$3>=$GL42;FU$3=$GP42));"MA";SI(OU(ET(FU$3>=$FP43;FU$3<=$FR43);ET(FU$3>=$FS43;FU$3<=$FU43);ET(FU$3>=$FX43;FU$3<=$GB43);ET(FU$3>=$GE43;FU$3<=$GI43);ET(FU$3>=$GL43;FU$3=$GP43));"MOD";SI(OU(ET(FU$3>=$FP44;FU$3<=$FR44);ET(FU$3>=$FS44;FU$3<=$FU44);ET(FU$3>=$FX44;FU$3<=$GB44);ET(FU$3>=$GE44;FU$3<=$GI44);ET(FU$3>=$GL44;FU$3=$GP44));"FOR";SI(OU(ET(FU$3>=$FP45;FU$3<=$FR45);ET(FU$3>=$FS45;FU$3<=$FU45);ET(FU$3>=$FX45;FU$3<=$GB45);ET(FU$3>=$GE45;FU$3<=$GI45);ET(FU$3>=$GL45;FU$3<=$GP45));"CCS";"")))))))}

J’espère être suffisamment explicite dans ma demande merci d'avance
 

Pièces jointes

Hello

essaie ce code dans un module standard
VB:
Sub formulesCumul()

Set ListeCollaborateurs = Range("FO14:FO23")

For Each Collaborateur In ListeCollaborateurs
    lig = Collaborateur.Row
    Set DebZone = Range("FO38:FO118").Find(Collaborateur, lookat:=xlWhole)
    If Not DebZone Is Nothing Then
        zoneCode = DebZone.Offset(1, 0).Resize(7, 1).Address
        DebPeriode1 = Range("FP" & DebZone.Row + 1).Resize(7).Address
        FinPeriode1 = Range("FR" & DebZone.Row + 1).Resize(7).Address
    
        DebPeriode2 = Range("FS" & DebZone.Row + 1).Resize(7).Address
        FinPeriode2 = Range("FU" & DebZone.Row + 1).Resize(7).Address
    
        DebPeriode3 = Range("FX" & DebZone.Row + 1).Resize(7).Address
        FinPeriode3 = Range("GB" & DebZone.Row + 1).Resize(7).Address
    
        DebPeriode4 = Range("GE" & DebZone.Row + 1).Resize(7).Address
        FinPeriode4 = Range("GI" & DebZone.Row + 1).Resize(7).Address
    
        DebPeriode5 = Range("GL" & DebZone.Row + 1).Resize(7).Address
        Finperiode5 = Range("GP" & DebZone.Row + 1).Resize(7).Address
    
    
        formule = "=IfError(INDEX(" & zoneCode & ",(sumproduct((FU3>=" & DebPeriode1 & ")*(FU3<=" & FinPeriode1 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode2 & ")*(FU3<=" & FinPeriode2 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode3 & ")*(FU3<=" & FinPeriode3 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode4 & ")*(FU3<=" & FinPeriode4 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode5 & ")*(FU3<=" & Finperiode5 & ")*row(" & zoneCode & ")))-38),"""")"

        Range("FU" & lig).Formula = formule
        Range("FU" & lig).Resize(1, 365).FillRight
    End If

Next Collaborateur
End Sub
Bonsoir et bonne annee
ca ne fonctionne que pour le premier collaborateur ?
MERCI
 
bon .j'ai posté une demande pour cette fonction Evaluate.;
en attendant, voici une solution simple et efficace..
on met les formules.. et on fait un copier coller special valeurs..
bonjour et bonne annee
c'est exactement ce que je souhaite mais ca fonctionne qu'avec le premier collaborateur et il
j'aurai besoin qu'elle fonctionne avec l’événement
Private Sub Worksheet_Change(ByVal Target As Range)
merci d’avance
 
Bonjour et bonne année à toi également

Bonsoir et bonne annee
ca ne fonctionne que pour le premier collaborateur ?
MERCI

euh.. non.ca fonctionne pour tous les collaborateurs (dans ton fichier exemple: du Collaborateur 1 à 10 (Zone FO14:FO23)

vu qu'il n'y a des dates QUE pour le collaborateur 1, c'est sans doute pour ca qu'il n'y pas d'autres résultats.....?..
 
Bonjour et bonne année à toi également



euh.. non.ca fonctionne pour tous les collaborateurs (dans ton fichier exemple: du Collaborateur 1 à 10 (Zone FO14:FO23)

vu qu'il n'y a des dates QUE pour le collaborateur 1, c'est sans doute pour ca qu'il n'y pas d'autres résultats.....?..
Bonjour merci pour ton interet
je te confirme après teste a nouveau pour tous les collaborateurs ca ne fonctionne pas
 
bon.. comme je me suis amusé à remplir des data à ta place.. je vois qu'effectivement.. il y a une erreur dans la formule... à cause du 38
remplace par
VB:
        formule = "=IfError(INDEX(" & zonecode & ",(sumproduct((FU3>=" & DebPeriode1 & ")*(FU3<=" & FinPeriode1 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode2 & ")*(FU3<=" & FinPeriode2 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode3 & ")*(FU3<=" & FinPeriode3 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode4 & ")*(FU3<=" & FinPeriode4 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode5 & ")*(FU3<=" & Finperiode5 & ")*row(" & zonecode & ")))-" & DebZone.Row - 1 & "),"""")"
 
Hello

sans plus de détail que "Ca ne marche pas".. je ne peux rien de plus pour toi...
Re
je suppose que le problème viens de la formule
formule = "=IfError(INDEX(" & zoneCode & ",(sumproduct((FU3>=" & DebPeriode1 & ")*(FU3<=" & FinPeriode1 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode2 & ")*(FU3<=" & FinPeriode2 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode3 & ")*(FU3<=" & FinPeriode3 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode4 & ")*(FU3<=" & FinPeriode4 & ")*row(" & zoneCode & "))+sumproduct((FU3>=" & DebPeriode5 & ")*(FU3<=" & Finperiode5 & ")*row(" & zoneCode & ")))-38),"""")"
 
bon.. comme je me suis amusé à remplir des data à ta place.. je vois qu'effectivement.. il y a une erreur dans la formule... à cause du 38
remplace par
VB:
        formule = "=IfError(INDEX(" & zonecode & ",(sumproduct((FU3>=" & DebPeriode1 & ")*(FU3<=" & FinPeriode1 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode2 & ")*(FU3<=" & FinPeriode2 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode3 & ")*(FU3<=" & FinPeriode3 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode4 & ")*(FU3<=" & FinPeriode4 & ")*row(" & zonecode & "))+sumproduct((FU3>=" & DebPeriode5 & ")*(FU3<=" & Finperiode5 & ")*row(" & zonecode & ")))-" & DebZone.Row - 1 & "),"""")"
re super merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour