Erreur d'exécution 1004

Résolu
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

Résumé de la discussion

Le problème décrit consiste à afficher des messages à l'ouverture d'un classeur Excel via une macro VBA et à obtenir une erreur d'exécution 1004. Plusieurs éléments du code utilisent des plages nommées et des boucles For Each sur des plages comme reponse_envoye ou date_reponse, ce qui peut provoquer l'erreur lorsque des cellules sont vides. Des propositions suggèrent d'encapsuler la logique dans une procédure distincte, d'utiliser Option Explicit, de vérifier IsDate, et de comparer les dates (Date - 3, aujourd'hui) plutôt que d'accéder directement aux cellules. En cas de doute, la discussion souligne qu'une suppression de boucle ou une correction du nom des plages peut être nécessaire pour éviter l'affichage répétitif des messages.

Bobot (l’IA à votre service)
  1. 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
    1. Contributeur
      bonjour, as-tu bien
      option explicit
      en début de module?
      à quelle ligne obtiens-tu le message d'erreur?
      0
      1. 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
        1. 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
        2. 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
        3. Contributeur
          @Loic_7447Ne 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
        4. @yg_beVoici 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
        5. Contributeur
          @Loic_7447tout fonctionne maintenant?
          0
      2. Contributeur
        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
        1. 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
          1. Bonjour,
            C'est ce que je vous avais recommande post 20........
            0