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 1004 quand macro utilisée depuis un autre classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut Erreur 1004 quand macro utilisée depuis un autre classeur
    Salut les gens,

    J'espère que vous allez pouvoir m'aider.

    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
    Sub investissement(Recap As Excel.Workbook, ExWb As Excel.Workbook)
     
    ' Recap est le classeur depuis lequel j'appelle cette macro, ExWb est l'autre classeur (je le choisis dans un autre macro à partir de laquelle j'appelle celle-ci)
     
    ' Declaration des variables temporaires
    Dim i As Integer
    Dim essai as Single
     
    ' La ligne suivante marche sans problème
    MsgBox ExWb.Sheets("Chiffrages").Cells(34, 4).Value
     
    ' Celle-ci ne marche pas
    essai = Application.WorksheetFunction.Sum(ExWb.Sheets("Chiffrages").Range(Cells(34, 4), Cells(36, 4)))
     
    ....
    La fameuse ligne me produit une erreur, alors que si j'écris dans le classeur "ExWb" exactement la même chose (en utilisant Set ExWb = ThisWorkbook), cela marche sans problème. (les données sont là et tout).

    Je précise qu'ici c'est un exemple précis (j'ai isoler le problème) et que normalement je ne mets pas les lignes (34 et 36) dans le range, mais j'utilise un Array. Donc la solution évidente de faire "cellule 1 + celulle 2 + cellule 3" au lieu d'utiliser WorksheetFunction.Sum ne me convient pas
    J'ai supposé que ça devait provenir du fait que j'utilise les fonctions d'une feuille dans un autre classeur.
    J'ai donc créer dans mon classeur recap une function Somme (plage as Range) qui faisait la même chose, ça passe pas non plus.

    Ça m'agace, je ne trouve pas. Si quelqu'un pouvait me dépanner ça serait super.

    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai = Application.Sum(ExWb.Sheets("Chiffrages").Range(ExWb.Sheets("Chiffrages").Cells(34, 4), ExWb.Sheets("Chiffrages").Cells(36, 4)))
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with ExWb.Sheets("Chiffrages")
    essai = Application.Sum(.Range(.Cells(34, 4), .Cells(36, 4)))
    end with
    ps: j'ai enlevé WorkSheetFunction (par simplification)

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Contrairement à ce qu'annonce Microsoft, Range se comporte comme une fonction et non pas comme une propriété d'une feuille.
    Il faut donc lui donner la position complète de chaque cellule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai = Application.WorksheetFunction.Sum(Range(ExWb.Sheets("Chiffrages").Cells(34, 4), ExWb.Sheets("Chiffrages").Cells(36, 4)))
    Pour simplifier l'écriture, tu peux passer par un bloc With:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ExWb.Sheets("Chiffrages")
      essai = Application.WorksheetFunction.Sum(Range(.Cells(34, 4), .Cells(36, 4)))
    End With
    Ou mieux, en créant une instance de la feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim wksDest As Worksheet
    Set wksDest = ExWb.Sheets("Chiffrages")
    essai = Application.WorksheetFunction.Sum(Range(wksDest.Cells(34, 4), wksDest.Cells(36, 4)))
    Zut, grillé...
    Salut mercatog
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Bon bah je vais aller tester ça de ce pas, mais je vois pas pourquoi ça marcherait pas, je vois le soucis maintenant

    Merci de votre rapidité les gars

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Bon bah ça ne marche pas en fait :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ' J'ai rajouté ça comme expliqué :
    ' Créer une instance de la feuille
    Dim wksDest As Worksheet
    Set wksDest = ExWb.Sheets("Chiffrages")
     
    Dim essai As Single
    essai = Application.WorksheetFunction.Sum(Range(wksDest.Cells(34, 4), wksDest.Cells(36, 4)))

    ça me donne toujours l'erreur 1004...

    ça me parait extremement redondant mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai = Application.WorksheetFunction.Sum(wksDest.Range(wksDest.Cells(34, 4), wksDest.Cells(36, 4)))
    marche nickel. Je comprends pas pourquoi je dois passer deux fois la feuille (à range, et à cells)

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Où as-tu placé le code de ta fonction?
    Dans un module de feuille ou un module standard?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    dans un module (et non dans le code de la feuille) de mon classeur.

    Là je chipote, j'essaie de comprendre pourquoi je dois le passer deux fois, mais sinon je pense que je peux passer le sujet en résolu.

    Je vous remercie, et si quelqu'un peut m'expliquer le pourquoi du comment, ça sera un plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Activer un évènement Workbook_BeforeClose quand on ferme depuis un autre classeur
    Par CME22 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/03/2014, 14h58
  2. [XL-2003] Erreur 1004 sur macro
    Par remthi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/06/2011, 12h23
  3. [XL-2010] Executer une macro depuis un autre classeur
    Par debdev dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2011, 13h28
  4. Réponses: 11
    Dernier message: 30/10/2007, 09h35
  5. [VBA] utiliser une macro contenue dans un autre classeur
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 01/02/2006, 18h46

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