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 :

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
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
Const cColJoursRestants = 15
Const cNbJoursRelance2 = 3
Le problème intervient sur la deuxième ligne de code, à savoir :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 If oCell.Value <= cNbJoursRelance2 Then
Donc si le nombre de jours restants est <= à 3, la suite de mon programme s'effectue et mon mail s'envoi.
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" :

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