Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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


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

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

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


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+
 
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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…