VBA Excel 2007 erreur d'execution 450 [Résolu/Fermé]

Signaler
-
 likesoft -
Bonjour à tous !

Je suis totalement débutante en VBA (et en développements tout court... ), j'ai un peu de mal avec les termes techniques.

Je rencontre un problème de type erreur 450 ("erreur de compilation: nombre d'arguments incorrect ou affectation de propriété incorrecte")quand je lance le code ci-après

Private Sub Workbook_Open()

Dim L As Range

Application.ScreenUpdating = False

With Sheets("AOUT") ' à modifier

For Each L In .Range("L6", [L6], .[E65536].End(xlDown))

    If L.Value < DateSerial(Year(Date), Month(Date) + 2, Day(Date)) Then

        If txt = "" Then txt = "Fin de validité titre(s) de transport:" & vbCrLf

        txt = txt & L.Offset(, -11) & ", " & L.Offset(, 0) & vbCrLf

    End If

Next L

If txt <> "" Then MsgBox txt

End With

Application.ScreenUpdating = True

End Sub



J'ai déjà utilisé ce code avant sur un autre tableau plus simple et il fonctionnait très bien.

Pouvez-vous m'aider ?

Merci !

2 réponses

Messages postés
2178
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
16 janvier 2021
304
Bonjour
Remplacez
For Each L In .Range("L6", [L6], .[E65536].End(xlDown))

par
For Each L In .Range("L6:L" & [E65536].End(xlDown).Row)

Cdlt
Bonjour

Ca fonctionne ! Merci Frenchie83.

Maintenant j'ai un autre problème, je voudrais qu'un msgbox s'affiche avec le nom et la date de validité qui arrive à péremption dans deux mois ... jusque la tout fonctionne.

Cependant dans le msgbox s'affiche également les colonnes vides .

Dans ma colonne "L" certaines cellules sont séparées par des cellules vides.

Je souhaite que, si la cellule est vide, la macro passe à la ligne suivante.

Je ne sais pas si je suis très claire...
Messages postés
2178
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
16 janvier 2021
304
Re
Private Sub Workbook_Open()
    Dim L As Range
    Application.ScreenUpdating = False
    With Sheets("AOUT")
    For Each L In .Range("L6:L" & [L65536].End(xlUp).Row)
        If L.Value < DateSerial(Year(Date), Month(Date) + 2, Day(Date)) And L.Value <> "" Then txt = txt & L.Offset(, -11) & L.Offset(, 0) & vbCrLf
    Next L
    If txt <> "" Then MsgBox "Fin de validité titre(s) de transport:" & vbCrLf & txt
    End With
End Sub


j'ai modifié la ligne du post précédent pour 2 raisons:
-la recherche de la dernière ligne s'effectue sur la colonne L au lieu de E
-On part de la cellule la plus basse et on remonte pour trouver la dernière ligne. donc la nouvelle forme doit s'écrire comme ceci.
 For Each L In .Range("L6:L" & [L65536].End(xlUp).Row)

cdlt
C'est parfait !!

Merci beaucoup.