Macro en fonction valeur cellule

  • Initiateur de la discussion Initiateur de la discussion Alban.aktisea
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

Alban.aktisea

Guest
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 modification par un modérateur:
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
 
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.
 
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
 
Re : Macro en fonction valeur cellule

Bonjour,

Je vous écris car je me suis aperçu à l'utilisation que la macro prenait environ 6 à 10 secondes pour s'exécuter sur mon fichier.

Avez-vous une idée pour résoudre ce problème?

Merci
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
10
Affichages
378
Retour