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

Lone-wolf

XLDnaute Barbatruc
Bonsoir judoka, Jean Marie, le Forum :)

Fait une sauvegarde du classeur, puis fait un test avec ceci

VB:
Sub Test_II()
Dim plageA As Range, plageB As Range, c As Range
Dim plage1 As Range, plage2 As Range, d As Range
Dim a, b, g, h, e, f, i, j, k, l

    Application.ScreenUpdating = False
    Set plageA = Sheets("ep").Range("D7:BC7")
    Set plageB = Sheets("ep").Range("D5:BC5")
    Set plage1 = Sheets("ep").Range("D10:BC10")
    Set plage2 = Sheets("ep").Range("D5:BC5")

    On Error Resume Next
    a = WorksheetFunction.CountIf(plageA, "a")

    With Feuil1
        For Each c In .Range("C5:NC5")
            b = WorksheetFunction.CountIf(c.Offset(-3), "jeu")
            g = WorksheetFunction.CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-2))))
            h = WorksheetFunction.CountIf(plageB, MonthName(Month(c.Offset(-2))))
            e = WorksheetFunction.CountIf(c.Offset(1), "a")
        Next
        If a * b * g * h * e Then c = 6
        .Range("C8:NC8").ClearContents

        f = WorksheetFunction.CountIf(plage1, "a")

        For Each d In .Range("C8:NC8")
            i = WorksheetFunction.CountIf(d.Offset(-6), "jeu")
            j = WorksheetFunction.CountIf(Range("c1:nc31"), MonthName(Month(d.Offset(-5))))
            k = WorksheetFunction.CountIf(plage2, MonthName(Month(d.Offset(-2))))
            l = WorksheetFunction.CountIf(d.Offset(1), "a")
            If f * i * j * k * l Then d = 6
        Next
    End With
End Sub
 

job75

XLDnaute Barbatruc
Bonjour judoka0209, JM, Lone-wolf,

Déjà si vous voulez que le bouton "gestion" serve à quelque chose il faut cette macro dans la 1ère feuille :
Code:
Private Sub CommandButton2_Click()
Test_II
End Sub
Ensuite pour que la 2ème boucle de la macro Test_II fonctionne il faut la corriger ainsi :
Code:
    For Each c In Range("C8:NC8")
    If .CountIf(plage1, "a") * .CountIf(c.Offset(-6), "jeu") * .CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-5)))) * _
        .CountIf(plage2, MonthName(Month(c.Offset(-5)))) * .CountIf(c.Offset(1), "a") Then
    c = 6
    End If
    Next
Je n'ai pas essayé de savoir quelle est l'utilité de cette macro...

A+
 

judoka0209

XLDnaute Occasionnel
bonjour lone wolf je viens d'essayer ta macro j'ai ete obligé de la modifier un peu pour la ligne c8:bc8 par contre pour la ligne c5:bc5 ca marche pas
tu peux voir pourquoi
je remet le fichier avec ta macro
merci

Sub Test_II()
Dim plageA As Range, plageB As Range, c As Range
Dim plage1 As Range, plage2 As Range, d As Range
Dim a, b, g, h, e, f, i, j, k, l

Application.ScreenUpdating = False
Set plageA = Sheets("ep").Range("D7:BC7")
Set plageB = Sheets("ep").Range("D5:BC5")
Set plage1 = Sheets("ep").Range("D10:BC10")
Set plage2 = Sheets("ep").Range("D5:BC5")

On Error Resume Next
a = WorksheetFunction.CountIf(plageA, "a")

With Feuil1
For Each c In .Range("C5:NC5")
b = WorksheetFunction.CountIf(c.Offset(-3), "jeu")
g = WorksheetFunction.CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-2))))
h = WorksheetFunction.CountIf(plageB, MonthName(Month(c.Offset(-2))))
e = WorksheetFunction.CountIf(c.Offset(1), "a")
Next
If a * b * g * h * e Then c = 6
.Range("C8:NC8").ClearContents

f = WorksheetFunction.CountIf(plage1, "a")

For Each d In .Range("C8:NC8")
i = WorksheetFunction.CountIf(d.Offset(-6), "jeu")
j = WorksheetFunction.CountIf(Range("c1:nc31"), MonthName(Month(d.Offset(-5))))
k = WorksheetFunction.CountIf(plage2, MonthName(Month(d.Offset(-5))))
l = WorksheetFunction.CountIf(d.Offset(1), "a")
If f * i * j * k * l Then d = 6
Next
End With
End Sub
 

Pièces jointes

  • Planning equipe 3x8 201821.xlsm
    55.9 KB · Affichages: 17

judoka0209

XLDnaute Occasionnel
Bonsoir Lone-Wolf

@Lone-wolf
Avant de lire de message#4, il serait logique que le demandeur lise le message#2
(voir pour cela le message#7)
;);)
Bonjour judoka0209, JM, Lone-wolf,

Déjà si vous voulez que le bouton "gestion" serve à quelque chose il faut cette macro dans la 1ère feuille :
Code:
Private Sub CommandButton2_Click()
Test_II
End Sub
Ensuite pour que la 2ème boucle de la macro Test_II fonctionne il faut la corriger ainsi :
Code:
    For Each c In Range("C8:NC8")
    If .CountIf(plage1, "a") * .CountIf(c.Offset(-6), "jeu") * .CountIf(Range("c1:nc31"), MonthName(Month(c.Offset(-5)))) * _
        .CountIf(plage2, MonthName(Month(c.Offset(-5)))) * .CountIf(c.Offset(1), "a") Then
    c = 6
    End If
    Next
Je n'ai pas essayé de savoir quelle est l'utilité de cette macro...

A+
bonjour et merci du temps que tu passe ca marche nockel
le bouton gestion je l'ai retiré volontairement il sert a rien sur ce planning
encore merci
 

judoka0209

XLDnaute Occasionnel
comment mettre plusieurs case dans cette formule mes cases ne marche pas
Sub Test()
Range("C13:NC13").Select
Selection.ClearContents
Dim plageA As Range, plageB As Range, c As Range
Set plageA = Sheets("ep").Range("$D$10:$BC$10")
Set plageB = Sheets("ep").Range("$D$5:$BC$5")
With Application
.ScreenUpdating = False

For Each c In Range("C13:NC13")
Select Case Month(c.Offset(-10))
Case 1
If .CountIf(plageA, "a") * .CountIf(c.Offset(-11), "ven") * .CountIf(Range("c1:nc1"), MonthName(Month(c.Offset(-10)))) * _
.CountIf(plageB, MonthName(Month(c.Offset(-10)))) * .CountIf(c.Offset(-8), "a") Then
c = 6
Case 2
If .CountIf(plageA, "a") * .CountIf(c.Offset(-11), "sam") * .CountIf(Range("c1:nc1"), MonthName(Month(c.Offset(-10)))) * _
.CountIf(plageB, MonthName(Month(c.Offset(-10)))) * .CountIf(c.Offset(-8), "a") Then
c = 6
Case 3
If .CountIf(plageA, "a") * .CountIf(c.Offset(-11), "dim") * .CountIf(Range("c1:nc1"), MonthName(Month(c.Offset(-10)))) * _
.CountIf(plageB, MonthName(Month(c.Offset(-10)))) * .CountIf(c.Offset(-8), "a") Then
c = 6


End If
End Select
Next
End With
End Sub

merci
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@judoka0209
???
Pourquoi tu repars sur le Select Case alors qu'aprés avoir suggéré son emploi, j'y ai renoncé (pour allégér le code) en utilisant
MonthName et Month et Offset?

Quant à la syntaxe du Select Case, je t'ai expliqué où trouver son mode d'utilisation et KVL t'a également donné des explications et fourni un exemple complet (mais ça c'était dans ton autre fil..; d'où l'intérêt ne pas multiplier les fils ;) )

EDITION: Bonjour job75
 
Dernière édition:

Statistiques des forums

Discussions
312 111
Messages
2 085 399
Membres
102 882
dernier inscrit
Sultan94