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

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 Thev,

Merci pour ton retour.

J'ai fait la modification. Après tentative, il semblerait que le problème provienne de la ligne "Delai1 = Range("D" & i) + 7"

Avec une erreur 13.

capture

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.

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 Sub

Encore Merci beaucoup pour vos interventions.

Excellente journée.

Rechercher des sujets similaires à "vba formule incomplete gestion commande"