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

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

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

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

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+
 
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
 
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
 
- 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