Formule ou macro événementielle

Bonjour,

je souhaiterai si possible que lorsque j'indique 0 dans la case renouvellement de contrat il n'y ai pas d'impact sur la date comme c'est le cas maintenant exemple si j'indique 0 sur un contrat qui prend fin le 31/8 la date passe au 31/7 alors que j'aimerai garder la date du 31/8 .

le tableau est en PJ et possède une formule excel la cellule date de fin de contrat et une macro événementielle pour la cellule renouvellement qui permet d'afficher le mot arrêt quand je mets 0 dans la cellule.

Merci par avance

Amicalement

Mango19

Bonjour

lorsque j'indique 0 dans la case renouvellement de contrat il n'y ai pas d'impact sur la date comme c'est le cas maintenant

Quelque chose m'échappe...

Je ne vois pas d'impact sur la colonne G lorsque je saisie 0 dans la colonne H.

Bye !

bonjour gmb ,

je viens de réessayer prenons la cellule G2 qui indique 31/8/19 après application du 0 dans la cellule H2, G2 indique 31/7/2019 soit un mois en arrière

Amicalement

Mango

Bonjour,

Un essai ...

Cordialement.

Bonjour,

merci tout fonctionne

Amicalement

Mango19

Bonjour Gyrus,

pourriez vous s'il vous plait m'expliquer la formulaR1C1 car elle fonctionne sur le tableau test mais pas sur le tableau original

Merci par avance pour votre aide

Amicalement

Mango19

La propriété Range.FormulaR1C1 définit une formule en utilisant les notation de style R1C1.

Ainsi, l'instruction

Range("G2").FormulaR1C1 = "=IF(RC[1]=""Arrêt"", RC[-1],EDATE(RC[-1],RC[1]))"

est traduite dans G2 par la formule

=SI(H2="Arrêt"; F2;MOIS.DECALER(F2;H2))

Elle utilise une référence relative de style R[1]C[1]

RC[1] indique la position par rapport à G2, même ligne (R) et décalage positif d'une colonne, soit H2.

RC[-1] indique la position par rapport à G2, même ligne (R) et décalage négatif d'une colonne, soit F2.

Cordialement.

Bonjour Gyrus,

tout d'abord merci pour ton aide précieuse.

question : j'ai modifié la formule G2 (à la place de mois.décaler j'ai mis fin.mois) ce qui donne :

=SI(H2="Arrêt"; F2;FIN.MOIS(F2;H2)) faut il modifier la macro ? (je suis novice)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Target.Column = 8 Then

Application.ScreenUpdating = False

Application.EnableEvents = False

If Target = 0 Then

Application.Undo

Target.Offset(, -1) = Target.Offset(, -1).Value

Target = "Arrêt"

Else

Target.Offset(, -1).FormulaR1C1 = "=IF(RC[1]=""Arrêt"", RC[-1],EDATE(RC[-1],RC[1]))"

End If

Application.EnableEvents = True

Application.ScreenUpdating = True

End If

End Sub

Merci par avance

Amicalement

Mango19

Bonjour,

Voici une méthode simple pour traduire la formule dans VBA.

Tu sélectionnes la cellule G2 qui contient la formule

=SI(H2="Arrêt"; F2;FIN.MOIS(F2;H2))

Dans l'éditeur, tu ouvres la fenêtre Exécution (CTRL + G).

Tu écris l'instruction suivante :

? activecell.FormulaR1C1

Tu appuies sur ENTER et tu obtiens le résultat

=IF(RC[1]="Arrêt", RC[-1],EOMONTH(RC[-1],RC[1]))

Tu obtiens ainsi la traduction de la formule à intégrer au code VBA (à un détail près, car il faut doubler les doubles cotes).

Il te reste à modifier l'instruction dans la procédure :

Target.Offset(, -1).FormulaR1C1 = "=IF(RC[1]=""Arrêt"", RC[-1],EOMONTH(RC[-1],RC[1]))"

Cordialement.

Bonjour Gyrus,

merci pour votre aide précieuse mais je rencontre encore une difficulté.

En effet la macro ne prend pas en compte la formule entière c'est à dire le moins , afin d''obtenir la fin d'un mois par exemple si je tape 1 dans le renouvellement avec un début de contrat au 1/8/2019 je devrai obtenir 31/8/2019 mais ce n'est pas le cas

SOS

tableau en PJ

=SI(H2="Arrêt"; F2;FIN.MOIS(F2;H2-1))

Bonjour,

La ligne de code devient

Target.Offset(, -1).FormulaR1C1 = "=IF(RC[1]=""Arrêt"", RC[-1],EOMONTH(RC[-1],RC[1]-1))"

Cordialement.

Rechercher des sujets similaires à "formule macro evenementielle"