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

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

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