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 :

[vba excel] renvoyer valeur array


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut [vba excel] renvoyer valeur array
    Bonjour tout le monde
    je stocke une plage de cellule sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1 to 3
    tableaucomptes(i) = array(cel, cel.offset(0,1), cel.offset(0,2), cel.offset(0,3)) 
    next i
    jusque la tout va tres bien. je souhaiterai renvoyer la valeur d'une de ces cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    genre msgbox  tabcompte(2).array(3)
    evidement ce n'est pas ça qui marche, mais es ce possible?

    deuxieme question. si j'ai une liste de chiffre et un resultat et les operateur + et -
    puis je dire
    j'ai les chiffres 5.12.15 . 4.1.16 3. 20
    je connais le resultat 17
    et que le calcul me renvoie 5 + 12; 16 + 1; 20 -3, ça , je ne pense pas mais on peut rever. merci d'avance pour les tuyaux

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Regarde déjà , si ça peut te donner une idée


    Ch't'avais bien dit, starec, que ça servirait à quelqu'un

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    excuse moi ouskel, merci de m'avoir trouvé une réponse, mais je ne sais pas si c'est une question de fatigue ou de dépassement de capacité, mais je ne comprend rien, a la faq. je ne vois pas l'adaptation a mon probleme. je dois etre a bloc pour ce soir. un coup de pouce plus clair est le bienvenue, je trouverais pas tout seul

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testEableau()
    Dim cel As Range
    Set cel = Range("A1")
    For i = 1 To 3
    tableaucomptes = Array(cel, cel.Offset(0, 1), cel.Offset(0, 2), cel.Offset(0, 3))
    Next i
    For i = LBound(tableaucomptes, 1) To UBound(tableaucomptes, 1)
            MsgBox tableaucomptes(i)
    Next
    End Sub
    Si ça peut t'aider
    A+

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    ok, merci ouskel, c'est un peu plus clair, je regarderai demain, merci bien

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si ta plage est du style A1:H1 ou H1:Z15, tu peux récupérer les données ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TableauxDeCellules()
    Dim Montab As Variant, cmpt1 As Long, cmpt2 As Long
    Montab = Range("A1:H15").Value
    For cmpt1 = LBound(Montab, 1) To UBound(Montab, 1)
        For cmpt2 = LBound(Montab, 2) To UBound(Montab, 2)
            MsgBox Montab(cmpt1, cmpt2) 
        Next cmpt2
    Next cmpt1
    'Et en sens inverse
    Worksheets("Feuil1").Range("A1:H15").Value = Montab
    End Sub
    qui était l'exemple donnée dans l'adresse citée
    A toutes fins utiles
    A+

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    bon, je suis un peu plus en forme, merci d'avoir été patient. j'ai compris que ubound et lbound petit et grande et cmt1 et cmt2 represente les lignes et colonnes du tableau de variable. mais voila, a la maniere dont je fait mes tableau, je ne vois pas comment appliquer en effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1 to 3
    tableaucomptes(i) = array(cel, cel.offset(0,1), cel.offset(0,2), cel.offset(0,3)) 
    next i
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si tableaucompte(1) )  = array(cellule 1, cellule 2, cellule 3, cellule 4)
    si j'utilise ta methode, je pourrais renvoyerpour montableau(1) le array qui contien une plage de 4 cellules. mais comment renvoyerune seule cellule de cet array?
    si je veux renvoyer dans le tableau(2) la troisieme cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montableau(2) = array(celule10, cellule20,cellule30,callule40)
    je veux renvoyer la valeur de la cellule30. pas facile
    techniquement, je ne crois pas que excel accepte des tableaux a plusieurs dimensions, c'est une ruse que je recherche. mais bon, je ne sais pas si je me fais bien comprendre

  8. #8
    Expert confirmé

    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
    Par défaut
    bonjour

    as tu essayé cette syntaxe


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim TableauComptes As Variant
    Dim Cel As Range
     
    Set Cel = Range("A1")
    'Plage A1:D3
    TableauComptes = Range(Cel, Cel.Offset(3, 4))
     
    'cellule C2
    MsgBox TableauComptes(2, 3)


    bon week end
    michel

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    je viens d'essayer. la aussi,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox TableauComptes(2, 3)
    renvoie la case qui est en coordonée 2 et 3 d'un tableau existant, mais ce n'est pas un tableau de variable que je stocke, c'est une série de range.
    une entrée dans le tableau est une série de plusieurs valeur. si ce ne sont pas des cellules, cela pourait etre des valeurs
    disons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    valeur1 = 1, 2, 3, 4, 5
    valeur2 = 6,7,8,9,10
    valeur3 = 11,12,13,14,15
    montab = (valeur1,valeur2,valeur3)
    et si je veux sortir le 9, je fais
    msgbox   montab(2,4)
    mais voila, ça serais trop simple

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Eh non ! On peut pas... A la limite, on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Montab, valeur1, valeur2, valeur3
    valeur1 = Array(1, 2, 3, 4, 5)
    valeur2 = Array(6, 7, 8, 9, 10)
    valeur3 = Array(11, 12, 13, 14, 15)
    Montab = Array(valeur1, valeur2, valeur3)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Montab As Variant, valeur(3)
    valeur(1) = Array(1, 2, 3, 4, 5)
    valeur(2) = Array(6, 7, 8, 9, 10)
    valeur(3) = Array(11, 12, 13, 14, 15)
    Montab = Array(valeur(1), valeur(2), valeur(3))
    mais s'il existe une méthode pour sortir quelque chose de Montab je ne la connais pas
    Par contre, les n valeur ça on peut...
    Et donc, je ne t'apprends rien
    A+

  11. #11
    Expert confirmé

    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
    Par défaut
    bonjour

    renvoie la case qui est en coordonée 2 et 3 d'un tableau existant, mais ce n'est pas un tableau de variable que je stocke, c'est une série de range.
    une entrée dans le tableau est une série de plusieurs valeur. si ce ne sont pas des cellules, cela pourait etre des valeurs
    disons

    Code :
    valeur1 = 1, 2, 3, 4, 5
    valeur2 = 6,7,8,9,10
    valeur3 = 11,12,13,14,15
    montab = (valeur1,valeur2,valeur3)
    et si je veux sortir le 9, je fais
    msgbox montab(2,4)mais voila, ça serais trop simple

    je suis désolé mais je ne comprend pas ton message



    michel

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    ben merci les gars, je comprend mieux pourquoi j'y arrivais pas. ça doit pas etre possible tout simplement. la seule façon que j'ai trouvé c'est d'écrire ma serie de range dans un tableau, puis d'extraire ma valeur, par sa position dans ce nouveau tableau. j'essayais juste d'éviter cette étape intermediaire. merci encore, bonne journée tout le monde

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Voici une syntaxe qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To 3
      tableaucomptes(i) = Array(2, 5, 7, 9)
    Next i
    MsgBox tableaucomptes(2)(3)
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Merci Alain.

  15. #15
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut renvoyer valeur array
    Bonjour à tous
    Bonjour à vous 4

    J'ai suivi cette discussion avec un très grand intérêt, mais je n'ai pas vraiment compris la 1ère question de alsimbad, car dans ce cas là je prend généralement un tableau bidirectionnel (voir multi au besoin) tout simplement sauf si tu voulais aller au plus court !!!! quant à ta deuxième question, j'ai l'impression qu'elle est restée dans les oubliettes, ou alors je vais me coucher tout de suite

    En ce qui concerne la réponse de AlainTech, là c'est le désert dans mon petit cerveau, je ne vois pas comment utiliser ce code, si je pouvais avoir des explications elles seraient les bien venues,

    Merci d'avance

    A+

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Mais oui, Alain il est comme ça. Il arrive, il donne la bonne réponse que tout le monde attendait avec un exemple belge et il s'en va sans regarder en arrière.
    Je reprends un exemple donné par un autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Montab, valeur1, valeur2, valeur3
    valeur1 = Array(1, 2, 3, 4, 5)
    valeur2 = Array(6, 7, 8, 9, 10)
    valeur3 = Array(11, 12, 13, 14, 15)
    Montab = Array(valeur1, valeur2, valeur3)
    Msgbox Montab (2) (3)
    Et là, ton "petit cerveau" prend tout de suite une aut' gueule
    A+

    C'est comme si tu mettais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Montab = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
    msgbox Montab(13)
    ... mais c'est plus long

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    salut Alain
    effectivement, ton code fonctionne. je n'ai pas le loisir de m'y remettre tout de suite, vu que je suis sur une histoire de fonction, mais dès que possible, je reteste.

    pour la deuxieme partie de la question, c'était un peu la cerise sur le gateau, mais j'y croyais pas trop, et si c'est possibele, j'ai peur que ce soit un peu compliqué pour moi; mais merci a tout ceux qui se seront penché sur le sujet

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Edelweiss
    je prend généralement un tableau bidirectionnel (voir multi au besoin)
    Il va dans tous les sens alors...

    multi dimensions...

  19. #19
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    et comment fait on un tableau bidirectionel? ça m'interresserait de le savoir?

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour le déclarer à deux dimensions
    Dim LeTab(2,5),
    à trois diemensions
    LeTab2(3,5,2),
    A 4...
    LeTab3(4,5,2,7)
    et pour récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox LeTab(2,1) & " " & LeTab2(1,3,1) & " " & LeTab3(2,4,1,6)
    Te reste plus qu'à renseigner tes tableaux pour tester
    A+

    Pour les remplir, LeTab3 par exemple, tu renseignes LeTab3(0,0,0,0), puis LeTab3(0,0,0,1)... LeTab3(0,0,0,7)...
    puis
    LeTab3(0,0,1,1)... LeTab3(0,0,1,7)...
    puis
    LeTab3(0,0,2,1)... LeTab3(0,0,2,7)...
    etc

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [vba excel] Recherche valeur d'une textbox dans une feuille
    Par vanessaferraz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/08/2006, 10h55
  2. [VBA/Excel] Supprimer valeur de cellule
    Par amd64 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/07/2006, 12h41
  3. [VBA-Excel]Décale colonne tant que valeur cellule ....
    Par Angel79 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/02/2006, 17h56
  4. [VBA][Excel]Array en constante
    Par Pollux dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/02/2006, 12h46
  5. [VBA][Excel]Récupérer les valeurs du graphe...
    Par Samourai dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/01/2006, 10h51

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