Lancer un événement dans une macro
Bonjour,
J'ai créé l'événement ci-dessous :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' La variable KeyCells contient les cellules qui déclencheront
' une alerte si elles sont modifiées.
Set KeyCells = Range("B10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Affichage d'un message lorsque l'une des cellules désignées
' a été modifiée.
' Placez votre code ici.
If MsgBox("Etes-vous certain du numéro de contrat ?", vbYesNo, "Demande de confirmation") = vbYes Then
Call M1_SAISIE_NOM_TECHN
End If
End If
End Sub
Cela fonctionne sans problème.
Mais ensuite ma macro vérifie que le numéro du contrat existe bien et s'il n'existe pas je voudrais appeler de nouveau l'événement.
Comment faire ? Si dessous la macro ou je voudrais à la place de GoTo 10 lancer de nouveau l'événement.....
'Si contrat pas existant, message d'erreur
If session.findById("wnd[0]/sbar").Text <> "" Then
'MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir")
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/btn[3]").press
GoTo 10
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir")
Else: GoTo 30
End If
D'avance merci de votre aide.
Bonjour
Filou78 a écrit :Mais ensuite ma macro vérifie que le numéro du contrat existe bien et s'il n'existe pas je voudrais appeler de nouveau l'événement.
Le numéro de contrat est situé dans quelle cellule et quelle feuille ?
Crdlt
Le numéro de contrat se trouve sur la feuill1 cellule B10
Ré,
Ou je n'ai pas compris ou tu ne comprends pas ma demande.
J'ai bien vu que le contrat se place en b10 mais tu vérifies que le contrat existe bien.
Comment tu es sur de cette information ?
Soit tu compares avec une donnee existante ailleurs dans ton fichier ou soit tu regardes ta cellule pour vérifier que ce que tu as écris dans cette cellule existe bien.
Avec ton code si le numéro n existe pas tu sors de la macro. Dans ce cas on pourrait vider la cellule b10.
Explique moi comment tu procédes
Re
Dans la cellule B10 je saisi un numéro de contrat, l'événément pose la question pour savoir si c'est le bon numéro.
Si la personne qui a saisie le numéro clique sur oui, la macro vérifie dans notre système SAP que le numéro de contrat existe vraiement, c'est un deuxième contrôle en fait.
Et là je voudrais si le contrat n'existe pas revenir sur la saisie de la cellule B10. Et donc je voudrais que excel attente que je resaissise un numéro de contrat avant de me demander si c'est le bon numéro et d'aller quand même vérifier dans SAP.....
est-ce que c'est un peu plus clair ?
re,
dans ta feuille remplace le code par celui-ci dessous
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
If Range("B10") = "" Then Exit Sub
' La variable KeyCells contient les cellules qui déclencheront une alerte si elles sont modifiées.
Set KeyCells = Range("B10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
' Affichage d'un message lorsque l'une des cellules désignées a été modifiée.
' Placez votre code ici.
If MsgBox("Etes-vous certain du numéro de contrat ?", vbYesNo, "Demande de confirmation") = vbYes Then _
Call M1_SAISIE_NOM_TECHN
End If
End SubDans le 2eme code, remplace
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir")par
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContentsSi ok, clique sur le V vert à coté du bouton EDITER lors de ta réponse pour cloturer le fil
Cordialement
Bonjour
merci de ta réponse.
Cela fonctionne presque....
Mes lignes de commande dans la macro sont :
'Ouverture de SAP pour recherche du numéro de contrat
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "ME33K"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").Text = NUM_CONT
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").caretPosition = 3
session.findById("wnd[0]").sendVKey 0
'Si contrat pas existant, message d'erreur
If session.findById("wnd[0]/sbar").Text <> "" Then
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/btn[3]").press
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents
GoTo 10 ' Retour à la saisie de la cellule B10 si le contrat n'existe pas
Else: GoTo 30 ' La macro continue à se dérouler si le contrat existe....
End If
Je fais certainement quelque chose qui va pas mais quoi ?
merci de ton aide
re,
Filou78 a écrit :MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents
GoTo 10 ' Retour à la saisie de la cellule B10 si le contrat n'existe pas
Else: GoTo 30 ' La macro continue à se dérouler si le contrat existe....
End If
Je fais certainement quelque chose qui va pas mais quoi
Il faudrait que tu dises un peu ce qui ne va pas. Car je n'ai pas tout le code ou le fichier et la partie SAP, je ne peux la vérifier
Supprime déjà ces deux lignes
GoTo 10 ' Retour à la saisie de la cellule B10 si le contrat n'existe pas
Else: GoTo 30 ' La macro continue à se dérouler si le contrat existe....Ensuite modifie la ligne :
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents : Range("B10").selectA te relire
Re
J'ai modifier mon code :
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "ME33K"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").Text = NUM_CONT
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").caretPosition = 3
session.findById("wnd[0]").sendVKey 0
'Si contrat pas existant, message d'erreur
If session.findById("wnd[0]/sbar").Text <> "" Then
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/btn[3]").press
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents: Range("B10").Select
End If
'
'Recopie des donnees du contrat dans excel
'
'Positionnement du curseur 1er chiffre colonne, 2ème chiffre ligne
'
30 ' Poursuite
'
NUM_POSTE = 0
230 '
Sheets("CT GDS-PDT 2014").Cells(NUMLIGNE, 2).Value = session.findById("wnd[0]/usr/tblSAPMM06ETC_0220/txtRM06E-EVRTP[0," + CStr(NUM_POSTE) + "]").Text
La macro me demande bien de resaissir un numéro de contrat mais au lieu de revenir au test dans SAP, la macro continue à dérouler et essage de recopier les données de SAP dans ma feuille excel avec le mauvais numéro de contrat....
re,
Remplace
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents: Range("B10").Selectpar
MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents: Range("B10").Select
: EXIT SUBessaie aussi d'utiliser les balises (CODE) lorsque tu places un code sur le forum, c'est nettement plus facile à lire
Crdlt