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 :

Parametre Range dans une fonction


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 37
    Points : 87
    Points
    87
    Par défaut Parametre Range dans une fonction
    Bonjour,

    J'essaye de passer un parametre Range sur la fonction ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Param(plage As Range, ligne As integer) As integer
     
    param = 5
     
    End Function
    Lorsque j'appelle cette fonction dans une feuille Excell avec une plage qui fait partie du classeur : pas de problème.

    Lorsque je fais appel à cette fonction dans une feuille excell avec une plage faisant d'un partie d'un autre classeur ouvert : pas de problème.

    Lorsque j'appelle cette fonction avec une plage faisant partie d'un autre classeur fermé j'ai une erreur #VALEUR. (bien que le chemin vers le classeur apparaisse dans sa totalité à l'appel de la fontion)

    Existe t-il un moyen d'utiliser un parametre Range sur un classeur ferme ?
    Mon but etant de récupérer les valeurs du chemin , de la feuille, cellule pour faire une requète ADO dessus

    Merci d'avance.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Recherche sur le forum et dans la FAQ avec 'travail sur classeur fermer', tu va trouver plein de trucs.
    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 37
    Points : 87
    Points
    87
    Par défaut
    J'ai dèja lu le tutoriel de SilkyRoad sur la lecture sur des classeur fermés.
    Mais il n'utilise pas de fonctions mais des subroutine où les parametres du calseur sont codés en dur et pas passé comme parametre d'une fonction.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour


    J'ai dèja lu le tutoriel de SilkyRoad sur la lecture sur des classeur fermés.
    Mais il n'utilise pas de fonctions mais des subroutine où les parametres du calseur sont codés en dur et pas passé comme parametre d'une fonction.
    Ce ne sont que des exemples. Personne ne t'empêche de les adapter ...


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Function LireCellule_ClasseurFerme( _
            Chemin As String, _
            Fichier As String, _
            Feuille As String, _
            Cellule As Variant) As Variant
     
        Application.Volatile
     
        Dim Source As Object, Rst As Object, ADOCommand As Object
        Dim Cible As String
     
        Feuille = Feuille & "$"
        Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
            Cellule.Address(0, 0, xlA1, 0)
     
        Set Source = CreateObject("ADODB.Connection")
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Chemin & "\" & Fichier & _
            ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        Set ADOCommand = CreateObject("ADODB.Command")
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cible & "]"
        End With
     
        Set Rst = CreateObject("ADODB.Recordset")
        '1 = adOpenKeyset, 3 = adLockOptimistic
        Rst.Open ADOCommand, , 1, 3
        Set Rst = Source.Execute("[" & Feuille & Cible & "]")
     
        LireCellule_ClasseurFerme = Rst(0).Value
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Function

    et tu peux insérer ce type de formule dans une cellule
    exemple:
    =LireCellule_ClasseurFerme(A1;A2;A3;G7)

    A1 correspond au chemin:
    C:\Documents and Settings\mimi\dossier

    A2 correspond au nom du classeur:
    ListeCriteres.xls

    A3 correspond au nom de la feuille:
    Feuil1

    G7 correspond à la cellule qui doit être lue dans le classeur fermé

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 37
    Points : 87
    Points
    87
    Par défaut
    Merci SilkyRoad,

    J'avais bien sûr pensé à cette solution qui marche effectivement.
    Mais le gros inconvénient est qu'on est obligé de demander à l'utilisateur d'entrer 4 paramètres décrivant le range, alors que pour faire un RECHERCHEV (par exemple) on utilise qu'un paramètre pour décrire le range.

    J'aurais peut être du mieux préciser que c'est le passage du parametre range qui me pose problème.

    Le fait est que le passage du range par parametre de fonction marche, sauf dans le cas d'un accès à un classeur fermé. Alors que le passage du même paramètre avec RECHERCHEV marche même sur un Range d'un classeur fermé.

    J'utilise Excell 2000 (version 9)
    As tu essayé le code que j'ai écrit avec une autre version de Excell ?
    Peut être que ça marche différemment avec une version plus récente ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    Mais le gros inconvénient est qu'on est obligé de demander à l'utilisateur d'entrer 4 paramètres décrivant le range
    Qui t'interdit de modifier la fonction pour indiquer le Chemin/Nomclasseur/NomFeuille/NomCellule sur un paramètre au lieu de 4 ?


    bonne soirée

Discussions similaires

  1. string comme parametre constant dans une fonction
    Par jfjobidon dans le forum Débuter
    Réponses: 9
    Dernier message: 06/06/2015, 23h21
  2. Réponses: 3
    Dernier message: 19/01/2010, 14h01
  3. [débutant] mettre un parametre optionnel dans une fonction
    Par maximenet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 16h08
  4. Réponses: 6
    Dernier message: 24/12/2004, 16h46
  5. [langage] Passage de paramètres dans une fonction
    Par And_the_problem_is dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2004, 08h20

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