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 :

Range non contigue pour un Arguments Fonction VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingenieur ingénierie automobile
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur ingénierie automobile

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut Range non contigue pour un Arguments Fonction VBA
    Bonjour,
    tout d'abord merci a Developpez.com et ses contributeurs qui mon grandement aidé en regle general, sans que je n'ai besoin de poser de question.

    Je me trouve aujourd'hui bloqué pour la création d'une fonction personnalisée a utiliser dans une feuille de calcul.
    la fonction exemple ci-dessous fonctionne tres bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Test(X As Range, Y As Range)
     
    Test = Application.WorksheetFunction.Sum(X, Y)
     
    End Function
    mon probleme :
    lorsque les cellule sont contigue, et que j'ai bien un range tout ce passe bien.
    comment faire pour utiliser des cellules non contigues, sachant que X et Y doivent etre deux serie differentes d'un meme nombre de valeurs.

    si vous avez quelques lumiere pour savoir ce qu'il faudrait definir en argument (autre chose qu'un Range?)
    merci d'avance

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Une idée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Function Test3(X As Range, Y As Range, Z As Range) As Integer
     
    Dim plage
     
    Test3 = 0
     
    For Each plage In Array(X, Y, Z)
            Test3 = Test3 + Application.WorksheetFunction.Sum(plage)
    Next plage
     
    End Function

  3. #3
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Euh chez moi ta fonction marche bien...
    Même si les valeurs ne sont pas contigues :
    X = Test(Range("B67"), Range("B71"))
    =Test(B66;B72)
    X = Test(Range("B67:B69"), Range("D83:E86"))
    etc

  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
    Bonjour,

    pour commencer, sauf erreur de compréhension .... ta fonction perso fait simplement un SOMME(Plage1,Plage2) non ?

    pour le fun maintenant.
    ParamArray te permet d'envoyer autant d'arguments que tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Test(ParamArray MesPlage() As Variant)
        For i = LBound(MesPlage) To UBound(MesPlage)
            Test = Test + Application.Sum(MesPlage(i))
        Next i
    End Function
    Du coup, tu peux inclure autant de plages dans ta formule
    =Test(A1:A3;A5;A8)
    fera la somme de toutes les cellules indiquées... comme le ferait la fonction SOMME()


    Et si tu fais =Test() tu obtiens 0 car y'a aucune plage à additionner
    (idem, si ce sont pas des chiffres, ça ne plante pas)


    Alors, qu'ai-je loupé dans ton descriptif ?


    PS :
    Al__22, je pense que ton test n'est pas conforme à son besoin, si je comprend ce qu'il veut (j'en doute encore...)
    Certes, tu additionnes deux plages non contiguës, mais les cellules de chacune de tes deux plages sont toutes contiguës. Lui, si j'ai bien compris, il veut pouvoir envoyer une plage avec des cellules éparpillées

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingenieur ingénierie automobile
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur ingénierie automobile

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut
    Merci a tous pour les réponses.

    Citation Envoyé par joe.levrai Voir le message
    pour commencer, sauf erreur de compréhension .... ta fonction perso fait simplement un SOMME(Plage1,Plage2) non ?
    En effet c'est juste une somme, d'ou l'utilisation de "fonction exemple". Ma vrai fonction est beaucoup plus compliquée (enfin tout est relatif)
    mais du coup je pense que j'ai trop simplifié pour l'exemple.
    la fonction utilisée dans une feuille de calcul, utilise des valeurs X et des valeurs Y, je manipule ces valeurs, puis je ressort une valeurs Z imaginons plutôt ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function Test(X As Range, Y As Range)
    Dim Sx as double
    Dim Sy as double
     
    Sx = Application.WorksheetFunction.Sum(X)
    Sy = Application.WorksheetFunction.Slope(X,Y)
     
    Test = Sx * Sy
     
    End Function
    Donc j'ai uniquement 2 range en entrée et ne cherche pas a en avoir une infinité.
    Je souhaiterais néanmoins pouvoir sélectionner des cellules non contiguee pour mon range de X et mon Range de Y
    une sorte de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    X=Union(Range("A1"),Range("A3"))
    mais comme c'est une fonction utilisée a partir d'une feuille de calcul (et pas dans une code VBA pur) je ne sais pas comment définir le fait que ces cellule ne sont pas contiguë.

    je ne sais pas si c'est plus clair.
    je ne sais même pas si c'est possible d'ailleurs. De mémoire, toutes les fonctions qui acceptent les cellules non contiguë ne prennent qu'un range ou "somme" de range en entrée.

    Je regarde le ParamArray demain à la première heure, ça me semble une solution possible en récupérant le nombre de plages, le divisant par 2 (il y a toujours autant de plage X que de plages Y) et en unifiant chaque partie.

    Merci encore

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingenieur ingénierie automobile
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur ingénierie automobile

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut
    Probleme identique ici.
    je vais essayer leurs solution aussi

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

Discussions similaires

  1. Copier un range dans un range non contigu
    Par tamtam64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2015, 12h20
  2. Réponses: 2
    Dernier message: 11/05/2009, 15h25
  3. attribuer a une variable a un objet range non contigue
    Par patbou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/03/2008, 20h01
  4. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  5. Pb de lien entre Access et Excel pour des fonctions VBA
    Par favien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2005, 01h00

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