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

VBA Discussion :

PB de syntaxe Tableaux en VBA


Sujet :

VBA

  1. #1
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 590
    Par défaut PB de syntaxe Tableaux en VBA
    Je voudrais déclarer un tableau de couples de chaines de caractère et un autre de couples de nombres,

    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
     
    Dim customerData = {{"id_nom", "NOM"},
                        {"id_prenom", "PRENOM"},
                        {"id_toto", "TOTO"}}
    Ca ne foncttionne pas, any idea ??



  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Bonjour,

    en VBA, il faudra utiliser les parenthèses plutôt que les accolades.

    D'autre part, pour les tableaux, tu peux passer par le mot clé Array.

    UN peu de lecture
    https://didier-gonard.developpez.com...s-tableau-vba/

    la déclaration et l'affectation se font sur deux instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim numbers As Variant
    numbers = Array(Array(1, 2), Array(3, 4), Array(5, 6))
    Mais bien sûr ce ne sont là que des idées, car nous ne savons pas exactement quelle sera leur utilisation ultérieure.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    9 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 9 044
    Par défaut
    bonsoir,
    les accolades {} ne sont pas des séparateurs de valeurs pour les tableaux en VBA mais plus probablement en VB.
    Pas si simple qu'on le croit d'alimenter un tableau à 2 dimensions à partir d'une chaine de caractères. Personnellement je n''utilise jamais les 2 dimensions...
    Une solution possible avec le code trouvé sur ce site et un peu retravaillé, devrait te tirer d'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub tablo2Dim()
    Dim customerdata As String
    Dim tabloCust2d As Variant
     
    customerdata = "(id_nom, NOM),(id_prenom, PRENOM),(id_toto, TOTO)"
     
    tabloCust2d = EvaluateString(customerdata)
    Debug.Print "impression des premières valeurs du tableau: dim1= " & tabloCust2d(0, 1) & " / dim2= " & tabloCust2d(0, 2)
    End Sub
    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
    Function EvaluateString(txtstring As Variant) As Variant
    Dim i As Integer, L As Integer
    Dim txtArray As Variant, txtArray2d As Variant
     
    txtArray = Split(txtstring, "),(")
     
    If IsEmpty(txtArray) Then L = 0 Else L = UBound(txtArray)
     
    'remove leading "(" and last ")"
    txtArray(0) = Replace(txtArray(0), "(", "")
    txtArray(L) = Replace(txtArray(L), ")", "")
     
    ReDim txtArray2d(0 To L, 1 To 2)
     
    For i = 0 To L
       txtArray2d(i, 1) = Split(txtArray(i), ",")(0)
       txtArray2d(i, 2) = Trim(Split(txtArray(i), ",")(1))
    Next i
    EvaluateString = txtArray2d
    End Function

  4. #4
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 590
    Par défaut
    Jean-Philippe,
    Ca marche nikel aves des () ,
    Mais si j'ai une liste de 50 Array ds mon Array, peut on faire des sauts de ligne genre ci dessous pour améliore le lisibilité , j'ai essayé mais ça ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim data_to_checkAs Variant
    data_to_check= Array(Array(1, 2), 
                           Array(3, 4), 
                           Array(5, 6))

  5. #5
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    9 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 9 044
    Par défaut
    bonsoir Jean-Philippe,
    la déclaration et l'affectation se font sur deux instructions
    en effet pourquoi faire compliqué... tu sembles plus à l'aise que moi dans la manipulation des tableaux
    Mais bien sûr ce ne sont là que des idées, car nous ne savons pas exactement quelle sera leur utilisation ultérieure
    peut-être est-ce suite à cette discussion ?
    mais il y a probablement une solution plus simple

  6. #6
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    9 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 9 044
    Par défaut
    Citation Envoyé par bartimeus35 Voir le message
    Ca marche nikel aves des () , mais si j'ai une liste de 50 Array ds mon array, peut on faire des sauts de ligne genre ci dessous pour améliore le lisibilité ? ça ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim data_to_checkAs Variant
    data_to_check= Array(Array(1, 2), 
                           Array(3, 4), 
                           Array(5, 6))
    il faut mettre un underscore (souligné: _) c'est le caractère de continuation d'une instruction VBA à la fin de chaque ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim data_to_check As Variant
    data_to_check = Array(Array(1, 2), _
                           Array(3, 4), _
                           Array(5, 6))

  7. #7
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 590
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    il faut mettre un underscore (souligné: _) c'est le caractère de continuation d'une instruction VBA à la fin de chaque ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim data_to_check As Variant
    data_to_check = Array(Array(1, 2), _
                           Array(3, 4), _
                           Array(5, 6))


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

Discussions similaires

  1. Les tableaux sous VBA access
    Par comewithme dans le forum IHM
    Réponses: 8
    Dernier message: 04/04/2014, 23h57
  2. [XL-2007] comparer deux tableaux avec VBA
    Par anstech dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2014, 14h36
  3. Générer & Remplir des tableaux en VBA
    Par eurlzoo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/11/2013, 21h17
  4. [Debutant] Tableaux en VBA
    Par hugo69 dans le forum Access
    Réponses: 3
    Dernier message: 19/01/2007, 20h30

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