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 :

Imbrication de fonction dans VBA [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut Imbrication de fonction dans VBA
    Bonjour,

    Je me permet de venir vers vous, car je me trouve dans une situation insoluble.
    J'ai crée plusieurs "Function" qui me renvoi, après une validation matriciel, un tableau de valeur. Toutes ces "Function" fonctionne parfaitement indépendamment les unes des autres. Mais quand je crée une "Function" supérieur qui utilise les autres et par,ou sans, un jeu de variable, passe le résultat d'une première "Function" comme paramètre d'une seconde. Cette dernière engendre une erreur. Alors que chaque "Function" est censé renvoyer un résultat de type "Range" et que les paramètres de la seconde "Function" sont aussi définis comme "Range".
    Je présume qu'il s'agit d'un souci sur le type de donnée en entrée ou en sortie mais je n'arrive pas à définir ou, ni comment.

    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,

    en nous montrant tes "sous-fonctions" et la fonction principale, ça devrait déjà faciliter l'aide à la résolution de ton problème

  3. #3
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Pardon

    Bon je suis dessus donc j'ai déjà tenté deux ou trois truc qui marche, ou pas, suivant les expériences.
    Quand j'utilise la fonction "WPtsCommuns2systeme" elle me renvoi bien le bon résultat dans un tableur Excel
    Quand j'utilise la fonction "WCalculParamTrans2D" depuis Excel sur le jeu de donnée généré par la fonction "WPtsCommuns2systeme" ça fonctionne aussi.
    Mais quand j'imbrique le tout dans la fonction "Transfo2D", ça coince

    Fonction principal

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Function Transfo2D(DONNESYSTREF() As Variant, DONNESYSTLOCAL() As Variant, Optional FACT As Double = 0) As Variant()
     
    Application.Volatile
    'Transforme un jeu de coordonnées d'un systéme a un autre en fonction des paramètres données et du listing de points(mat,x,y,z)
    Dim K, I, J As Integer
    Dim FACTECH As Double
    Dim DONNECOMMUNEtemp() As Variant
    Dim PARAMtemp(10) As Double
    Dim NEWCOORD()
    Dim NEWCOORDTEMP()
     
    Set DONNECOMMUNE = WPtsCommuns2systeme(DONNESYSTREF, DONNESYSTLOCAL)
    K = UBound(DONNECOMMUNE)
    ReDim DONNECOMMUNEtemp(K, 7)
    For I = 0 To K
        For J = 0 To 7
            DONNECOMMUNEtemp(I, J) = DONNECOMMUNE(I, J)
       Next J
    Next I
     
     
    COORDATRANS = DONNESYSTLOCAL
    If FACT <> 0 Then
        FACTECH = FACT
        Else
        FACTECH = 0
    End If
     
     
    PARAM = WCalculParamTrans2D(DONNECOMMUNE, FACTECH)
    'For I = 0 To 10
            'PARAMtemp(I) = PARAM(I)
    'Next I
     
     
    Transfo2D = PARAM
     
    'K = DONNESYSTLOCAL.Rows.Count
    'ReDim NEWCOORD(K, 2)
    'ReDim NEWCOORDTEMP(K, 4)
     
    'For I = 1 To K
        'NEWCOORDTEMP(I - 1, 0) = COORDATRANS(I, 2) + PARAM(2)
       ' NEWCOORDTEMP(I - 1, 1) = COORDATRANS(I, 3) + PARAM(3)
        'NEWCOORDTEMP(I - 1, 2) = GIS(PARAM(4), PARAM(5), NEWCOORDTEMP(I - 1, 0), NEWCOORDTEMP(I - 1, 1))
        'NEWCOORDTEMP(I - 1, 3) = DIST(PARAM(4), PARAM(5), NEWCOORDTEMP(I - 1, 0), NEWCOORDTEMP(I - 1, 1))
    'Next I
     
    'For I = 1 To K
        'NEWCOORD(I - 1, 0) = COORDATRANS(I, 1)
        'NEWCOORD(I - 1, 1) = WXpol(PARAM(4), NEWCOORDTEMP(I - 1, 2), NEWCOORDTEMP(I - 1, 3))
        'NEWCOORD(I - 1, 2) = WYpol(PARAM(5), NEWCOORDTEMP(I - 1, 2), NEWCOORDTEMP(I - 1, 3))
        'NEWCOORD(I - 1, 3) = COORDATRANS(I, 4)
    'Next I
     
    'Transfo2D = NEWCOORD
     
    End Function
    sous fonction
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Function WPtsCommuns2systeme(TabA As Variant, TabB As Variant) As Variant()
     
     
    'renvoi un tableau contenant les points communs contenu dans 2 tableaux de points
    Application.Volatile
    Dim Resultat() As Variant
    Dim K, L, M, I, J, N As Integer
     
    TempA = WTabPtsSansRedondance(TabA)
    TempB = WTabPtsSansRedondance(TabB)
     
    N = 0
    K = UBound(TempA)
    L = UBound(TempB)
     
    For I = 0 To K
        For J = 0 To L
            If TempA(I, 0) = TempB(J, 0) And TempA(I, 0) <> "" And TempB(J, 0) <> "" Then
                N = N + 1
                Exit For
            End If
        Next J
    Next I
     
    N = N - 1
    ReDim Resultat(N, 7)
     
    M = -1
    For I = 0 To K
         For J = 0 To L
            If TempA(I, 0) = TempB(J, 0) And TempA(I, 0) <> "" And TempB(J, 0) <> "" Then
                M = M + 1
                Resultat(M, 0) = TempA(I, 0)
                Resultat(M, 1) = TempA(I, 1)
                Resultat(M, 2) = TempA(I, 2)
                Resultat(M, 3) = TempA(I, 3)
                Resultat(M, 4) = TempB(J, 0)
                Resultat(M, 5) = TempB(J, 1)
                Resultat(M, 6) = TempB(J, 2)
                Resultat(M, 7) = TempB(J, 3)
                Exit For
            End If
        Next J
    Next I
     
    PtsCommuns2systeme = Resultat
     
    End Function

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Function WCalculParamTrans2D(JEUCOORD As Variant, Optional FACT As Double = 0) As Double()
    Application.Volatile
    Dim Resultat(10) As Double
    Dim ROTA, XREF, YREF, XTR, YTR, ZREF, ZTR, FACTECH As Double
    Dim I, J, K As Integer
     
    K = JEUCOORD.Rows.Count
     
    XREF = 0
    YREF = 0
    ZREF = 0
    XTR = 0
    YTR = 0
    ZTR = 0
    ROTA = 0
    FACTECH = 0
     
    For I = 1 To K
        XREF = XREF + JEUCOORD(I, 2)
        YREF = YREF + JEUCOORD(I, 3)
        ZREF = ZREF + JEUCOORD(I, 4)
        XTR = XTR + JEUCOORD(I, 6)
        YTR = YTR + JEUCOORD(I, 7)
        ZTR = ZTR + JEUCOORD(I, 8)
    Next I
     
    XREF = XREF / K
    YREF = YREF / K
    ZREF = ZREF / K
    XTR = XTR / K
    YTR = YTR / K
    ZTR = ZTR / K
    For I = 1 To K
        ROTA = ROTA + (GIS(XREF, YREF, JEUCOORD(I, 2), JEUCOORD(I, 3)) - GIS(XTR, YTR, JEUCOORD(I, 6), JEUCOORD(I, 7)))
        FACTECH = FACTECH + (DIST(XREF, YREF, JEUCOORD(I, 2), JEUCOORD(I, 3)) / DIST(XTR, YTR, JEUCOORD(I, 6), JEUCOORD(I, 7)))
     
    Next I
     
    ROTA = ROTA / K
    If FACT <> 0 Then
        FACTECH = FACT
        Else
        FACTECH = FACTECH / K
    End If
     
    Resultat(0) = -ROTA
    Resultat(1) = FACTECH
    Resultat(2) = XREF - XTR
    Resultat(3) = YREF - YTR
    Resultat(4) = ZREF - ZTR
    Resultat(5) = XREF
    Resultat(6) = YREF
    Resultat(7) = ZREF
    Resultat(8) = XTR
    Resultat(9) = YTR
    Resultat(10) = ZTR
     
    WCalculParamTrans2D = Resultat
     
    End Function

  4. #4
    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
    C'est assez difficile, me concernant, de bien comprendre le but de tes procédures, je dois donc uniquement m'accrocher aux principes universels et à la logique pure VBA. Déjà sur cette base il y a des trucs qui m'interpellent.

    exemples :

    des variables qui ne sont pas déclarées dans ce que tu nous montres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COORDATRANS = DONNESYSTLOCAL
    du coup, des lignes d'instanciation de variables ont l'air assez exotiques, sans pour autant forcément l'être dans la réalité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DONNECOMMUNE = WPtsCommuns2systeme(DONNESYSTREF, DONNESYSTLOCAL)
    des déclarations maladroites, seul J est un Integer, les autres sont des Variant

    et des tests conditionnels qui semblent superflus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If FACT <> 0 Then
        FACTECH = FACT
        Else
        FACTECH = 0
    End If
    Que FACT soit égal ou non à 0, sa valeur est affectée à FACTECH

    ça veut dire quoi "ça coince" ?
    un message d'erreur ? Lequel ?
    Un résultat inattendu ? Il faut expliquer précisément ce qui est attendu, et ce que finalement tu obtiens actuellement.

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

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set DONNECOMMUNE = WPtsCommuns2systeme(DONNESYSTREF, DONNESYSTLOCAL)
    me parait inapproprié.
    Set sert pour un objet et WPtsCommuns2systeme retourne une variable tableau, pas un range (range=plage).
    DONNECOMMUNE = ...
    Sans feuille en situation je n'ai pas été plus loin.

    Rien à voir avec ton pb mais pose-toi la question de savoir si tous tes Application.Volatile sont nécessaires.
    Ca ne l'est que si tu as une variable utilisée par la fonction qui n'est pas passée en paramètre. Sinon tu la fais évaluer pour rien à chaque Calculate.

    eric

    edit: ah, on s'est croisés avec Joe, salut.

  6. #6
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Bonjour,
    Merci pour vos réponse je vais en premier lieu essayer d’éclaircir le code sur les points que vous m'avez spécifié.
    Pour répondre à vos question :

    je pensais que cette formulation permettait de déclarer les 3 variable en tant que integer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If FACT <> 0 Then
        FACTECH = FACT
        Else
        FACTECH = 0
    End If
    Pour ce test conditionnel je ne sais pas ce qui se passe si l'opérateur ne rentre pas le paramètre optionnel, donc en prévention des risque j'ai mis ça, mais il est vrais que comme j'ai mis une valeur par défaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DONNECOMMUNE = WPtsCommuns2systeme(DONNESYSTREF, DONNESYSTLOCAL)
    ça c'était une expérience qui s'est avéré infructueuse.

    Par ça coince j’entends, que le resultat attendu dans excel ne se fait pas il y a juste #VALEUR

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    ça c'était une expérience qui s'est avéré infructueuse
    Ben met ton code sensé être correct alors, ça serait plus logique.
    eric

  8. #8
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Je cherche a faire des fonctions qui reçoivent en paramètres des tableaux ( depuis Excel directement ou des tableaux venant de résultats d'autre fonction) et qui renvoient un tableaux.
    Mais je ne trouve rien sur comment on déclare ce genre de fonction.
    Donc je vais essayé de suivre vos conseil mais je vais tout reprendre le plus proprement possible mais pourriez vous me dire si le code suisvant et juste, et si la déclaration d la fonction est bonne, sachant que les paramètre sont :1°) un tableau de N ligne et de 4 colonnes
    2°) un tableau de 1 ligne et 11 colone
    Elle fonctionne sur Excel.

    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
    Function WTransfoCoord(COORDTRANS As Variant, PARAMET As Variant) As Variant
    'Fait la transformation d'un jeu de coordonnées a partir du jeu de coordonnées en question et les paramètres de la transfomation
    Dim NEWCOORD()
    Dim K As Integer, I As Integer, J As Integer
     
    K = COORDTRANS.Rows.Count
    ReDim NEWCOORD(K, 4)
    J = -25
    For I = 1 To K
        NEWCOORD(I - 1, 0) = COORDTRANS(I, 1)
        NEWCOORD(I - 1, 1) = WXpol(PARAMET(6), GIS(PARAMET(9), PARAMET(10), COORDTRANS(I, 2), COORDTRANS(I, 3)) + PARAMET(1), DIST(PARAMET(9), PARAMET(10), COORDTRANS(I, 2), COORDTRANS(I, 3)) * PARAMET(2))
        NEWCOORD(I - 1, 2) = WYpol(PARAMET(7), GIS(PARAMET(9), PARAMET(10), COORDTRANS(I, 2), COORDTRANS(I, 3)) + PARAMET(1), DIST(PARAMET(9), PARAMET(10), COORDTRANS(I, 2), COORDTRANS(I, 3)) * PARAMET(2))
        NEWCOORD(I - 1, 3) = COORDTRANS(I, 4) + PARAMET(5)
    Next I
     
    WTransfoCoord = NEWCOORD
     
    End Function
    Pour plus de compréhension veuillez trouver le projet Global ci-joint

    TRUC SPIT REF G3.xlsm

    c'est un peu brouillon mais je ne suis pas un grand programmeur

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Il semble qu'il y ait un soucis avec le fichier joint...
    En attendant met un Stop au début de tes fonctions pour faire en pas à pas (F8) et en contrôlant les contenus des tableaux au fur et à mesure (fenêtre Espions).
    Tu trouveras peut-être tout seul l'anomalie
    eric

  10. #10
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    je ne sais pas trop pourquoi le mode pas à pas n'est pas disponible hormis "ding" il se passe pas grand choses quand j'appuie sur F8

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    ajoute Stop au début de tes fonction et revalide la formule sur la feuille.

  12. #12
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Merci, j'ai pu trouvé un problème de transmission de données. je continue de fouiller.

  13. #13
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Bon je m'excuse de vous poser des question à la con comme ca mais la je suis en train de reprendre toutes mes fonction une à une car en faisant le controle pas à pas j'ai trouvé plein de choses incongrues.

    Dois-je a tout pris suivre ce formalisme ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim CooLocal2() As Variant
    Dim K As Integer, I As Integer, J As Integer, L As Integer
     
    K = CooLOCAL.Rows.Count
    L = CooLOCAL.Columns.Count
     
    ReDim CooLocal2(K, L) As Variant
     
    CooLocal2 = CooLOCAL.Value
    ou bien je peu simplifier par un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim CooLocal2() As Variant
    Dim K As Integer, I As Integer, J As Integer, L As Integer
     
    CooLocal2 = CooLOCAL.Value
    car la fenêtre espion me montre, que malgré mon ReDim, au moment de l’affectation des valeurs "ça" redimensionne le tableau tout seul.

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Il n'y a pas de question con quand on débute. (quoique... mais je ne parle pas pour toi ;-) )
    Ben ça dépend, c'est quoi CooLOCAL ? Il faut être précis en vba.
    Si c'est un range l'affectation lui donnera effectivement les bonnes dimensions avec les indices qui démarrent à 1.
    Ce n'est même plus de la simplification, c'est enlever qq chose de totalement inutile, donc à faire.
    eric

  15. #15
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Merci de ton aide,
    En effet c'est un range dans cette fonction mais le but serais de ne plus passer par le tableur et d’enchainer les différentes fonctions les une après les autres, le résultats des première servant de paramètres pour les suivantes. Mais j'ai impression que certains résultats sont incompatible en tant que paramètre pour les autres fonctions.
    je t'avoue que jusqu’à présent je me contenté de petites fonctions relativement simple, mais là sur le coup j'ai peut être eu les yeux plus gros que le ventre.

    Quand je fait défiler la fonction en pas à pas le paramètre "CooLOCAL" a bien les valeur du tableau de données Excel, mais pas le paramètre "PAsSagE".
    La seule différence c'est que les données de "CooLOCAL" sont des entrèes opérateur et celles de "PAsSagE" sont issues d'une fonction.

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    C'est assez complexe tout ça et sans le code exact et un classeur en situation difficile d'analyser et de t'expliquer quoique ce soit.

    Pendant ce temps je te préparais des exemple pour te faire comprendre la notion de byref et byval que tu ignores peut-être.
    Byref modifie le tableau d'origine, et c'est la valeur par défaut !!!
    La seule exception est le passage de ranges qui eux sont protégés par un passage byval par défaut (d'où une différence de fonctionnement que tu constates parfois entre données passées en vba et données lues sur feuille).
    Les 2 premiers tests sont là-dessus.
    Le test 3 est l'appel d'une fonction qui passe un tableau à une autre fonction. Tu verras, pas de difficulté, tes soucis viennent sans doute (?) de ce qui précède.
    Enfin, tu verras si ça t'éclaire un peu plus sur ces fonctions personnalisées.
    Et un dernier test4 sur le passage d'un tableau typé au cas où mais bon, fait simple pour l'instant.
    eric
    Fichiers attachés Fichiers attachés

  17. #17
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    merci je regard ca

    Bon je viens d’appréhender mon problème.
    Il s'agit de ma volonté de faire une fonction qui marche à la fois pour Excel( le tableur) et pour d'autres fonctions. Et donc ce n'ai pas possible je suis obligé de faire une intervention entre les deux.
    donc je me suis débrouillé avec mes moyens mais je pense avoir fait un truc relativement propre. Je finalise ça et je vous transmet mon projet pour voir ce que vous en pensez.

    Merci d'avance

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Si tu passes tes paramètres des fonctions personnalisées en byval elles réagiront de la même façon en vba ou en lecture paramètres sur feuille.

  19. #19
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Par défaut
    Bonjour,

    Bon je tiens à vous remercier car grace à vos information et les pistes sur lesquels vous m'avez lancer j'ai pu faire ce que je désiré.
    Veuillez trouver ci-joint le fichier que j'ai réalisé grace à ça.


    TRUC SPIT REF G3.xlsm

    Encore merci et bonne journée

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

Discussions similaires

  1. [XL-2007] Problème de fonctions dans VBA excel & Access via ADO
    Par Djohn92 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2015, 19h35
  2. [XL-2003] Imbriquer des fonctions dans VBA
    Par ADbtr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/06/2010, 13h44
  3. [VBA-E]import de fonction dans vba
    Par vincent.tr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/12/2006, 23h05
  4. [VBA]Atteindre une fonction dans un xla
    Par boosty dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/01/2006, 14h13
  5. [VBA-E] Ajouter des fonctions dans Excel
    Par Clezio dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2004, 02h18

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