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 Sub

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

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

Bonsoir,

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 Sub

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

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

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

Rechercher des sujets similaires à "macro demarre pas bon moment"