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 :

Variable tableau constante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Variable tableau constante
    Bonjour à toutes et à tous,

    Je cherche avec beaucoup de ferveur un moyen de disposer en tout point de mon code de chaînes de caractères composés de deux blocs, l’un étant au nombre de 6, l’autre au nombre de 20, soit combinés 120 chaînes. L’idéal serait de pouvoir appeler ces chaînes au moyen de deux numéros d’index, comme dans une variable tableau à deux dimensions, mais sans avoir à attribuer toujours les mêmes valeurs dans chaque procédure. D’où le nom de la discussion.

    Sauf que je ne pense pas que ce genre d’écriture soit possible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Const TblChaîne(1,1) as String = ”00AA”
    Public Const TblChaîne(2,1) as String = ”01AA”
    Public Const TblChaîne(1,2) as String = ”00BB”
    etc.
    J’ai cherché du côté des énumérations, mais ça ne convient pas.

    Est-ce que vous auriez d’autres pistes? Type utilisateur? Module de classe?

    Merci d’avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Pas sûr de bien comprendre mais peut être avec des constantes matricielles ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Test()
     
        Dim T
     
        'constantes matricielles
        T = [{"00AA","01AA","00BB";1,2,3}]
     
        'T(Numéro ordinal de la Matrice, numéro ordinal de l'élément de la matrice) en base 1
        MsgBox T(1, 2) '01AA
        MsgBox T(2, 2) '2
     
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Public dicReg as object
    Property Get TblChaîne(L As Integer,C as integer) As Variant
    If TypeName(dicReg) = "Nothing" Then 
        Set dicReg = CreateObject("Scripting.Dictionary")
        initialisation
    End if
    TblChaîne = dicReg(L & "_" & C)
    End Property
    Property Let TblChaîne(L As Integer,C as integer, Value As Variant)
    If TypeName(dicReg) = "Nothing" Then
         Set dicReg = CreateObject("Scripting.Dictionary")
         initialisation
    End if
    dicReg(L & "_" & C) = Value
    End Property
    Sub initialisation()
     TblChaîne(1,1) = "00AA"
     TblChaîne(2,1) = "01AA"
     TblChaîne(1,2) = "00BB"
     
    End sub
    Sub test()
    Msgbox TblChaîne(1,1)
    End sub
    Dernière modification par Invité ; 29/08/2018 à 08h34.

  4. #4
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Merci pour vos réponses.

    Citation Envoyé par Theze Voir le message
    Pas sûr de bien comprendre mais peut être avec des constantes matricielles ?
    C’est l’esprit en effet. Mais j’ai bien l’impression qu’il faudrait alors appeler cette procédure à chaque fois que nécessaire, juste? Quelle est la différence avec une variable tableau?

    @dysorthographie
    Merci pour l’écriture du code. Doit-il être placé dans un module de classe ou dans un module standard?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Mais j’ai bien l’impression qu’il faudrait alors appeler cette procédure à chaque fois que nécessaire, juste?
    non, tu déclare la variable en tête de module, tu initialises et ensuite tu peux utiliser n'importe où :
    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
     
    Public T 'en tête d'un module standard de cette façon, la portée générale et la durée de vie celle du classeur tant qu'il est ouvert
     
    Sub Ini() 'à exécuter avant tout appel
     
        'constantes matricielles
        T = [{"00AA","01AA","00BB";1,2,3}]
     
    End Sub
     
    Sub AppelValeur()
     
        MsgBox T(1, 2) '01AA
        MsgBox T(2, 2) '2
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    j'ai modifié mon poste! tu le mets dans un module sandard et tu l’utilises comme si c’était un tableau constance.
    Code module standard Sub test : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    MsgBox TblChaîne(1, 1)
    End Sub
    Code module standard Property TblChaîne : 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
    Public dicReg As Object
    Property Get TblChaîne(L As Integer, C As Integer) As Variant
    If TypeName(dicReg) = "Nothing" Then
        Set dicReg = CreateObject("Scripting.Dictionary")
        initialisation
    End If
    TblChaîne = dicReg(L & "_" & C)
    End Property
    Property Let TblChaîne(L As Integer, C As Integer, Value As Variant)
    If TypeName(dicReg) = "Nothing" Then
         Set dicReg = CreateObject("Scripting.Dictionary")
         initialisation
    End If
    dicReg(L & "_" & C) = Value
    End Property
    Sub initialisation()
     TblChaîne(1, 1) = "00AA"
     TblChaîne(2, 1) = "01AA"
     TblChaîne(1, 2) = "00BB"
     
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Faute d’avoir pu encore testé ces éléments, je vous dis merci, car ils font sens pour moi.

    @Theze
    En revanche, j’ai l’impression que la constante n’a qu’une dimension. J’aurais besoin de deux dimensions pour assembler deux blocs de chaîne.

    @dysorthographie
    Ça m’a l’air super!
    Par curiosité, y a-t-il une logique ou une bonne pratique derrière l’appellation de la variable [i]dicReg[/]?

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    En revanche, j’ai l’impression que la constante n’a qu’une dimension. J’aurais besoin de deux dimensions pour assembler deux blocs de chaîne.
    non, le tableau a bien deux dimensions, tableau à une dimension --> T(2), tableau à deux dimensions --> T(1, 2), tableau à trois dimensions --> T(1, 2, 3)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Dédé6621 Voir le message
    @dysorthographie
    Ça m’a l’air super!
    Par curiosité, y a-t-il une logique ou une bonne pratique derrière l’appellation de la variable [i]dicReg[/]?
    Bonjour,
    TblChaîne = dicReg( "1_2")

    TblChaîne est une propriété (une variable logiciel ) on peut y écrire (Let) ou la lire (Get).

    TblChaîne(1, 1) = "00AA"
    var=TblChaîne(1, 1)

    dicReg est une collection (une sorte de variable tableau ou tous les éléments peuvent être nommés).

    dicReg("1_1") = "00AA" {dicReg(nom)=valeur}

    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
    Public dicReg As Object
    Sub test()
    MsgBox TblChaîne(10, 1)
    Dim k, i As Integer
    k = dicReg.Keys
    For i = 0 To dicReg.Count - 1
        Debug.Print k(i), dicReg(k(i))
    Next
    End Sub
     
     
    Property Get TblChaîne(L As Integer, C As Integer) As Variant
    If TypeName(dicReg) = "Nothing" Then
        Set dicReg = CreateObject("Scripting.Dictionary")
        initialisation
    End If
    TblChaîne = dicReg(L & "_" & C)
    End Property
    Property Let TblChaîne(L As Integer, C As Integer, Value As Variant)
    If TypeName(dicReg) = "Nothing" Then
         Set dicReg = CreateObject("Scripting.Dictionary")
         initialisation
    End If
    dicReg(L & "_" & C) = Value
    End Property
    Sub initialisation()
    Dim L As Integer, C As Integer
    For L = 1 To 20
        For C = 0 To 5
            TblChaîne(L, C + 1) = Format(L, "00") & AA(C)
        Next
    Next
    End Sub
    Function AA(i As Integer) As String
    AA = Chr(65 + i) & Chr(65 + i)
    End Function
    Nom : Sans titre.png
Affichages : 503
Taille : 5,0 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub initialisation()
    Dim L As Integer, C As Integer
    For L = 1 To 20
        For C = 0 To 5
            TblChaîne(L, C + 1) = Format(L, "00") & AA(C)
        Next
    Next
    End Sub
    Function AA(i As Integer) As String
    AA = Chr(65 + i) & Chr(65 + i)
    End Function
    Dernière modification par Invité ; 30/08/2018 à 14h47.

Discussions similaires

  1. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  2. variables tableau dans requettes mysql ... et affichage
    Par mulbek dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/10/2005, 16h29
  3. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  4. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55
  5. [CR9] variables deviennent constantes
    Par Eowyn dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 27/09/2004, 09h56

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