IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur d'execution N°1004


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut Erreur d'execution N°1004
    Bonjour,

    J'ai une erreur 1004 sur cette macro, savez-vous d'ou çà peut venir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Err_SelectionChange2
    Dim Plage As Range
    Application.ScreenUpdating = False
    Set Plage = Range("I4:I700")
    'Sort de la routine si ce n'est pas une cellule de produit
    If Application.Intersect(ActiveCell, Plage) Is Nothing Then _
             GoTo Sort_SelectionChange2
     
    'Vérifie qu'une seule cellule est sélectionnée
    If Target.Count > 1 Then
        MsgBox "Veuillez ne sélectionner qu'une seule cellule"
        GoTo Sort_SelectionChange2
    End If
     
    'Lance la macro pour copier le produit choisi
    Call Incorporer_Ventes2
     
    Sort_SelectionChange2:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Exit Sub
    Err_SelectionChange2:
    MsgBox Err.Description, vbCritical + vbOKOnly, "ERREUR EXCEL N°" & Err.Number
    Resume Sort_SelectionChange2
    End Sub

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu veux tester la sélection d'un cellule, alors ce n'est pas l'événement change que tu dois utiliser mais SelectionChange.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Plage As Range
        Set Plage = Range("I4:I700")
     
        'Sort de la routine si ce n'est pas une cellule de produit
        If Application.Intersect(ActiveCell, Plage) Is Nothing Then Exit Sub
     
        'Vérifie qu'une seule cellule est sélectionnée
        If Target.Count > 1 Then
            MsgBox "Veuillez ne sélectionner qu'une seule cellule"
            Exit Sub
        End If
        Application.ScreenUpdating = False
        Incorporer_Ventes2
        Application.ScreenUpdating = True
     
    End Sub
    Et là, comme tu traites toutes les erreurs tu n'as vraiment pas besoin d'une gestion... d'erreurs.
    Bonne soirée

    Afin de montrer à l'utilisateur qu'un macro est en fonctionnement, je mettrais ton Enableevents = false (qui n'y est pas) avec Application.ScreenUpdating = False
    Tu peux aussi changer la couleur de cellule tant que la macro tourne
    Juste une idée

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Si tu veux tester la sélection d'un cellule, alors ce n'est pas l'événement change que tu dois utiliser mais SelectionChange.
    La macro doit être lancée si le contenu de la cellule change c'est pour cela que je n'ai pas utilisé Selectionchange.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je suis d'accord avec toi mais tu ne peux savoir si le contenu a changé qu'en sortant de la cellule et en le comparant avec ce qu'il était avant... Sauf... si ce n'est pas ce qui t'intéresse.
    Dans le fond, c'est vrai, qu'est-ce qui t'intéresse vraiment ?
    A+

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut jarault, ouskel'n'or et le forum
    Je ne trouve pas d'erreur dans la macro fournie, mais dans la macro lancée... à moins de l'avoir...
    une petite erreur de raisonnement : la cellule ne lance la macro qu'à la validation : ActiveCell est différente de target (dans la plupart des cas.
    Ton erreur viendrait peut-être que la macro que tu lances travaille sur Target, et cette variable est limitée à la macro.

    ouskel'n'or
    Pas d'accord avec toi : Chaque fois que tu as une macro incluant des instructions dont le champ d'utilisation est l'application, il vaut mieux gérer les erreurs. Ta macro utilise-là, sans créer de macro Incorporer_Ventes2 (ce qui revient à une erreur dans cette macro). en remplaçant les ScreenUpDating par EnableEvents (juste par ce que le résultat est visible)
    Et essaie de sélectionner 2 fois I5 (par exemple :
    La première fois, ça marche, tu as une erreur de signalée, mais pas la seconde

    A+

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Gorfael
    ouskel'n'or
    Pas d'accord avec toi : Chaque fois que tu as une macro incluant des instructions dont le champ d'utilisation est l'application, il vaut mieux gérer les erreurs. Ta macro utilise-là, sans créer de macro Incorporer_Ventes2 (ce qui revient à une erreur dans cette macro).
    En effet si tu ne crées pas de macro et tu l'appelles, ou tu ne sais pas ce que tu fais, ou tu veux générer une erreur... Pas de doute là dessus.
    Mais vu que quand tu lances une macro qui appelle une macro qui n'existe pas, l'erreur est assez explicite, c'est une erreur qu'il faut repérer et surtout ne pas "gérer".
    Citation Envoyé par Gorfael
    en remplaçant les ScreenUpDating par EnableEvents (juste par ce que le résultat est visible)
    Et essaie de sélectionner 2 fois I5 (par exemple :
    La première fois, ça marche, tu as une erreur de signalée, mais pas la seconde
    Alors tu m'as mal lu !
    Citation Envoyé par ouskel'n'or qui sauf erreur a bien dit
    Afin de montrer à l'utilisateur qu'un macro est en fonctionnement, je mettrais ton Enableevents = false (qui n'y est pas) avec Application.ScreenUpdating = False
    Tu peux aussi changer la couleur de cellule tant que la macro tourne
    Ça ne te semble pas assez explicit ?
    Faut tout lire pas en diagonale

    Edit
    Pour tout dire, j'aurais écrit ça comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Plage As Range, cell As Range
        Set Plage = Range("I4:I700")
        Set cell = Target
        'Sort de la routine si ce n'est pas une cellule de produit
        If Application.Intersect(cell, Plage) Is Nothing Then Exit Sub
        'Vérifie qu'une seule cellule est sélectionnée
        If Target.Count > 1 Then
            MsgBox "Veuillez ne sélectionner qu'une seule cellule"
            Exit Sub
        End If
        Application.EnableEvents = False
        Target.Interior.ColorIndex = 15
        Application.ScreenUpdating = False
        'Incorporer_Ventes2
     
        '******* simule la macro ********************
        Application.Wait (Now + TimeValue("0:00:02"))
        '********************************************
     
        Target.Interior.ColorIndex = xlNone
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End Sub
    Essaie de provoquer une erreur !

Discussions similaires

  1. erreur d'execution 3704, ...:objet n'est pas ouvert
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/11/2005, 15h44
  2. [ERREUR D'EXECUTION] Segmentation Fault
    Par CestPasMoi dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 17h38
  3. Réponses: 3
    Dernier message: 03/11/2005, 18h41
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo