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
2237
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
20 juin 2022
332
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
2237
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
20 juin 2022
332
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