probleme variable bloc

judoka0209

XLDnaute Occasionnel
bonjour, staple 1600 ma enormement aidé sur ma macro
j'ai un autre probleme sur une autre partie de ma macro j'ai une erreur de bloc

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

c = 6
End If
Next
End With

Range("C8:NC8").Select
Selection.ClearContents
Dim plage1 As Range, plage2 As Range, d As Range
Set plage1 = Sheets("ep").Range("$D$10:$BC$10")
Set plage2 = Sheets("ep").Range("$D$5:$BC$5")
With Application
.ScreenUpdating = False
For Each d In Range("C8:NC8")

If .CountIf(plage1, "b") * .CountIf(c.Offset(-6), "mar") * .CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-5)))) * _
.CountIf(plage2, MonthName(Month(c.Offset(-2)))) * .CountIf(c.Offset(1), "a") Then
c = 6
End If
Next
End With
End Sub
merci
 

Pièces jointes

  • Planning equipe 3x8 201821.xlsm
    66 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re,

OK, donc vos tests sur le mois ne servaient à rien, il faut tout revoir.

Si en ligne 2 de la feuille "ep" il y a bien le 1er jour de la semaine, utilisez cette macro :
Code:
Sub Test()
Dim plageA As Range, plageB As Range, jour, c As Range, i As Variant
Set plageA = Sheets("ep").Range("F7:BC7")
Set plageB = Sheets("ep").Range("F2:BC2") 'ligne 2 et non pas 5
jour = Array("ven", "sam", "dim") 'liste à adapter
With Application
    .ScreenUpdating = False
    Range("C13:NC13").ClearContents
    For Each c In Range("C13:NC13")
        If UCase(c.Offset(-8)) = "N" Then
            If IsNumeric(.Match(c.Offset(-11), jour, 0)) Then
                i = .Match(c.Offset(-10), plageB)
                If IsNumeric(i) Then If UCase(plageA(i)) = "A" Then c = 6
            End If
        End If
    Next
End With
End Sub
Edit : la macro est très rapide mais en testant la valeur "N" en premier c'est encore plus rapide.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour judoka0209, le forum,

Chez moi With Application/End With ne fait pas gagner de temps, il est donc plus simple d'écrire :
Code:
Sub Test()
Dim plageA As Range, plageB As Range, jour, c As Range, i As Variant
Set plageA = Sheets("ep").Range("F7:BC7")
Set plageB = Sheets("ep").Range("F2:BC2") 'ligne 2 et non pas 5
jour = Array("ven", "sam", "dim") 'liste à adapter
Application.ScreenUpdating = False
Range("C13:NC13").ClearContents
For Each c In Range("C13:NC13")
    If UCase(c.Offset(-8)) = "N" Then
        If IsNumeric(Application.Match(c.Offset(-11), jour, 0)) Then
            i = Application.Match(c.Offset(-10), plageB)
            If IsNumeric(i) Then If UCase(plageA(i)) = "A" Then c = 6
        End If
    End If
Next
End Sub
Sur le fichier du post #25 la macro s'exécute chez moi en moins de 4 millièmes de seconde.

Bonne journée.
 

Discussions similaires

Réponses
11
Affichages
292

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine