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 :

comment renvoyer plusieurs variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Par défaut comment renvoyer plusieurs variables
    bonjour,

    je ne sais pas si je suis dans la bonne rubrique mais tant pis!

    j'aimerais créé une fonction qui me renvois plusieurs variables.
    concretement je veux récuperer la valeur d'une cellule qui va contenir une chaine de caracteres.
    cette chaine j'aimerais la decouper un petit bout pour avoir plusieur chaine de caractere.

    example :
    chaine que je recupere :
    ABCKKI___05L__RECLTOP

    variables que j'aimerais retourner a la fin de ma fonction :
    var1="ABC"
    var2="KKI_"
    var3=__05L
    var4="__"
    var5="REC"
    var6="LTOP"

    et cette fonction, je l'appelerais dans d'autres fonctions qui seront elles appelées a partir d'une macro.

    help!

    si c'est pas clair : dites le moi

  2. #2
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Bonjour

    Regarde du cote Mid avec F1

    Elle devrait coller pour ce que tu souhaite faire

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Par défaut
    la fonction Mid decoupe bien ma chaine de caractere comme je veux.

    mais le probleme se situe finallement ailleur :

    cette chaine de depart je l'utilse dans un certain nombre de fonctions que j'ai créé moi meme. et dans chaque fonction je recommence le processus de decoupage de la chaine.

    ce que j'aimerais avoir c'est cree une fonction qui me permette de decouper ma chaine. appelons la Decoup_Chaine ().
    Les parametres que j'y rentrerais serait juste la chaine de caractere initiale : Decoup_Chaine(Ma_Chaine as string)
    mais il faudrait que je renvois plusieurs variables pour avoir toutes mes petites chaines decoupés.

    passer par une fonction indepandante me permet uniquement de ne pas avoir a modifier 36 000 fonctions quand le format de la chaine de départ est modifié (j'essai de faire un outil générique utilisable pour plusieurs projets differents qui n'aura jamais le meme format au niveau de cette chaine de caracteres)

    j'avais essayé de renvoyer un tableau de string : il se remplissait correctement mais qd j'appelais la fonction Decoup_Chaine, je n'avais rien dans le tableau...

    bref.. je sais plus quoi inventer...

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Salut,

    j'ignore si tu peux définir un nombre maximum de parametre de retour pour ta fonction. Si c'est plus ou moins le cas, j'essaierais ceci à ta place (mais je n'ai jamais testé).

    1) Définis un tableau en PUBLIC (global) pour retourner tes parametres avec un nom assurement unique !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PUBLIC Splitted_string(20) as string
    2) tu appelles ta procédure comme avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Decoup_Chaine(Ma_Chaine as string)
    3)Dans Decoup_Chaine tu effectues un REDIM de Splitted_String en fonction de tes besoins, ou tu mets un falg après le dernier élément significatif, du genre NULL.

    Tu alimentes Splitted_String(n) du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Splitted_String(0)="ABC"
    ...
    4) De retour dans ta procédure d'appel tu genre Splitted_String dans une boucle For limited par Ubound(Splitted_String ) ou dans une boucle while avec teste sur l'élément de Flag (NULL).

    Je pense que cela devrait le faire.

    Avantage : pas besoinde changer les parametres d'appel

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Par défaut
    bon : je suis pas douée au point de comprendre tous ce que tu as mis

    1) je pense que je l'ai fait
    2) je pense que c'est bon aussi
    3)je pense que je n'ai pas besoin de redimmensionner
    4)là je bloque.. si je comprend bien tu me propose de faire une boucle (for ou while) pour verifier que les elements de mon tableau ne sont pas nul. je vois pas trop comment sur le coup!

    voila ce que j'ai fait:
    fonction que j'appelle dans excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function ComputeLoss(sName As String, sSSI As String, sTemp As String, sPerfo As String) As Double
     
    Dim LNA As String, DOCON As String, CHAN As String
    Dim RXCOV As String, UPCON As String, Freq As String
    Dim Imux_FA As String, i As Integer, DC_OK As String, UC_OK As String
    Public SSI_tab(1 To 9) As String
     
    Decoup_SSI (sSSI)
    For i = 1 To 9
        SSI_tab(i) = SSI_def(i)
    Next i
    il me manque la partie ou je dis que le premier element du tableau correspond a telle variable, le deuxieme a telle autre et ainsi de suite.
    puis j'utilise les variables.

    fonction Decoup_SSI:
    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
     
    Public Function Decoup_SSI(sSSI As String) As String()
        Dim COVin As String, RX_LNA As String, DOCON As String
        Dim UPCON As String, MUX As String, SELECTIV As String
        Dim CHAN As String, TWT As String, COVout As String
        Public SSI_def(1 To 9) As String
        COVin = Left(sSSI, 4) 'couverture + polarite in
        RX_LNA = Right(Left(sSSI, 7), 3) 'RX_LNA
        DOCON = Right(Left(sSSI, 10), 3) 'Docon
        UPCON = Right(Left(sSSI, 13), 3) 'Upcon
        MUX = Right(Left(sSSI, 16), 3) 'Multiplexage
        CHAN = Right(Left(sSSI, 21), 4) 'Channel
        SELECTIV = Right(Left(sSSI, 17), 1) 'Selectivite
        TWT = Right(Left(sSSI, 25), 4) 'TWT
        COVout = Right(Left(sSSI, 29), 4) 'couverture + polarite out
        SSI_def(1) = COVin
        SSI_def(2) = RX_LNA
        SSI_def(3) = DOCON
        SSI_def(4) = UPCON
        SSI_def(5) = MUX
        SSI_def(6) = CHAN
        SSI_def(7) = SELECTIV
        SSI_def(8) = TWT
        SSI_def(9) = COVout
        Decoup_SSI = SSI_def
    End Function
    j'ai evidemment mis un option base 1 (sinon mon tableau commencerait a 0)
    et evidemment: ça ne fonctionne pas

    lors de la compilation ca plante au niveau de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public SSI_tab(1 To 9) As String
    j'ai pas du l'ecrire correctement en remplacant le public par un simple dim ca passe a la ligne suivante
    mais ca plante juste apres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 9
        SSI_tab(i) = SSI_def(i)
    Next i
    donc voila!
    je ne sais plus quoi faire...
    plus d'idee..
    en panne..

  6. #6
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public SSI_tab(1 To 9) As String
    devrait se situer en haut de ton module et non pas dans ta procédure, si je ne m'abuse

    et je croix que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public SSI_tab( 9) As String
    Serait mieux

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/04/2015, 13h56
  2. comment ajouter plusieurs variables dans un TextBox en VBA ?
    Par Kalem dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 14/05/2012, 16h47
  3. Comment gérer plusieurs variables ?
    Par Casio dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2011, 20h37
  4. Réponses: 3
    Dernier message: 18/08/2006, 12h05
  5. Réponses: 5
    Dernier message: 20/09/2005, 22h48

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