Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Bonjour judoka0209,
mais ne prend pas en compte le fait qu'il n'y a pas de A dans la plage F7:BC7, il met N meme si la case en vide
1) La macro met des "N" nulle part...

2) F7:BC7 c'est plageA et l'instruction :
Code:
 If .CountIf(plageA, "A") = 0 Then Exit Sub
empêche l'inscription des 6 en ligne 13 s'il n'y a pas de A.

Evitez de dire n'importe quoi.

A+
 

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
334
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…