VBA Excel 2007 erreur d'execution 450

Résolu/Fermé
likesoft - 28 juil. 2015 à 11:53
 likesoft - 28 juil. 2015 à 15:36
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

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
28 juil. 2015 à 13:17
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
0
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...
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
28 juil. 2015 à 15:12
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
0
C'est parfait !!

Merci beaucoup.
0