XL 2013 macro redondance

judoka0209

XLDnaute Occasionnel
bonjour, j'ai un soucis pour integrer des formules que j'ai faite et quelles s'executent en macro
je ne sais pas du tout comment faire
=SI(NB.SI('[Planning_EP.xlsm]année en cours'!$D$7:$BC$7;"a")*NB.SI(C2;"jeu")*NB.SI($C$1;"janvier")*NB.SI('[Planning_EP.xlsm]année en cours'!$D$5:$BC$5;"janvier")*NB.SI(C6;"A");6;"")
=SI(NB.SI('[Planning_EP.xlsm]année en cours'!$D$7:$BC$7;"a")*NB.SI(AG2;"jeu")*NB.SI($C$1;"janvier")*NB.SI('[Planning_EP.xlsm]année en cours'!$D$5:$BC$5;"janvier")*NB.SI(AG6;"A");6;"")
=SI(NB.SI('[Planning_EP.xlsm]année en cours'!$D$7:$BC$7;"a")*NB.SI(AH2;"jeu")*NB.SI($AH$1;"février")*NB.SI('[Planning_EP.xlsm]année en cours'!$D$5:$BC$5;"février")*NB.SI(AH6;"A");6;"")
=SI(NB.SI('[Planning_EP.xlsm]année en cours'!$D$7:$BC$7;"a")*NB.SI(BI2;"jeu")*NB.SI($AH$1;"février")*NB.SI('[Planning_EP.xlsm]année en cours'!$D$5:$BC$5;"février")*NB.SI(BI6;"A");6;"")

c'est du 1er janvier au 31 decembre
merci
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

J'ai simplifié le code (mais suis pas sur de son efficience ;)
VB:
Sub Test_II()
Dim plageA As Range, plageB As Range, c As Range
Set plageA = Sheets("ep").Range("$D$7:$BC$7")
Set plageB = Sheets("ep").Range("$D$5:$BC$5")
With Application
    .ScreenUpdating = False
    For Each c In Range("C5:NC5")
    MsgBox MonthName(Month(c.Offset(-2)))
    If .CountIf(plageA, "a") * .CountIf(c.Offset(-3), "jeu") * .CountIf(Range("C1"), MonthName(Month(c.Offset(-2)))) * _
        .CountIf(plageB, MonthName(Month(c.Offset(-2)))) * .CountIf(c.Offset(1), "a") Then
        c.Value = 6
    End If
    Next
End With
End Sub

Je te laisse tester*.

*: il faut d'abord effacer les formules en C5:NC5 avant de lancer la macro.
 

judoka0209

XLDnaute Occasionnel
bonjour, j'aurais besoin d'explication
If .CountIf(plageA, "a") * .CountIf(c.Offset(-3), "jeu") * .CountIf(Range("C1"), MonthName(Month(c.Offset(-2)))) * _
.CountIf(plageB, MonthName(Month(c.Offset(-2)))) * .CountIf(c.Offset(1), "a") Then

pourquoi MonthName(Month(c.Offset(-2) je comprend pas on part de "C1" et on recule de 2 colonne?
j'aimerai comprendre la formule pour la remodifier
merci
 

judoka0209

XLDnaute Occasionnel
encore une chose j'ai vu ta simplification elle met bien les mois dans la msgbox mais met les 6 que sur janvier et non sur toute l'année

comment retirer ta msgbox
quand je met juste MonthName(Month(c.Offset(-2))) j'ai une erreur
je suis nul :( mais j'essaie de m'ameliorer
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@judoka0209
Comment retirer la MsgBox?
(bah simplement en supprimant la ligne idoine dans le codeVBA)

Sinon, pour comprendre la syntaxe Offset
(il suffit d'appuyer sur la touche F1 quand tu es dans VBE)
En résumé
Offset(Ligne,Colonne)
Donc Offset(-2), c'est deux lignes au dessus
 

judoka0209

XLDnaute Occasionnel
super j'ai reussi à le faire sur toute l'année
merci beaucoup
petite question encore comment mettre un autre if
dans la formule
mais, il faut qu'elle soit separé car j'ai d'autre if a mettre
merci
Sub Test_II()
Dim plageA As Range, plageB As Range, c As Range
Set plageA = Sheets("ep").Range("$D$7:$BC$7")
Set plageB = Sheets("ep").Range("$D$5:$BC$5")
With Application
.ScreenUpdating = False
For Each c In Range("C5:NC5")

If .CountIf(plageA, "a") * .CountIf(c.Offset(-3), "jeu") * .CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-2)))) * _
.CountIf(plageB, MonthName(Month(c.Offset(-2)))) * .CountIf(c.Offset(1), "a") Then
If .CountIf(plageA, "b") * .CountIf(c.Offset(-3), "mar") * .CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-2)))) * _
.CountIf(plageB, MonthName(Month(c.Offset(-2)))) * .CountIf(c.Offset(1), "m") Then
c = 6

End If
Next
End With
End Sub

il me met une erreur
 
Dernière édition:

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11