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.