Macro en fonction valeur cellule

Alban.aktisea

XLDnaute Nouveau
Bonjour à tous,

Je tourne en rond depuis quelques jours car je souhaite remplacer une formule de mon classeur par une macro.

La formule est simple : Fonction si imbriquée en A3

=SI(N3="RDV";R3+120;SI(N3="BONUS";R3+60;AUJOURDHUI()))

Si en colonne N, j'écris le statut rdv alors Excel prend la valeur de R3 (qui est la date du jour) et ajoute 120 jours...
SINON, SI en colonne N, j'écris le statuy bonus alors Excel prend la valeur de R3 (qui est la date du jour) et ajoute 60 jours...

Aujourd'hui cette formule fonctionne bien, néanmoins je souhaite que la personne sur Excel puisse modifier la valeur calculée automatiquement en A3 par Excel sans écraser la formule. Le code VBA doit se déclenche à chaque fois qu'une valeur en colonne N est modifiée.

J'ai aujourd'hui sur le fichier une macro Application.Intersect(Target, Range("N:N")) qui saisie automatiqument certaines valeurs mais je n'arrive pas à la faire fonctionner sur valeurs spécifiques.

Est-ce possible de remplacer cette formule SI par une macro??

Merci pour vos réponses.
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Macro en fonction valeur cellule

Bonsoir ,

A mettre dans le module de l'onglet concerné (Clic droit sur l'onglet et visualiser le code)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("N:N").Column And Target.Row > 3 Then
  If UCase(Range("N3")) = "RDV" Then
    Target = DateAdd("d", 120, Range("R3"))
   Else
    If UCase(Range("N3")) = "BONUS" Then
      Target = DateAdd("d", 60, Range("R3"))
     Else
      Target = Date
    End If
  End If
End If
End Sub
 

Alban.aktisea

XLDnaute Nouveau
Re : Macro en fonction valeur cellule

Bonjour,

Merci pour votre retour, j'ai testé le code VBA et il ne fait pas exactement ce que je veux... J'ai essayé de modifier la macro mais cela ne fonctionne pas correctement..

L'idée serait de dire :

If Target.Column = Range("N:N") = "RDV" Then Target.Offset(0, 4) = Date+120
Else
If Target.Column = Range("N:N") = "BONUS" Then Target.Offset(0, 4) = Date+60
Else
Target.Offset(0,4) = Date
End If
End If
End If
End Sub

Je souhaite que si quelque part dans la colonne N je rentre la valeur "RDV "alors 4 case à droite d'ou la valeur a été renseignée excel m'indique la date du jour + 120...

J'essaye de poser clairement le problème;), dites moi si vous souhaitez plus de précisions et merci pour votre première réponse.
 

camarchepas

XLDnaute Barbatruc
Re : Macro en fonction valeur cellule

Re ,

L'ennoncé s'affine , donc

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = Range("N:N").Column Then
   If Target = "RDV" Then
     Target.Offset(0, 4) = DateAdd("d", 120, Date)
    Else
     If Target = "BONUS" Then
       Target.Offset(0, 4) = DateAdd("d", 60, Date)
      Else
       Target.Offset(0, 4) = Date
     End If
   End If
 End If
 End Sub
 

camarchepas

XLDnaute Barbatruc
Re : Macro en fonction valeur cellule

Bonjour ,

Oui , bien sur , phénomène connu lors de l'utilisation des événementielles , car dès que tu modifies une cellule dans la feuille tu l'appelles à nouveau et popur le coup c'est plus voulu , donc il faut dès que tu es rentré dans le traitement désactiver les evenmentielles , et en fin de traitement les réactiver .


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = Range("N:N").Column Then
  application.EnableEvents = false 
  If Target = "RDV" Then
     Target.Offset(0, 4) = DateAdd("d", 120, Date)
    Else
     If Target = "BONUS" Then
       Target.Offset(0, 4) = DateAdd("d", 60, Date)
      Else
       Target.Offset(0, 4) = Date
     End If
   End If
  application.EnableEvents = true
 End If
 End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87