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
 

Lulay

XLDnaute Nouveau
Bonjour,


Je crois que tu as oublié de faire la somme. 😉

À ma connaissance, Range("A1:B3").Value ne fait pas la somme du contenu des cellules de la plage A1:B3.
Effectivement j'avais oublié la somme.
Maintenant j'ai :

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
Application.WorksheetFunction.Sum (myRange)
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 ça ne fonctionne toujours pas. On dirait qu'il n'y a pas d'appel à la procédure ?

Merci Marcel et fanch pour votre aide.
 

Lulay

XLDnaute Nouveau
Effectivement j'avais oublié la somme.
Maintenant j'ai :

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
Application.WorksheetFunction.Sum (myRange)
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 ça ne fonctionne toujours pas. On dirait qu'il n'y a pas d'appel à la procédure ?

Merci Marcel et fanch pour votre aide.
J'ai rechangé pour :

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
Application.WorksheetFunction.Sum (myRange)
If myRange.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

ça ne fonctionne toujours pas
et je ne sais pas pourquoi, mais quand j'essaie de débogger avec le pas à pas détaillé, ça m'ouvre la fenêtre de macro :
1646903868649.png

mais je n'ai pas fait de macro, mais une procédure... je suis perdue...
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Essayez :
VB:
If WorksheetFunction.Sum (myRange) = 84 Then
       Range("BU" & i & ":CC" & i).Locked = True
 Else
       Range("BU" & i2 & ":CC" & i2).Locked = False
 End If
Ceci dit, je ne vois pas de next après le For ...
Et si le code ne se déclenche pas et surtout qu'il ne vous a pas signifié d'erreur,
c'est qu'il est dans un module standard et non pas dans le code de la feuille ...
 

TooFatBoy

XLDnaute Barbatruc
Effectivement j'avais oublié la somme.
Maintenant j'ai :

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
Application.WorksheetFunction.Sum (myRange)
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 ça ne fonctionne toujours pas. On dirait qu'il n'y a pas d'appel à la procédure ?

Il faut affecter le résultat de la somme à une variable et donc faire la comparaison entre cette variable et la valeur 84. ;)
 

Lulay

XLDnaute Nouveau
Bonjour.
Votre procédure n'aurait elle pas été écrite dans le module d'un autre objet Worksheet que celui qui représente la feuille où ça devrait œuvrer, au moins, voire dans un module standard ?
Oui effectivement, je m'en suis rendue compte après coup.
La procédure s'appelle, ce qui est bien, par contre j'essaie de rendre myRange dynamique :
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)
Si je met celui-ci, dès que j'atteint 84 ça reste 84 tout le temps puisque les colonnes ne changent pas et
Set myRange = Worksheets("Équipe C").Range(Colonne1 & Ligne1 & ":" & Colonne2 & Ligne1)
Si je met celui-ci, ça ne fonctionne pas, ça me donne toujours 0 et pourtant Colonne1 me donne bien 59 et Colonne2 me donne 73 mais ça ne fait pas le calcul
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 = True
End If
Colonne1 = Colonne1 + 1
Colonne2 = Colonne2 + 1
Colonne3 = Colonne3 + 1
Colonne4 = Colonne4 + 1
Next

End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Essaye peut-être Range(Cells(Ligne1, Colonne1),Cells(Ligne1, Colonne2)) ou quelque chose dans le genre. ;)

Mais si les colonnes sont fixes (de BG à BT), la syntaxe Range("BG" & Ligne1 & ":BT" & Ligne1) de départ me semble très bien.
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
202