Je n'arrive pas a étendre ma macro
RésoluUtilisateur anonyme -
Bonjour,
J'ai testé ma macro sur la première ligne de ma feuille et je souhaite qu'elle s'applique sur les lignes suivantes.
Pour expliquer le projet, lorsque la date en C1 est dépassée, cela envoi un mail de prévention.
Voici ma macro. Concrètement je veux que les 1 passe au 2 puis 3 et ainsi desuite.
Sub Alerte() Dim M As Object, OlApp As Object, Destinataire As String, n As Integer If Date > [D1] And [E1] = "" Then Destinataire = ***@*** Set OlApp = CreateObject("Outlook.application") Set M = OlApp.CreateItem(olMailItem) With M .Subject = "Alerte" .Body = "Il faut recommander une " & Range("B1") & " pour " & Range("A1") .Recipients.Add Destinataire .Send End With [E1] = "X" End If End Sub
Merci d'avance pour votre aide !
EDIT: Ajout des balises de code.
Clément
- Je n'arrive pas a étendre ma macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Etendre ecran pc - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro maker - Télécharger - Divers Utilitaires
4 réponses
Bonjour
je te conseille la lecture de la doc concernant les boucle for.
Il sera sage de sortir cette ligne
Set OlApp = CreateObject("Outlook.application")
De la boucle, ça évitera d'initialiser "50" instances de d'outlook alors qu'une suffit
Bonjour
Pour tes prochains posts, merci d'utiliser la coloration syntaxique comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
De plus, l'indentation permet de faciliter la lecture, donc le développement et surtout le déboggage.
Je t'ai conseillé de sortir la création de l'objet outlook de la boucle, yg_be (que je salue) l'a fait dans ses exemples.
Mais toi non, du coup du lances 305 instances d'outlook en toile de fond, ça sature la RAM et prend un temps beaucoup plus important que nécessaire.
Dans ces exemples, yg_be a aussi sorti l'assignation du destinataire de la boucle, comme c'est tout le temps le même, tu crées là encore 305 variables différentes pour stocker la même chose, chargelent de RAM, perte de temps etc...
Bref de manière générale, dans une boucle, on ne fair que ce qui change
bonjour,
peut-être:
dim lg as long Set OlApp = CreateObject("Outlook.application") Destinataire = ***@*** for lg = 1 to 123 If Date > cells(lg,"d") And cells(lg,"e") = "" Then Set M = OlApp.CreateItem(olMailItem) With M .Subject = "Alerte" .Body = "Il faut recommander une " & cells(lg,"b") & " pour " & cells(lg,"a") .Recipients.Add Destinataire .Send End With cells(lg,"e") = "X" End If next lg
Voici mon code final qui fonctionne
Sub Auto_Open()
Dim M As Object, OlApp As Object, Destinataire As String, n As Integer
n = 1
Do While n < 305
If Date > Range("I" & n) And Range("J" & n) = "" Then
Destinataire = ***@***
Set OlApp = CreateObject("Outlook.application")
Set M = OlApp.CreateItem(olMailItem)
With M
.Subject = "Alerte"
.Body = "Il faut recommander une " & Range("C" & n) & " pour " & Range("F" & n)
.Recipients.Add Destinataire
.Send
End With
Range("J" & n) = "X"
End If
n = n + 1
Loop
End Sub
Le problème c'est que sur la théorie je comprends mais je n'arrive pas à l'appliquer