probleme variable bloc

  • Initiateur de la discussion Initiateur de la discussion judoka0209
  • 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 !

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

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:
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.
 
- 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

Réponses
5
Affichages
707
Réponses
4
Affichages
581
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
4
Affichages
671
Retour