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

judoka0209

XLDnaute Occasionnel
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

je prefererai mettre
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")

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

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

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

Next
End With
End Sub

mais ca marche pas, ca me met une erreur de compilation" next sans for"
c'est pour cela que j'ai essayer autre chose
merci
 

Staple1600

XLDnaute Barbatruc
Re judoka, job75

@judoka0209
Avec un Select Case, tu vas réécrire 12 fois (pour les 12 mois) la même partie de ton code
C'est pour éviter cela, que j'avais abandonné la voie du Select Case

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
Re judoka, job75

@judoka0209
Avec un Select Case, tu vas réécrire 12 fois (pour les 12 mois) la même partie de ton code
C'est pour éviter cela, que j'avais abandonné la voie du Select Case
non je veux pas qu'il me fasse les mois mais qu'il me mette 6 dans le vendredi, samedi et dimanche de la ligne 13
si je met qu'un IF ca fonctionne bien mais avec les 2 autres ca marche pas
 

judoka0209

XLDnaute Occasionnel
Re

@judoka0209
Tu as écrit dans ton message#13
Select Case Month(c.Offset(-10))
Ce qui laisse penser que tu boucles sur les douze mois, non ?
oui tout a fait ca me fait bien ca sur 12 mois j'ai bien le vendredi de fait mais pas le samedi ni le dimanche
je ne sais pas comment faire pour mettre plusieurs IF dans la formule
c'est ca mon probleme pas la formule

merci
 

job75

XLDnaute Barbatruc
Re,
non je veux pas qu'il me fasse les mois mais qu'il me mette 6 dans le vendredi, samedi et dimanche de la ligne 13
Eh oui, il suffisait de le dire (et surtout de ne pas le faire !!!) :
Code:
Sub Test()
Dim plageA As Range, plageB As Range, c As Range, mois As String
Set plageA = Sheets("ep").Range("D10:BC10")
Set plageB = Sheets("ep").Range("D5:BC5")
With Application
    .ScreenUpdating = False
    Range("C13:NC13").ClearContents
    If .CountIf(plageA, "A") = 0 Then Exit Sub
    For Each c In Range("C13:NC13")
        If Weekday(c.Offset(-10), 2) > 4 Then 'vendredi, samedi, dimanche
            mois = MonthName(Month(c.Offset(-10)))
            If .CountIf(Range("C1:NC1"), mois) * .CountIf(plageB, mois) * .CountIf(c.Offset(-7), "A") Then c = 6
        End If
    Next
End With
End Sub
A+
 

Pièces jointes

  • Planning equipe 3x8 2018(1).xlsm
    65.7 KB · Affichages: 10

judoka0209

XLDnaute Occasionnel
Re,

Eh oui, il suffisait de le dire (et surtout de ne pas le faire !!!) :
Code:
Sub Test()
Dim plageA As Range, plageB As Range, c As Range, mois As String
Set plageA = Sheets("ep").Range("D10:BC10")
Set plageB = Sheets("ep").Range("D5:BC5")
With Application
    .ScreenUpdating = False
    Range("C13:NC13").ClearContents
    If .CountIf(plageA, "A") = 0 Then Exit Sub
    For Each c In Range("C13:NC13")
        If Weekday(c.Offset(-10), 2) > 4 Then 'vendredi, samedi, dimanche
            mois = MonthName(Month(c.Offset(-10)))
            If .CountIf(Range("C1:NC1"), mois) * .CountIf(plageB, mois) * .CountIf(c.Offset(-7), "A") Then c = 6
        End If
    Next
End With
End Sub
A+
super mais j'ai deja du mal a comprendre la premiere formule la tu m'as tout changé, il y aurait il pas une facon de rester dans la meme formule
pour vendredi
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

pour samedi
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

et pour dimanche
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

en gardant la meme structure meme si ca alourdi le programme pour moi c'est plus simple à modifier
merci
 

job75

XLDnaute Barbatruc
Re,

Maintenant si vous voulez mettre "en dur" la liste des jours pas de problème :
Code:
Sub Test()
Dim plageA As Range, plageB As Range, jour, c As Range, mois As String
Set plageA = Sheets("ep").Range("D10:BC10")
Set plageB = Sheets("ep").Range("D5:BC5")
jour = Array("ven", "sam", "dim") 'liste à adapter
With Application
    .ScreenUpdating = False
    Range("C13:NC13").ClearContents
    If .CountIf(plageA, "A") = 0 Then Exit Sub
    For Each c In Range("C13:NC13")
        If IsNumeric(.Match(c.Offset(-11), jour, 0)) Then
            mois = MonthName(Month(c.Offset(-10)))
            If .CountIf(Range("C1:NC1"), mois) * .CountIf(plageB, mois) * .CountIf(c.Offset(-7), "A") Then c = 6
        End If
    Next
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Planning equipe 3x8 2018(2).xlsm
    68.5 KB · Affichages: 12

judoka0209

XLDnaute Occasionnel
Re,

Maintenant si vous voulez mettre "en dur" la liste des jours pas de problème :
Code:
Sub Test()
Dim plageA As Range, plageB As Range, jour, c As Range, mois As String
Set plageA = Sheets("ep").Range("D10:BC10")
Set plageB = Sheets("ep").Range("D5:BC5")
jour = Array("ven", "sam", "dim") 'liste à adapter
With Application
    .ScreenUpdating = False
    Range("C13:NC13").ClearContents
    If .CountIf(plageA, "A") = 0 Then Exit Sub
    For Each c In Range("C13:NC13")
        If IsNumeric(.Match(c.Offset(-11), jour, 0)) Then
            mois = MonthName(Month(c.Offset(-10)))
            If .CountIf(Range("C1:NC1"), mois) * .CountIf(plageB, mois) * .CountIf(c.Offset(-7), "A") Then c = 6
        End If
    Next
End With
End Sub
Fichier (2).

A+

ca marche pas je t'ai remis le fichier avec ta macro
 

Pièces jointes

  • Planning equipe 3x8 2018(2).xlsm
    61.6 KB · Affichages: 16

job75

XLDnaute Barbatruc
Re,

Au lieu de rester les bras croisés secouez-vous un peu.

Regardez le fichier du post #24 (c'est celui du post #1) : la ligne des "A" c'est la ligne 6.

Alors que dans votre (nouveau) fichier du post #25 la ligne des "A" c'est la ligne 5...

Je vous laisse adapter la macro en conséquence, cela prend une demi-seconde.

Et l'on verra ainsi si l'aide qu'on vous apporte sert à quelque chose ou si vous êtes indécrottable.

A+
 

judoka0209

XLDnaute Occasionnel
Re,

Au lieu de rester les bras croisés secouez-vous un peu.

Regardez le fichier du post #24 (c'est celui du post #1) : la ligne des "A" c'est la ligne 6.

Alors que dans votre (nouveau) fichier du post #25 la ligne des "A" c'est la ligne 5...

Je vous laisse adapter la macro en conséquence, cela prend une demi-seconde.

Et l'on verra ainsi si l'aide qu'on vous apporte sert à quelque chose ou si vous êtes indécrottable.

A+
j'ai bien regarde la ligne des "A" c'est la ligne 5
 

judoka0209

XLDnaute Occasionnel
re bonjour,
je viens de m'apercevoir d'un soucis
le tableau à un peu change mais le probleme est qu'il me met bien un 6 dans les cases sous N, 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

Sub ep()
'equipe A
Dim plageA As Range, plageB As Range, jour, c As Range, mois As String
Set plageA = Sheets("ep").Range("f7:BC7")
Set plageB = Sheets("ep").Range("f5:BC5")
jour = Array("ven", "sam", "dim") 'liste à adapter
With Application
.ScreenUpdating = False
Range("C13:NC13").ClearContents
If .CountIf(plageA, "A") = 0 Then Exit Sub
For Each c In Range("C13:NC13")
If IsNumeric(.Match(c.Offset(-11), jour, 0)) Then
mois = MonthName(Month(c.Offset(-10)))
If .CountIf(Range("C1:NC1"), mois) * .CountIf(plageB, mois) * .CountIf(c.Offset(-8), "N") Then c = 6
End If
Next
End With
End Sub