Erreur d'exécution 1004

Résolu
Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai fait un programme qui affiche un message à l'ouverture d'un ficher excel.
Petit problème, lorsque j'ouvre le fichier, on m'affiche "erreur d'exécution 1004".

Voici mon programme :
Private Sub workbook_open()
Dim reponseclient As Range
Dim datereponse As Range

For Each reponseclient In ActiveSheet.Range("reponse_envoye")
    If reponseclient = "" Then
        For Each datereponse In ActiveSheet.Range("date_reponse")
        Valeur = Cells(alertestock.Row, 6)
            If datereponse = "date-3" Then
            MsgBox "Le client " & Valeur & " attend une réponse dans trois jours.", vbCritical, "Réponse sous 3 jours"
            Else
            End If
            If datereponse = "date" Then
            MsgBox "Le client " & Valeur & " attend une réponse aujourd'hui.", vbCritical, "Réponse aujourd'hui"
            Else
            End If
        Next
    End If
Next
End Sub


Merci d'avance pour vos réponses !

5 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour Loic, bonjour le forum,

alertestock non déclarée ?!... J'ai aussi l'impresion que datereponse devrait être une variable de type Date... Bref, impossible de te répondre sans le fichier qui va bien !...
voir par exemple https://www.cjoint.com/ pour mettre un fichier en pièce jointe.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, as-tu bien
option explicit
en début de module?
à quelle ligne obtiens-tu le message d'erreur?
0
Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour vos réponses, ça m'a permis de corriger quelques détails, mais je rencontre toujours le même problème...

Option Explicit

Private Sub workbook_open()
Dim reponseclient As Date
Dim datereponse As Date
Dim Client As Variant

For Each reponseclient In ActiveSheet.Range("reponse_envoye")
    If reponseclient = "" Then
        For Each datereponse In ActiveSheet.Range("date_reponse")
        Client = Cells(datereponse.Row, 6)
            If datereponse = Date - 3 Then
            MsgBox "Le client " & Client & " attend une réponse dans trois jours.", vbCritical, "Réponse sous 3 jours"
            Else
            End If
            If datereponse = Date Then
            MsgBox "Le client " & Client & " attend une réponse aujourd'hui.", vbCritical, "Réponse aujourd'hui"
            Else
            End If
        Next
    End If
Next
End Sub


Le message d’erreur 1004 apparait au niveau de la ligne 8, au premier
For each ...
.
J'ai déclaré
reponseclient
et
datereponse
en tant que Date, mais un autre message d'erreur s'affiche et me dit "La variable de type For each doit être de type Variant ou Object". Je ne sais donc pas trop quoi faire pour que mon programme fonctionne.
0
ALS35 Messages postés 1033 Date d'inscription   Statut Membre Dernière intervention   145
 
Bonjour,

Es-tu sûr d'être positionné sur la bonne feuille à l'ouverture du fichier ? Ce doit être la feuille dans laquelle il y a Range("reponse_envoye") et Range("date_reponse") ?
Si tu fais For Each reponseclient In ActiveSheet.Range, reponseclient doit être de type Range, idem pour datereponse.
Difficile de voir le problème sans un extrait représentatif de ton fichier.

Cordialement
0
Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne peux malheureusement pas partager mon fichier car il contient des infos confidentielles ...

J'ai refais quelques modifications en vérifiant bien la feuille à l'ouverture, le nom et le type de variables ... Mais cette fois ci, le fichier refuse de s'ouvrir en laissant la fenêtre de lancement excel affiché à l'écran (j'ai essayé sur plusieurs ordi pour le même résultat).

Voici mon nouveau code :
Option Explicit

Private Sub workbook_open()
Sheets("2019").Activate

Dim reponseclient As Range
Dim datereponse As Range
Dim Client As Variant

For Each reponseclient In ActiveSheet.Range("reponse_envoye")
    If reponseclient = "" Then
        For Each datereponse In ActiveSheet.Range("date_reponse")
        Client = Cells(datereponse.Row, 6)
            If datereponse = Date - 3 Then
            MsgBox "Le client " & Client & " attend une réponse dans trois jours.", vbCritical, "Réponse sous 3 jours"
            Else
            End If
            If datereponse = Date Then
            MsgBox "Le client " & Client & " attend une réponse aujourd'hui.", vbCritical, "Réponse aujourd'hui"
            Else
            End If
        Next
    End If
Next
End Sub


J'espère que vous allez pouvoir m'aider une fois de plus, merci d'avance !
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
Ne peux-tu pas supprimer les données ou les remplacer par des données non confidentielles?
Il est recommandé de ne pas utiliser
Activate
.
Je suggère
Sheets("2019").Range("reponse_envoye")

Je pense que la logique de ton code est incorrecte, et qu'il prend simplement un temps trop long. A quoi sert la boucle en ligne 12?
Il serait sans doute beaucoup plus simple que tu testes ton code sans l'insérer dans workbook_open. Cela te permettra d'utiliser les facilités de débogage offertes par le VBA.
0
Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Voici mon fichier :
https://we.tl/t-fMC5KGG3Zq

J'ai supprimé la boucle à la ligne 12, elle m'affichait le message que je souhaitais, mais en boucle.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
tout fonctionne maintenant?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
suggestion:
Option Explicit

Private Sub workbook_open()
Call rappels
End Sub
Private Sub rappels()
Dim date_envoi_mail As Range
Dim date_attendue As Date
Dim Client As Variant

For Each date_envoi_mail In ActiveSheet.Range("date_client_informe")
    If date_envoi_mail = "" Then
        If IsDate(Cells(date_envoi_mail.Row, 8)) Then
            date_attendue = CDate(Cells(date_envoi_mail.Row, 8))
            Client = Cells(date_envoi_mail.Row, 6)
            If date_attendue = Date - 3 Then
                MsgBox "Le client " & Client & " attend une réponse dans trois jours.", vbCritical, "Réponse sous 3 jours"
            Else
                If date_attendue = Date Then
                MsgBox "Le client " & Client & " attend une réponse aujourd'hui.", vbCritical, "Réponse aujourd'hui"
                End If
            End If
        End If
    End If
Next
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Loic_7447 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour à tous,

J'ai résolu mon problème en repartant de zéro. Une partie du problème était liée à la mise en forme du fichier (cellules fusionnées ...). J'ai donc revu cette mise en forme et adapté un nouveau programme.

Merci pour votre aide !
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,
C'est ce que je vous avais recommande post 20........
0