VBA Formule incomplète gestion commande
Bonjour à toutes, bonjour à tous,
Je travaille actuellement sur un fichier de suivi des commandes. La personne en charge de compléter ce tableau me demande de lui mettre en place des "messagebox" identifiant les commandes hors délais, les numéros de lignes associés à ces commandes et les délais de retard.
Lors des tests de la macro ci-dessous, rien ne se passe, malgré l’activation de macro en "option".
Sub auto_open()
'Definition des variables Delai1 étant le traitement de la commande, Delai2 étant le traitement par le fournisseur
Dim i As Integer
Dim Delai1 As Integer
Dim Delai2 As Integer
For i = 1 To Range("AJ20000").End(xlUp).Row
'la colonne D contient la date de la création de la commande et +7 le délai que l'on se laisse pour la traiter.
'la colonne Q si vide, la date D +7 doit être < à aujourd'hui si non on est hors délai
Delai1 = Range("D" & i) + 7
If Range("Q" & i).Value = "" And Delai1 > "TODAY()" Then
MsgBox "Commande Hors délais, à traiter en urgence (cf ligne & i &). Délai dépassé de & Delai & "
End If
'la colonne D contient la date de la création de la commande et +7 le délai que l'on se laisse pour la traiter.
'la colonne S est le stock en cours, si elle est non vide pas de commande fournisseur
Delai2 = Range("D" & i) + 7
If Range("W" & i).Value = "" And Delai2 > "TODAY()" And Range("S" & i).Value = "" Then
MsgBox "Commande Hors délais, à traiter en urgence (cf ligne & i &). Délai dépassé de & Delai & "
End If
Next i
End Sub
Lorsque j'active la macro, il m'identifie une erreur 13. je pense que cela est dû au fait que je n'ai pas identifié la feuille, mais lorsque je l'ajoute, rien ne se passe.
Sub auto_open()
Dim i As Integer
Dim Delai1 As Integer
Dim Delai2 As Integer
For i = 1 To Range("AJ20000").End(xlUp).Row
Const FileSource As String = "RECAP_CDES"
Delai1 = Range("D" & i) + 7
If Range("Q" & i).Value = "" And Delai1 > "TODAY()" Then
MsgBox "Commande Hors délais, à traiter en urgence (cf ligne & i &). Délai dépassé de & Delai & "
End If
Delai2 = Range("D" & i) + 7
If Range("W" & i).Value = "" And Delai2 > "TODAY()" And Range("S" & i).Value = "" Then
MsgBox "Commande Hors délais, à traiter en urgence (cf ligne & i &). Délai dépassé de & Delai & "
End If
Next i
End Sub
Je vous remercie par avance pour votre aide
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Déjà, remplacer "TODAY()" par Date. et éventuellement "Range("AJ20000").End(xlUp).Row" par "ActiveSheet.UsedRange.Rows.Count" qui sera toujours valide, quelque soit le nombre de lignes de la feuille.
Bonjour.
Range(Di) ne renvoi pas à la valeur de la cellule en question, Range(Di).Value le fait. Donc si j'ai bien compris et que tu veux affecter à Délai1 la valeur contenue dans cette case +7 c'est par là qu'il faut passer.
(Ou j'ai rien compris parce que je n'ai pas eu le courage de lire la macro en gras et sans les balises de code
Bonne journée.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
1) il serait plus logique de définir des variables dates car en ajoutant 7 à une date, tu n'obtiens pas un délai
2) il est impératif de tester que la cellule de la colonne D contient une date valide
3) remplacer éventuellement "Range("AJ20000").End(xlUp).Row" par "ActiveSheet.UsedRange.Rows.Count" qui sera toujours valide, quelque soit le nombre de lignes de la feuille, car il donne toujours le nombre de lignes utilisées dans la feuille.
A noter que la propriété Value est prise par défaut.
date1 = Cells(i, "D") équivaut à date1 = Cells(i, "D").value
ci-dessous exemple de code
Dim i As Long
Dim date1 As Date
Dim date2 As Date
For i = 1 To ActiveSheet.UsedRange.Rows.Count
If IsDate(Cells(i, "D")) Then
date1 = Cells(i, "D") + 7
If Cells(i, "Q") = Empty And date1 > Date Then
MsgBox "blabla"
End If
End If
Next
..............................Bonjour,
Merci beaucoup cela fonctionne effectivement bien mieux.
Vous êtes super !
Pour ceux qui pourrait en être intéressé, je vous joins le code ci-dessous
Sub auto_open()
'Création des alertes
Dim i As Long
Dim date1 As Date
Dim date2 As Date
For i = 1 To ActiveSheet.UsedRange.Rows.Count
'Retard de commande en stock
If IsDate(Cells(i, "D")) Then
date1 = Cells(i, "D") + 7
If Cells(i, "Q") = Empty And date1 > Date Then
MsgBox "Commande Hors délais, à traiter en urgence (cf ligne " & i & ")."
End If
End If
'Retard de commande fournisseur
If IsDate(Cells(i, "D")) Then
date2 = Cells(i, "D") + 7
If Cells(i, "W") = Empty And date2 > Date And Range("S" & i).Value = "" Then
MsgBox "Commande fournisseur hors délais, à traiter en urgence (cf ligne " & i & ")."
End If
End If
Next i
End SubEncore Merci beaucoup pour vos interventions.
Excellente journée.
