Vba - arret d'une macro après 1ere execution

Fermé
jim35 - 14 oct. 2009 à 11:15
 jim35 - 15 oct. 2009 à 14:48
Bonjour,
voici mon code
Application.EnableEvents = False
Dim date48 As Date
Dim datejour As Date

date48 = 48
datejour = Now

Dim lig As Long
For lig = 158 To [E65536].End(xlUp).Row
If datejour - Cells(lig, 5) > date48 / 24 And Cells(lig, 5) <> "" Then
Cells(lig, 26) = "en retard"
Call Audit.audit48_Click
Cells(lig, 26) = "Mail envoyé"
End If
Next lig
Application.EnableEvents = True
End Sub


dans la macro audit48 : il y a du code qui permet de recopier toutes les valeurs "en retard" dans un tableau et d'envoyer un mail avec le tableau en PJ.
Jusque là tout va bien, c'est après lorsque la valeur a été remplacé par "mail envoyé", et que je clique seulement sur la ligne ou la valeur "mail envoyé" est inscrite, le macro se rééxecute et renvoi le mail etc...
a cause de l'évenement worksheet_change.

j'ai pourtant ecrit dans la macro audit48 : If .Cells(lig, 26).Value = "mail envoyé then end if. jai aussi testé If .Cells(lig, 26).Value = "mail envoyé" then exit sub, mais là plus rien ne marche.

Comment faire pour q'une fois le mail envoyé, la macro ne s'execute plus sur la ligne avec la valeur "mail envoyé ? merci !
A voir également:

11 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
14 oct. 2009 à 11:45
Salut,

Il faudra peut être sortir de la boucle For avec Exit For
0
jai essayé de placer exit for après le end if et avant, ca ne fonctionne pas, il envoit toujours le mail malgré que ma valeur est prie: "mail envoyé".
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
14 oct. 2009 à 12:15
Re,

Essaie comme ça
Sub TaProcedure()
Application.EnableEvents = False
Dim date48 As Date
Dim datejour As Date

date48 = 48
datejour = Now

Dim lig As Long
For lig = 158 To [E65536].End(xlUp).Row
  If datejour - Cells(lig, 5) > date48 / 24 And Cells(lig, 5) <> "" Then
    Cells(lig, 26) = "en retard"
    Call Audit.audit48_Click
    Exit For
  End If
Next lig

Cells(lig, 26) = "Mail envoyé"
Application.EnableEvents = True
End Sub
--
106485010510997108
0
kami20j, je viens de tester ton code, toujours le même problème...:-/ on va y arriver !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
14 oct. 2009 à 13:58
Re,

J'ai lu en peu en diagonale.
En fait le Exit For n'a rien à avoir.
Ta boucle ne fait rien saut le If...End If

C'est l'evenement worksheet_change qui pose des problèmes.

Essaie de mettre ta macro dans un module et tu verras s'il y a encore des problèmes.
0
Ok je vais tester ca, par contre si ca marche comment je remplace mon évenement worksheet_change?
je pourrai m'adapater avec thisworkbook_open je pense
0
Pourquoi lorsque je place ma macro dans un module en public sub et que je l'appel avec workbook_open, ma macro ne s'execute pas, j'ai même essayer de la placer derriere un bouton_click et l'appeler avec workbook_open et elle ne se lance pas, une idée ?
0
Salut,

Si je me rappelle bien, j'ai déjà eu ce problème en ce qui concerne le lancement automatique :
il faut mettre ton code dans ThisWorkbook et pas dans un module ou une feuille.

Par contre, je n'ai pas d'explication du pourquoi on doit faire ça dont je suis sûr !

Bon courage !
ed
0
Exact ca a l'air de fonctionner merci ed
0
Maintenant, même si ma valeur est à "mail envoyé" le mail est toujours envoyé avec la tableau, je ne comprends pas !
0
J'ai enfin trouvé, j'ai modifié la macro, le problème était qu'a chaque ouverture du fichier excel, le test était refait, donc dans le workbook_open j'ai placé à peu près la même macro sauf que j'ai supprimé l'étape de test :

Private Sub envoi_mail_retard()
Application.EnableEvents = False
Dim date48 As Date
Dim datejour As Date

date48 = 48
datejour = Now

Dim lig As Long
For lig = 158 To [E65536].End(xlUp).Row
If Cells(lig, 26).Value = "en retard" Then
Call envoi_mail
.cells(lig, 26).Value = "Mail envoyé"
End If
Next lig
Application.EnableEvents = True
End Sub

merci !
0