Une macro ne démarre pas au bon moment
Bonjour,
Avec l’aide de Thibo et de Claude sur un autre fil, j’ai pu mettre en place le fichier ci-joint.
Celui-ci fonctionne parfaitement en l’état actuel : si l’on change n’importe laquelle des cellules C1 à C5, le code
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Application.Intersect(Target, Range("C1:C5")) Is Nothing Then
Call BonAcompte
End If
End Subde Claude démarre la macro "BonAcompte" à souhait.
Mais il faudrait que je puisse présenter ce fichier en « lecture seule », protégé (ici sans mot de passe) et avec les cellules C1 à C3 au préalablement vidées et que par conséquent les cellules C4 et C5 - de par leur formules - soient vides aussi (ces formules peuvent être remplacée ultérieurement par des valeurs, mais elles doivent être absolument en place lors de l’ouverture du fichier vierge). Et là comment certains problèmes, ça ne fonctionne plus du tout comme ça devrait.
J’ai essayé de remplacé le code de Claude ci-dessus par le code proposé par Amadéus sur un autre fil - avec une formule complémentaire en E1 - mais ça ne fonctionne pas non plus :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If [$E$1] <> "" Then
Call BonAcompte
End If
End SubCette formule fonctionne cependant parfaitement dans un autre fichier.
Qui a une idée pour résoudre ce problème ?
Bonne soirée à tous.
Bonsoir,
Cela devrait marcher :
Private Sub Worksheet_Change(ByVal Target As Range)
If [$E$1] <> "" Then BonAcompte
End SubBonsoir,
en regardant un peu ton code, tu peux essayer avec ceci :
dans le code de la feuille 1 :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Plg As Range
Set Plg = Range("C1:C5")
If Not Application.Intersect(Target, Plg) Is Nothing Then
If Application.CountA(Plg) = 5 Then
Application.EnableEvents = False
Call BonAcompte
End If
End If
Application.EnableEvents = True
End Subdans le code du module5, Sub BonAcompte :
Sub BonAcompte()
On Error GoTo suite
[K46] = Application.RoundUp([C2] - [H17] / ([D39] - 1), 0)
If [H37] <> "OK" Then
[K46] = Application.RoundUp(([C2] - [H17] / ([D39] - 1)) * 2, 1) / 2
End If
suite:
Application.EnableEvents = True
End Subet enfin, pour vider tes cellules, au démarrage du fichier, dans l'évènement ThisWorbook :
Private Sub Workbook_Open()
Sheets("Berechnung").Range("C1:C3,K46").ClearContents
End SubBonne soirée
Salut Raja,
J'ai essayé ton code, mais à chaque fois ça "tourne un peu dans le vide" puis mon fichier est fermé automatiquement. J'avais déjà eu un tel résultat lors d'autres essais, avec les codes indiqués dans mon premier message. Mais merci beaucoup quand même d'avoir tenté de m'aider.
Salut Felix,
Ta solution est un peu plus compliquée, mais quel résultat ! Ca fonctionne "picco bello", exactement comme je l'espérais. Merci alors infiniment pour ton aide. C'est un peu faible pour exprimer ce que je pense, mais je ne trouve pas d'autres mots pour le dire.
Bonsoir à tous deux.