SOS VBA

SOS VBA - VB/VBA/VBS - Programmation

Marsh Posté le 13-01-2019 à 00:53:15    


Bonjour,
 
Je suis présentement entrain d’écrire un programme qui déclenche une alerte sous certaine conditions.
En effet, dans la colonne 14 ou ("N" ) il y a une condition "SI" qui est fonction de la date rentrée dans la colonne("I" )
Lorsque("N" ) et ("I" ) sont vérifiées je souhaiterais que la macro alerte() s'active
 
Le soucis c'est qu'avec le code suivant :
 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim O_Cell As Object
Dim valeur As String
 
 
 
If Target.Column = 14 Then
 
 
        valeur = "*ROUGE*"                        'valeur à chercher
        Application.Goto Reference:="RDV"   ' "RDV" est le nom de la zone de recherche
        Set O_Cell = Selection.Find(valeur)   ' recherche de la valeur
        If Not O_Cell Is Nothing Then           'si l'objet O_Cell contient les coordonnées de la cellule
                call alerte
                O_Cell.Select ' sélection de la cellule
                 
        Else
         
        Exit Sub
        End If
        End If
End Sub  
 
La macro alerte ne s'active pas car la valeur de ("N" ) n'est pas vraiment modifiée comme le demande  "target.", puisqu'elle répond uniquement à une condition.
 
Je souhaiterais savoir comment adapter mon code à la valeur affichée dans les cellules de la colonne ("N" ), c'est à dire modifiées uniquement en fonction de la fonction "SI" à l'intérieur de celle-ci et non manuellement comme propose le target.column ou target.adress
 
 
Le soucis c'est que lorsque j'enlève le target.column de mon code, la macro fait une boucle et n'arrive plus à s’arrêter.
 
Merci de bien vouloir me donner un coup de main, cela fait des heures que j'essaye de m'en sortir sans succès

Reply

Marsh Posté le 13-01-2019 à 00:53:15   

Reply

Marsh Posté le 13-01-2019 à 13:33:05    

Bonjour,
 
J'ai bien du mal à comprendre ce que tu veux faire...
 
À tout hasard, est-ce que ceci pourrait aller :

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   Dim O_Cell As Object
  3.   Dim valeur As String
  4.   Dim myRow as String
  5.  
  6.   If Target.Column = 14 Then
  7.      myRow = Target.Row
  8.      valeur = "*ROUGE*"                  'valeur à chercher
  9.      Application.Goto Reference:="RDV"'  "RDV" est le nom de la zone de recherche
  10.      Set O_Cell = Selection.Find(valeur) ' recherche de la valeur
  11.      If Not O_Cell Is Nothing And Target.value = Range("I" & myRow).value Then       'si l'objet O_Cell contient les coordonnées de la cellule et que la seconde condition est remplie (comparaison entre colonne "N" et "I" )
  12.         call alerte
  13.         O_Cell.Select                    ' sélection de la cellule
  14.      End If
  15.   End If
  16. End Sub


 
Je ne connais pas la seconde condition, donc à adapter. Mais alors franchement, je ne suis pas sûr d'avoir compris ce que tu voulais faire.


Message édité par MaybeEijOrNot le 13-01-2019 à 13:33:34

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 14-01-2019 à 13:09:59    

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim O_Cell As Object
   Dim valeur As String
   Dim myRow As String
 
   If Target.Column = 14 Then
      myRow = Target.Row
      valeur = "ROUGE"                  'valeur à chercher
      Application.Goto Reference:="RDV" '  "RDV" est le nom de la zone de recherche
      Set O_Cell = Selection.Find(valeur) ' recherche de la valeur
      If Not O_Cell Is Nothing And Target.text = valeur Then       'si l'objet O_Cell contient les coordonnées de la cellule et que la seconde condition est remplie (comparaison entre colonne "N" et "I" )
         O_Cell.Select ' sélection de la cellule
         Call alerte
                             
      End If
   End If
End Sub
 
j'ai adapté ta solution à ma macro et elle est très bien, mais le problème est que la colonne 14 contient une formule "SI:" et lorsque le résultat est réalisé la modification de la cellule n'est pas prise en compte par la macro en question. En effet celle-ci ne fonctionne que lorsque je rentre moi même (manuellement) "ROUGE" dans la cellule! moi ce que je voudrais, ce que lorsque le résultat de la formule affiche la valeur "ROUGE" dans la cellule, la macro se déclenche aussitôt

Reply

Marsh Posté le 14-01-2019 à 14:09:51    

Pourquoi utiliser "Target" alors ? Pourquoi ne pas directement utiliser la référence de la cellule ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 14-01-2019 à 14:26:00    

Cette macro est écrite dans "sheet1" et doit se déclencher automatiquement à chaque modification de la colonne 14(N). je ne connait pas un autre moyen de déclencher un événement après la modification d'une cellule! je ne sais pas comment adapter ma macro à la référence de la cellule

Reply

Marsh Posté le 14-01-2019 à 14:50:35    

Bonjour,
 
L'évènement Change ne se produit pas lorsque le résultat d'une formule change.
Il faut tester le changement des constantes antécédentes pour le calcul de la formule.


---------------
Cordialement, Patrice
Reply

Marsh Posté le 14-01-2019 à 14:55:29    

Et comment je procède pour réaliser cela avec ma macro?

Reply

Marsh Posté le 14-01-2019 à 15:05:30    

Patrice33740 merci infiniment la macro avec les références des cellules fonctionne très bien :-)

Reply

Marsh Posté le 14-01-2019 à 15:06:38    

Ok


Message édité par patrice33740 le 14-01-2019 à 15:07:31

---------------
Cordialement, Patrice
Reply

Marsh Posté le 14-01-2019 à 15:51:21    

gaultier78330 a écrit :

Cette macro est écrite dans "sheet1" et doit se déclencher automatiquement à chaque modification de la colonne 14(N). je ne connait pas un autre moyen de déclencher un événement après la modification d'une cellule! je ne sais pas comment adapter ma macro à la référence de la cellule


 
Pour que ce soit bien clair.
La macro se déclenche à chaque changement de cellule, Target sert à passer la dite cellule en référence. Tu peux très bien utiliser la macro sans utiliser Target.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 14-01-2019 à 15:51:21   

Reply

Marsh Posté le 14-01-2019 à 16:30:14    

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim O_Cell As Object
   Dim valeur As String
   Dim myRow As String
 
   If Target.Column = 14 Or Target.Column = 9 Then
   Call efface                                ' efface la cellules "ALERTE" si cellule 9 est vide
      myRow = Target.Row
      valeur = "ROUGE"                  'valeur à chercher
      Application.Goto Reference:="RDV" '  "RDV" est le nom de la zone de recherche
      Set O_Cell = Selection.Find(valeur) ' recherche de la valeur
      If Not O_Cell Is Nothing And Target.Value <> "" Then      'si l'objet O_Cell contient les coordonnées de la cellule et que la seconde condition est remplie (comparaison entre colonne "N" et "I" )
         Cells(myRow, 14).Find(valeur).Select    ' sélection de la cellule
         Call alerte                                           ' déclenche "ALERTE" si valeur vérifié
              Call alerte_info                               ' déclenche info_bulle en fonction du type d'alerte                      
                     
     
      End If
   End If
     
         
End Sub
 
 
voici la macro finale qui fonctionne très bien  
 
 
merci pour tout les amis

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed