Utiliser un élément d’un Array comme variable

Bonjour à tous,

Comment peut utiliser les éléments d’un Array pour un traitement de variables :

Sub test()
    Dim Itm
    Dim i As Long
    Ls = 2: P = 1
    For Each Itm In Array(L, Ls, Lr, Ln, Lsn, Lrn, P)
    Debug.Print Itm
        If Itm > 0 Then
            For i = 1 To Itm
                'Code
            Next i
        End If

    Next Itm
End Sub

Merci d'avance.

Salut,

Selon moi c'est difficile de t'aider si on ne sait pas ce que tu désires réaliser. On peut voir un bout de fichier et deux mots d'explication sur ton but final ?

Cordialement.

Bonjour,

c'est souvent plus pratique d'utiliser les indices (qui commencent à 0) :

Sub test()
    Dim Itm, i As Long
    Itm = Array(2, 4, 6, 8)
    For i = 0 To UBound(Itm)
        Debug.Print Itm(i)
    Next i
End Sub

Tu sais où tu en es.

Sinon pour reprendre ta forme :

    Dim Itm
    For Each Itm In Array(2, 4, 6, 8)
        Debug.Print Itm
    Next Itm

mais tu ne sais pas si tu es le 2ème, le 4ème, ...

eric

Bonsoir Yvouille, eric,

Le code ci-dessus me permettra de tester si une variable parmi un tableau Array() existe et si elle a une valeur supérieure à 0.

Si contraire, on ignore la variable.

Les éléments de Array() sont des lettres et non pas des chiffres

Bonjour,

Tu ne peux pas adresser de façon indirecte une variable par son nom.

Il faudrait que tu mettes les valeurs dans un tableau, et que tu te crées un dictionary pour avoir l'indice à partir de la chaine.

Vu ton niveau de maitrise d'un simple tableau ça serait bien compliqué, au détriment très net de la clarté du code.

30 case ce n'est pas la mer à boire, tu aurais déjà fini.

eric

Bonjour,

Je crois que les dictionnaires font mieux que les tableaux puisqu’ils associent clés et valeurs.

J'ai donc essayé ce code, mais j'ai encore des soucis au-dessus :

Sub Test()
    Dim C As Range, Cel As Range
    Dim i As Long
    Dim Mondico As Object

    '-- Alimentation du dictionnaire
    Set Mondico = CreateObject("Scripting.Dictionary")
    For Each C In Range([N2], [N65000].End(xlUp))
        If Not Mondico.exists(C.Value) Then Mondico.Add C.Value, ""    'c.Value
    Next C

    '-- Calcul des occurences pour chaque systeme correspondant
    '-- a une clé dans le dictionnaire

    '-- Parcourir les systemes présents
    For Each Cel In Range("B5:B10")
        If Cel <> "" Then
            Debug.Print "Cel =  " & Cel
            ' ICI il n'y a pas d'incrémentation mais toujours égal à 1
            Mondico.Item(Cel) = Mondico.Item(Cel) + 1
            Debug.Print "=" & Mondico(Cel)
        End If
    Next

    '-- Vérification de tout les éléments du dictionnaire
    For Each Key In Mondico.Keys
    ' L'affichage en bas est égal ) vide pour tout les éléments
    ' Aprés, il y a affichage seulement des valeurs supérieure à zéro
        Debug.Print "Key: " & Key, "Value: " & Mondico.Item(Key)
    Next

    '-- Vérification des éléments du dictionnaire
    '-- qui ont une valeur supérieure à zéro
    For Each Key In Mondico.Keys
    ' Ca ne fonctionne pas !!!
        If Key.Value > 0 Then
            Debug.Print Key & " , " & Mondico.Item(Key)
        End If
    Next

    Set Mondico = Nothing
End Sub

Bonjour,

Oui c'est vrai, tant quà faire autant utiliser un dictionary seul.

...
    '-- Alimentation du dictionnaire
    Set Mondico = CreateObject("Scripting.Dictionary")
    For Each C In Range([N2], [N65000].End(xlUp))
        If Not Mondico.exists(C.Value) Then Mondico.Add C.Value, 0    'c.Value
    Next C

    '-- Calcul des occurences pour chaque systeme correspondant
    '-- a une clé dans le dictionnaire

    '-- Parcourir les systemes présents
    For Each Cel In Range("B5:B10")
        If Cel <> "" Then
            Debug.Print "Cel =  " & Cel
            ' ICI il n'y a pas d'incrémentation mais toujours égal à 1
            Mondico(Cel.Value) = Mondico(Cel.Value) + 1
            Debug.Print "=" & Mondico(Cel)
        End If
    Next
...
    '-- Vérification des éléments du dictionnaire
    '-- qui ont une valeur supérieure à zéro
    For Each Key In Mondico.Keys
        If Mondico(Key) > 0 Then
            Debug.Print Key & " , " & Mondico(Key)
        End If
    Next
...

eric

Bonsoir,

Il parait bien fonctionner, merci.

Je vais faire des testes.

Rechercher des sujets similaires à "utiliser element array comme variable"