Target (....Worksheet_Change)

Bonjour,

Je rencontre un problème avec la fonction "target", voilà j'ai réussi à faire ce que je voulais au niveau de l'événement (Worksheet_SelectionChange(ByVal Target As Range)) mais il ne se déclenche pas quand je le souhaiterais.

Je voudrais que l'action commence lorsque je valide ma cellule en appuyant sur entrée ou lorsque je clique sur une autre cellule.

Ce qui se passe réellement : l'événement se produit une fois que je reviens sur la cellule concernée (plage H1 : M5) en cliquant dessus.

J'ai bien vu une page dans laquelle il y a ce petit paragraphe : "La cible (target) c'est la cellule dans laquelle arrive le curseur (pour une macro worksheet_selection_change) ou celle dans laquelle se produit le changement de valeur pour une macro worksheet_change

Dans ce cas, les instructions ne se déclencheront que si l'événement se produit dans la cellule A1

Attention: Target de l'évènement SelectionChange renvoie la cellule d'arrivée, et pas la cellule de départ. Ainsi, si l'on veut limiter l'évènement à $A$1, il ne faut pas utiliser Target lorsque l'on quitte $A$1, mais lorsque l'on va y arriver."

Mais je n'arrive pas à comprendre ce que je dois faire pour obtenir le résultat désiré, voici mon code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim numOF As String
Dim OF_cible As Range
Dim ligne, NbOF As Integer
Dim date_numOF As Date

If Target.Address = Range("$H$1:$M$5").Address Then

    NbOF = Application.CountA(Sheets("Sauvegarde").Range("A:A"))

    numOF = Range("H1").Value

    Set OF_cible = Sheets("Sauvegarde").Range("B" & 2 & ":B" & NbOF).Find(numOF, lookat:=xlWhole)

        If OF_cible Is Nothing Then

            Else
                ligne = OF_cible.Row
                date_numOF = Sheets("Sauvegarde").Range("A" & ligne)
                MsgBox "OF éxistant en date du " & date_numOF & vbLf & vbLf & "Ligne " & ligne & " de la feuille Sauvegarde", vbExclamation, "Attention !!"
        End If

End If

End Sub

Si une âme charitable voudrait bien m'expliquer, ce qu'il faut faire, merci par avance

Bonjour et bienvenu(e)

Je n'arrive pas bien à saisir le problème que tu as

Pour fonctionner il faut que la plage H1:M5 soit fusionnée ou que tu sélectionnes la zone H1:M5

Pour bien cerner le souci, ton fichier est indispensable, dans lequel tu notes exactement les actions à faire pour arriver au défaut

Bonjour Jul17,

A priori, l'évènement Worksheet_Change, associé aux propriétés Target.Row et Target.Column, devraient te permettre de récupérer les bonnes informations sur la cellule active juste avant la validation...

Espérant avoir aidé,

Cordialement, Daniel

Merci de te pencher sur mon cas !

La plage H1:M5 est fusionnée, je ne pense pas que ça soit ça qui cause un souci.

Ce qui me pose problème c'est le moment où l'action se déclenche :

_ Actuellement il faut que je quitte la plage H1:M5 ( en cliquant ailleurs ou en appuyant sur entrée). Puis lorsque je reviens sur H1:M5 en cliquant dessus, à ce moment là, l'événement se déclenche.

Moi je souhaiterais tout simplement que l'action se déclenche lorsque je quitte la cellule H1:M5, parce que je ne suis pas censé revenir dessus une fois qu'elle est remplie.

Ce que permet de faire cette moulinette:

C'est de rechercher un numéro de travail(OF) à partir de la plage H1:M5 de la feuil2(Controle_CTP) si il existe déjà un travail du même numéro d'OF dans la feuill1(Sauvegarde) dans la colonne "B", le cas échéant ouvrir un message d'avertissement.

Je mets en PJ mon fichier.

Ok je regarde si je trouve une solution dans la soirée ou demain matin...

Mais as-tu essayé d'analyser l'événement avec les indications que je t'ai fournies, qui ne sont pas nécessairement les mêmes que celles que tu utilises ?

Daniel

Oui, c'est en cours....malheureusement mon piètre niveau de programmeur des bacs à sable me freine un peu, mais je continue de chercher !

Merci en tout cas.

Bonjour

A la vue de ta macro le fonctionnement est normal

Si non tu peux utiliser l'événement change

Tu modifies la zone H1:M5 (soit par la modification du numéro, soit en pressant F2 lorsque tu es dans la zone) ensuite tu fais entrée

Il faut changer de procédure

Private Sub Worksheet_Change(ByVal Target As Range)

'recherche dans la feuille Sauvegarde, si il existe déjà un même n° d'OF

Dim numOF As String
Dim OF_cible As Range
Dim ligne, NbOF As Integer
Dim date_numOF As Date

'If Target.Address = Range("$H$1:$M$5").Address Then
If Target.Address = Range("$H$1").Address Then

    NbOF = Application.CountA(Sheets("Sauvegarde").Range("A:A"))

    numOF = Range("H1").Value

    Set OF_cible = Sheets("Sauvegarde").Range("B" & 2 & ":B" & NbOF).Find(numOF, lookat:=xlWhole)

        If OF_cible Is Nothing Then

            Else
                ligne = OF_cible.Row
                date_numOF = Sheets("Sauvegarde").Range("A" & ligne)
                MsgBox "OF éxistant en date du " & date_numOF & vbLf & vbLf & "Ligne " & ligne & " de la feuille Sauvegarde", vbExclamation, "Attention !!"
        End If

End If

End Sub

Génial !

C'est bien le résultat escompté, mauvais choix de procédure en effet....

Merci à tous les deux d'avoir pris le temps de jeter un coup d’œil à mon problème.

Bonne soirée.

*edit :je n'ai pas voulu créer de nouveau post, pour ne pas encombrer le forum du coup vu que le sujet est "résolu" je sais pas trop si j'ai bien fait

Bonjour,

Décidément j'ai un problème avec l'événement worksheet_change... Pour la plage (A5:C8) j'ai repris le même code qu'au dessus, tout va bien ! seulement je souhaiterai qu'en plus d'effectuer la recherche la valeur de A5:C8 passe en majuscule. Et là je rencontre un conflit.

J'ai testé trois solutions, peut-être il y en a une de bonne mais qu'elle n'est pas bien placée :

1_

If Not Intersect(Target, Range("A5")) Is Nothing Then Target = UCase(Target)

2_

[A5] = UCase([A5])

dans "Worksheet_selectionChange"

3_

Dim numArticle As String
Dim Article_cible As Range
Dim ligne_Article, NbArticle As Integer
Dim date_numArticle As Date

If Target.Address = Range("$A$5").Address Then

    NbArticle = Application.CountA(Sheets("Sauvegarde").Range("A:A"))

    numArticle = Range("A5").Value

    Set Article_cible = Sheets("Sauvegarde").Range("C" & 2 & ":C" & NbArticle).Find(numArticle, lookat:=xlWhole)

        If Article_cible Is Nothing Then

            Else
                Target = UCase(Target)
                ligne_Article = Article_cible.Row
                date_numArticle = Sheets("Sauvegarde").Range("A" & ligne_Article)
                MsgBox "Article éxistant en date du " & date_numArticle & "." & vbLf & _
                "Ligne " & ligne_Article & " de la feuille Sauvegarde." & vbLf & vbLf & _
                "Souhaitez vous restaurer la fiche de cette Article ?", _
                vbExclamation + vbYesNo, "Attention !!"
        End If

End If

End Sub

Mais aucune ne marche, je rencontre soit un bug, soit la msgbox s'ouvre à chaque clic,... Est ce que qq'un peut m'éclairer , merci.

Bonjour

Si j'ai bien compris ta demande

Rajoutes les instructions suivantes

If Target.Address = Range("$A$5").Address Then
  Application.EnableEvents = False
  [A5] = UCase([A5])
  Application.EnableEvents = True

Vous avez très bien compris ! ça marche, mon code ne tourne plus en rond.

Merci encore.

Rechercher des sujets similaires à "target worksheet change"