Rechercher : dans
Par :

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

Dernière réponse le 15 oct 2009 à 14:48:22 jim35, le 14 oct 2009 à 11:15:45 
 Signaler ce message aux modérateurs

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 !

Meilleures réponses pour « vba arret d'une macro après 1ere execution » dans :
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...
Exécuter une macro VoirExécuter une macro Excel et Calc proposent plusieurs façons d’exécuter une macro : en la sélectionnant dans une liste, dans la boîte de dialogue Macro ; par un raccourci clavier ; en l’attachant à un bouton de la barre d’outils ; ...

1

lami20j, le 14 oct 2009 à 11:45:17

Salut,

Il faudra peut être sortir de la boucle For avec Exit For 106485010510997108

Répondre à lami20j

2

jim35, le 14 oct 2009 à 11:58:21

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é".

Répondre à jim35

3

lami20j, le 14 oct 2009 à 12:15:52

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

Répondre à lami20j

4

jim35, le 14 oct 2009 à 13:46:40

Kami20j, je viens de tester ton code, toujours le même problème...:-/ on va y arriver !

Répondre à jim35

5

lami20j, le 14 oct 2009 à 13:58:34

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. 106485010510997108

Répondre à lami20j

6

jim35, le 15 oct 2009 à 10:00:16

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

Répondre à jim35

7

jim35, le 15 oct 2009 à 10:19:38

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 ?

Répondre à jim35

8

ed, le 15 oct 2009 à 12:50:23

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

Répondre à ed

9

jim35, le 15 oct 2009 à 14:03:12

Exact ca a l'air de fonctionner merci ed

Répondre à jim35

10

jim35, le 15 oct 2009 à 14:36:37

Maintenant, même si ma valeur est à "mail envoyé" le mail est toujours envoyé avec la tableau, je ne comprends pas !

Répondre à jim35

11

 jim35, le 15 oct 2009 à 14:48:22

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 !

Répondre à jim35