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 Sub

Dans 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").ClearContents

Si 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").select

A 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").Select

par

MsgBox ("Ce numéro de contrat n'existe pas, merci de le resaissir"): Range("B10").ClearContents: Range("B10").Select
: EXIT SUB

essaie aussi d'utiliser les balises (CODE) lorsque tu places un code sur le forum, c'est nettement plus facile à lire

Crdlt

Rechercher des sujets similaires à "lancer evenement macro"