Bonjour,
Après avoir parcouru le forum je reste sans réponse face à mon problème, c'est pourquoi je me permet de créer une nouvelle discussion.
Je suis actuellement en alternance, et je dois réaliser une macro EXCEL pour mon projet en entreprise, mais je ne possède aucune expérience dans le domaine. Je dois envoyer automatiquement des mails lorsque certains dates dépassent une limite définie. J'ai réaliser un programme permettant de faire l'envoi de façon manuelle sans problème, l'e-mail s'envoi une fois que j'appuis sur le bouton éxecuter ma macro. J'ai réussi à réaliser le code VBA correspondant, jusque là aucun problème.
Cependant en essayant d'automatiser cela je rencontre un problème. Je possède deux dates différentes : le nombre de jours restants et la date d’expédition. Je dois envoyer un mail lorsque le nombre de jours restants est inférieur à 3 jours, et un deuxième mail lorsque la commande doit être expédiée dans 15 jours(les cases sont remplies grâce à des données extraites de ma page "DONNEES"). J'arrive à envoyer les deux mails manuellement mais pas automatiquement. Toute la partie concernant l'e-mail ne pose pas de problème, uniquement les conditions d'envoi m'en pose :
Voici la partie de mon code qui me pose problème, me renvoyant une erreur :
Je travail donc sur la page "Commandes urgentes" qui se remplie automatiquement en fonction des données que je rentre dans une autre page "DONNEES", et j'utilise la colonne des jours restants ainsi qu'une constante que j'ai défini auparavent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub ScanSheet_Mainprocess() Dim oCell As Excel.Range Worksheets("Commandes urgentes").Select If OL_OK Then For Each oCell In Worksheets("Commandes urgentes").UsedRange.Columns(cColJoursRestants).Cells If oCell.Value <= cNbJoursRelance2 Then If oCell.Offset(, cColMailEnvoi - cColJoursRestants).Value <> "Oui" Then SendFollowUpMail Worksheets("Commandes urgentes"), oCell.Row End If End Sub
Le problème intervient sur la deuxième ligne de code, à savoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Const cColJoursRestants = 15 Const cNbJoursRelance2 = 3
Donc si le nombre de jours restants est <= à 3, la suite de mon programme s'effectue et mon mail s'envoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part If oCell.Value <= cNbJoursRelance2 Then
Même si une erreur apparaît, le mail s'envoi si je rempli la valeur de la colonne des jours restants manuellement, ce qui n'est pas le cas lorsque la case se rempli automatiquement grace aux données de mon autre page.
Enfin, afin d'envoyer le mail automatiquement j'ai créer une macro liée à la ma page "Commandes urgentes" :
Le problème est que je ne comprends pas très bien le fonctionnement de cette dernière (ni même de mon autre programme d'ailleurs je n'ai aucune experience en VBA je travail uniquement en adaptant des programmes existants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 3 Then Exit Sub If Not Application.Intersect(Range("O2:O350"), Target) Is Nothing Then If IsNumeric(Target.Value) And Target.Value <= 3 Then Call ScanSheet_Mainprocess End If End If End Sub). Comment le programme sait que If Target.Cells.Count > 3 fait référence à ma colonne jours restants ? J'ai également défini une limite à savoir de la ligne O2 à O350, puis-je aller jusqu'à plusieurs milliers ou cela pose-t-il problème ?
Pourriez-vous m'aider pour cette partie ?
Cordialement,
Aurélien
Partager