Microsoft 365 Appel de procédure qui ne fonctionne pas

Lulay

XLDnaute Nouveau
Bonjour à toutes et tous,

J'ai créé cette procédure :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim i2 As Integer
Dim myRange As Range

i = 50
i2 = 64
Set myRange = Worksheets("Équipe C").Range("BG" & i & ":BT" & i)

For i = 49 To 365
If Range("BG" & i & ":BT" & i).Value = 84 Then
Range("BU" & i & ":CC" & i).Locked = True
Else
Range("BU" & i2 & ":CC" & i2).Locked = False
End If
i = i + 1
i2 = i2 + 1
Exit For

End Sub

Mais quand j'entre des valeurs dans le range qui totalisent 84, ça ne fonctionne pas.
Quelqu'un peut me dire ce que je fais de pas correct svp ?

Merci beaucoup
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Ceci n'est qu'un test illustratif
VB:
Sub CequeJaiCompris()
Dim rng As Range
For i = 1 To 5
Set rng = Range("BU" & i).Resize(, 9)
rng.Locked = Application.Sum(rng) = 84
Next
End Sub
Si j'ai bon, remettre dans le caquelon de la procédure évènementielle ;)
(en faisant les adaptations nécessaires)
 

Lulay

XLDnaute Nouveau
Bonsoir le fil

Ceci n'est qu'un test illustratif
VB:
Sub CequeJaiCompris()
Dim rng As Range
For i = 1 To 5
Set rng = Range("BU" & i).Resize(, 9)
rng.Locked = Application.Sum(rng) = 84
Next
End Sub
Si j'ai bon, remettre dans le caquelon de la procédure évènementielle ;)
(en faisant les adaptations nécessaires)
Merci Staple, je vais essayer ça demain et je vous redonne des nouvelles. Désolée pour le code, je pense que c’est la première fois que je post (ou la 2e) et je ne suis pas familière avec la façon e faire mais demain j’envoie un fichier, ce sera plus facile à comprendre 🙂
En attendant Merci !
 

TooFatBoy

XLDnaute Barbatruc
Je n'avais regardé que les erreurs de syntaxe, parce que c'est bien ce qu'il faut corriger en premier. 😉

Mais il y a probablement en plus la logique qui ne va pas car il est bizarre d'avoir un code de la forme
VB:
For i = a To b
    ...
    i = i + 1
Next i
 
Dernière édition:

Lulay

XLDnaute Nouveau
Bonjour Messieurs et Mesdames,

En fait ce que j’essaie de faire c’est que si la somme de BG6 à BT6 = 84, je veux que les 7 prochaines cellules soient bloqués et ensuite on décale de 1 donc somme de BH6 à BU6 = 84, 7 prochaines cellules bloquées.

Je me rend compte que c'est pas la bonne façon de faire car quand j'entre 12 dans une cellule la boucle part et ça va devenir lourd à gérer. Mais je sais pas trop comment faire autrement. Il faut que ça se fasse dès que j'atteint 84 dans le Range de BG à EL
Voici mon fichier.

Merci :)
 

Pièces jointes

  • Calendrier de vacances ExDwn.xlsm
    53 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Bonsoir

Juste pour tester
Remplace (temporairement) ta procédure existante par celle-ci
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(Cells(Target.Row, "BG"), Cells(Target.Row, "EL"))
If Not Intersect(rng, Target) Is Nothing Then
If Application.CountA(rng) = 84 Then
MsgBox "1984, trés bon livre!"
End If
End If
End Sub
Et remplis tes 84 cellules sur la ligne 6 par exemple
(de BG6 à EL6)
Ensuite remplace l'affichage du Msgbox par le code VBA que tu veux voir s'exécuter.

NB: Sinon il y a des choses que je ne comprends pas dans:
c’est que si la somme de BG6 à BT6 = 84, je veux que les 7 prochaines cellules soient bloqués et ensuite on décale de 1 donc somme de BH6 à BU6 = 84, 7 prochaines cellules bloquées.
Car BU est contenu BG:EL
 

Lulay

XLDnaute Nouveau
Bonsoir

Juste pour tester
Remplace (temporairement) ta procédure existante par celle-ci
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(Cells(Target.Row, "BG"), Cells(Target.Row, "EL"))
If Not Intersect(rng, Target) Is Nothing Then
If Application.CountA(rng) = 84 Then
MsgBox "1984, trés bon livre!"
End If
End If
End Sub
Et remplis tes 84 cellules sur la ligne 6 par exemple
(de BG6 à EL6)
Ensuite remplace l'affichage du Msgbox par le code VBA que tu veux voir s'exécuter.

NB: Sinon il y a des choses que je ne comprends pas dans:

Car BU est contenu BG:EL
Oui Staple je n'ai pas été claire
En fait, la valeur pour chaque jour de vacances est 12 (pour les cellules colorées, les cellules non colorées ce sont des jours de congés normaux) Donc quand on atteint 84, on ne peut pas prendre la semaine suivante car le maximum de semaines consécutives autorisées est 2 donc 7x12 = 84 (7 parce que c'est 7 jours colorés où il y a un 12)
2 semaines à partir du 19 juin, ça fait BG à BT, donc la prochaine semaine bloqué.
Est-ce que c'est plus clair ?
 

Staple1600

XLDnaute Barbatruc
Re

C'est plus clair
Et comme ceci cela donne quoi?
VB:
rivate Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(Cells(Target.Row, "BG"), Cells(Target.Row, "EL"))
If Not Intersect(rng, Target) Is Nothing Then
If Application.Sum(rng) = 84 Then
Me.Unprotect
Target.Offset(, 1).Resize(, 7).Locked = True
Me.Protect
End If
End If
End Sub
 

Lulay

XLDnaute Nouveau
Re

C'est plus clair
Et comme ceci cela donne quoi?
VB:
rivate Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(Cells(Target.Row, "BG"), Cells(Target.Row, "EL"))
If Not Intersect(rng, Target) Is Nothing Then
If Application.Sum(rng) = 84 Then
Me.Unprotect
Target.Offset(, 1).Resize(, 7).Locked = True
Me.Protect
End If
End If
End Sub
ça protège tout le classeur, mais je dois pouvoir entrer des 12 dans les autres cellules suivant la semaine bloquée jusqu'à ce que la banque d'heures soit à 0, colonne E et G
Quand la semaine suivante est bloquée, la personne peut encore prendre 2 semaines et ça doit bloquer la semaine suivante, ainsi de suite jusqu'à ce qu'on ait atteint le maximum de vacances autorisées ou EL
Je dois faire ça pour chaque ligne et pour chaque équipe et il y a 5 équipes.....
 

Lulay

XLDnaute Nouveau
C'est pour ça qu'au départ j'avais fait une boucle et cette procédure :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Colonne1 As Integer
Dim Colonne2 As Integer
Dim Colonne3 As Integer
Dim Colonne4 As Integer

Dim myRange As Range
Dim maSomme As Integer
Dim Ligne1 As Integer


Ligne1 = 6
Colonne1 = 59
Colonne2 = 73
Colonne3 = 74
Colonne4 = 81
Set myRange = Worksheets("Équipe C").Range("BG" & Ligne1 & ":BT" & Ligne1)
'Set myRange = Worksheets("Équipe C").Range(Colonne1 & Ligne1 & ":" & Colonne2 & Ligne1)

For Colonne1 = 59 To 365
    maSomme = Application.WorksheetFunction.Sum(myRange)
    If maSomme = 84 Then
        Range(Colonne3 & Ligne1 & ":" & Colonne4 & Ligne1).Locked = True
    Else
        Range(Colonne3 & Ligne1 & ":" & Colonne4 & Ligne1).Locked = False
    End If
    Colonne1 = Colonne1 + 1
    Colonne2 = Colonne2 + 1
    Colonne3 = Colonne3 + 1
    Colonne4 = Colonne4 + 1
 Next

End Sub
 

Lulay

XLDnaute Nouveau
Re

Trop compliqué pour mes 27 neurones de 23h24
Je passe la main à d'autres ;)

NB: Si tu veux mettre la propriété de certaines cellules sur Locked=True, il faut bien ensuite protéger la feuille pour que ce soit effectif , non ?
Non pas besoin, je le fais manuellement et je ne protège pas le classeur et la cellule est protégée.

Merci pour ton aide, tu es en Europe, moi je suis au Québec, on a 6 heures de décalage, c'est déjà super gentil de m'avoir répondu :)
 

Staple1600

XLDnaute Barbatruc
Re

Alors dans ce cas retire, les deux lignes de code dans ma dernière macro
Me.Unprotect
Me.Unprotect

Ah la belle Province, il faut que j'y aille un jour ;)
J'aurai du...me taire
Cette périphrase est utilisée plus fréquemment en dehors du Québec (ailleurs au Canada, médias de langue anglaise, France) qu'au Québec lui-même, où elle est souvent perçue comme un cliché.
 

Lulay

XLDnaute Nouveau
Re

Alors dans ce cas retire, les deux lignes de code dans ma dernière macro
Me.Unprotect
Me.Unprotect

Ah la belle Province, il faut que j'y aille un jour ;)
J'aurai du...me taire
Cette périphrase est utilisée plus fréquemment en dehors du Québec (ailleurs au Canada, médias de langue anglaise, France) qu'au Québec lui-même, où elle est souvent perçue comme un cliché.
Moi je la perçoit pas comme un cliché, mais plutôt un intérêt à notre Province :)
En fait, pour en revenir à nos moutons, ton code fonctionne, mais si la personne qui entre les données a fait une erreur et veut enlever un 12, (au lieu de bloquer les cellules j'ai mis en rouge), les cellules restent en rouge même si le total ne donne plus 84... enfin bref ... un jour je pense y arriver :D
J'y suis allée de votre côté de l'Atlantique et j'ai vraiment adoré !
 

Discussions similaires

Réponses
6
Affichages
239

Statistiques des forums

Discussions
312 198
Messages
2 086 151
Membres
103 133
dernier inscrit
mtq