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 :

Plage d'un autre classeur en argument d'une fonction VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    stagiaire
    Inscrit en
    Octobre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2
    Par défaut Plage d'un autre classeur en argument d'une fonction VBA
    Bonjour,

    J'ai codé une fonction personnalisée qui prend une plage en argument et la stocke dans un tableau pour effectuer des opérations.

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function mafonction (plage as range)
     
    dim tableau()
    tableau = plage.value
     
    mafonction = tableau (1,1)
     
    endfunction
    Elle fonctionne très bien quand la plage passée en argument provient du même classeur (même d'une feuille différente) mais pas quand je sélectionne une plage d'un autre classeur ouvert.

    Ce qui m'étonne c'est que par exemple si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mafonction = worksheetfunction.sum(plage)
    ça fonctionne même avec une plage d'un autre classeur...

    Avez-vous une idée de ce qui bloque ?

    Merci d'avance !

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je ne comprend pas le problème

    soit deux classeurs (Classeur1 et Classeur2)

    j'écris dans un module standard de Classeur1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function mafonction(plage As Range)
     
    Dim tableau()
    tableau = plage.Value
     
    mafonction = tableau(1, 1)
     
    End Function
     
    Sub toto()
    MsgBox mafonction(Selection)
    End Sub
    je sélectionne une plage située dans classeur2

    je lance la procédure toto, j'obtiens bien la valeur de la première cellule de ma sélection active

    et d'ailleurs, nul besoin de passer par un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function mafonction(plage As Range)
        mafonction = plage.Cells(1, 1).Value
    End Function
     
    Sub toto()
        MsgBox mafonction(Selection)
    End Sub

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par loloboulot Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function mafonction (plage as range)
    dim tableau()
    tableau = plage.value
    mafonction = tableau (1,1)
    endfunction
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function mafonction (plage as range)
    mafonction = Plage.Range("A1")
    endfunction
    [/QUOTE]
    Comme ça tu sauras si le problème vient de la référence de plage ou du transfert dans "tableau".

    Petite question au passage : Quand ça plante, est-ce que le fichier contenant ta plage est ouvert ?

  4. #4
    Nouveau candidat au Club
    Femme Profil pro
    stagiaire
    Inscrit en
    Octobre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function mafonction (plage as range)
    mafonction = Plage.Range("A1")
    endfunction
    Comme ça tu sauras si le problème vient de la référence de plage ou du transfert dans "tableau".

    Petite question au passage : Quand ça plante, est-ce que le fichier contenant ta plage est ouvert ?[/QUOTE]

    Bonjour,

    Merci de votre aide, en fait ça affiche juste #valeur dans la cellule où j'applique ma fonction. Effectivement le problème doit venir de transfert dans le tableau car le test ci-dessus fonctionne. Ce qui m'étonne encore plus c'est que la fonction tourne bien quand je la lance avec un échantillon de données rentré à la main dans une feuille d'un autre classeur.

    J'ai essayé autre chose, en fait mon jeu de données a 62075 lignes, en prenant juste les 62 premières ça fonctionne, par contre 620 ça ne fonctionne déjà plus. Est-ce qu'il faut que je mette un format particulier pour pouvoir prendre toutes mes lignes ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Si pour me mettre en conformité avec la config d'un client je n'avais installé office 2010, ma surprise aurait été la même.

    Je viens de faire un test erreur de type ou fonction défini par l'utilisateur !

    Il faut préciser que nous nous avons développé une macro pas si compliqué que cela, elle fonctionne sur tous les pc de la terre sauf la sien!

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/07/2015, 23h51
  2. Réponses: 1
    Dernier message: 29/06/2015, 18h01
  3. [fonctions imbriquées] Passage argument d'une fonction a l'autre
    Par ricololo dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 06/11/2008, 13h44
  4. Passage d'argument dans une fonction d'une autre classe.
    Par lavince dans le forum Général Python
    Réponses: 5
    Dernier message: 13/09/2008, 22h16
  5. [VBA] Copie d'une plage vers un autre classeur
    Par Pachee dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/08/2008, 15h14

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