XL 2010 Problème pour remplir un tableau

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai un tableau dynamique déclaré dans un module standard : Public ValComboPPA()

Lors de l'ouverture du classeur, je voudrais charger ce tableau avec des valeurs contenues dans des cellules nommées : "RememberValComboPPA1", "RememberValComboPPA2", "RememberValComboPPA3".
J'ai écrit ceci :
VB:
    For i = 1 To 3
        ValComboPPA(i) = Evaluate("RememberValComboPPA" & i)
        'ValComboPPA(i) = Range("RememberValComboPPA" & i)     'ne marche pas non plus
    Next
Ça plante.
Il semblerait que la fonction "Evaluate" n'accepterait pas de chaîne.
Comment alors s'yprendre ?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Si ce sont des noms d'étendue classeur et à supposer que ce sont des noms référençant des cellules uniques alors

VB:
ValComboPPA(i) = Range("RememberValComboPPA" & i)

aurait du le faire. Si cela ne le fait pas alors communiquez un fichier exemple

Cordialement
 

Dudu2

XLDnaute Barbatruc
Bonjour,

En effet, @Hasco a raison.

Mais sans doute que que l'erreur ne vient pas de la droite de l'affectation mais de la gauche.
Car peut-être faudrait-il dimensionner ValComboPPA() avant d'y affecter les valeurs.
VB:
Public ValComboPPA() As Variant

Sub a()
    ReDim ValComboPPA(1 To 3)

    For i = 1 To 3
        ValComboPPA(i) = Range("RememberValComboPPA" & i).Value
    Next
End Sub

Ensuite, selon que "RememberValComboPPA1", "RememberValComboPPA2", "RememberValComboPPA3" désignent des Ranges d'une cellule ou de plusieurs cellules, on trouvera dans ValComboPPA(i) une valeur (de la cellule) ou un tableau de valeurs (de la 1ère Area du Range).
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re,

C'est très curieux, si j'écris ceci :
VB:
    ValComboPPA(1) = Evaluate("RememberValComboPPA" & 1)
    ValComboPPA(2) = Evaluate("RememberValComboPPA" & 2)
    ValComboPPA(3) = Evaluate("RememberValComboPPA" & 3)
ça marche.
Code:
    For i = 1 To 3
        ValComboPPA(i) = Evaluate("RememberValComboPPA" & i)
    Next
ne marche pas...
Evaluate serait-il allergique aux boucles ?
 
C

Compte Supprimé 979

Guest
Re,

C'est très curieux, si j'écris ceci :
VB:
    ValComboPPA(1) = Evaluate("RememberValComboPPA" & 1)
    ValComboPPA(2) = Evaluate("RememberValComboPPA" & 2)
    ValComboPPA(3) = Evaluate("RememberValComboPPA" & 3)
ça marche.
Code:
    For i = 1 To 3
        ValComboPPA(i) = Evaluate("RememberValComboPPA" & i)
    Next
ne marche pas...
Evaluate serait-il allergique aux boucles ?
Bonjour Magic_Doctor

Pour ma part, je pense que oui 😜

Essaye donc ceci
VB:
For i = 1 To 3
  sTmp = Evaluate("RememberValComboPPA" & i)
  ValComboPPA(i) = sTmp
Next

Mais normalement la solution de Dudu2 que je salue doit fonctionner 🤔

@+
 

ChTi160

XLDnaute Barbatruc
Bonjour Magic_Doctor
Bonjour le Fil ,le Forum
j'ai fait ça !
VB:
Sub a()
    ReDim ValComboPPA(1 To 3)
 For i = 1 To 3
    ValComboPPA(i) = Evaluate(Range("RememberValComboPPA" & i).Value)
        MsgBox Range(ValComboPPA(i))(10)
    Next
End Sub
3 plages "A1:A14 nommée "RememberValComboPPA1" B1:B14 nommée "RememberValComboPPA2" etc etc
jean marie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Re,

C'est très curieux, si j'écris ceci :
VB:
    ValComboPPA(1) = Evaluate("RememberValComboPPA" & 1)
    ValComboPPA(2) = Evaluate("RememberValComboPPA" & 2)
    ValComboPPA(3) = Evaluate("RememberValComboPPA" & 3)
ça marche.
Code:
    For i = 1 To 3
        ValComboPPA(i) = Evaluate("RememberValComboPPA" & i)
    Next
ne marche pas...
Evaluate serait-il allergique aux boucles ?
je ne comprends pas bien le besoins d'utiliser evaluate ici mais bon
il faudrait surtout voir comment a été dimensionné ton tableau de tableau (base 1 ou 0)
dim ValComboPPa(1 to 3)
For i = 1 To 3
ValComboPPA(i) = Evaluate("RememberValComboPPA" & i)
Next
'message avec 1er item de chaque tableau
msgbox ValComboPPa(1)(1)
msgbox ValComboPPa(2)(1)
msgbox ValComboPPa(3)(1)
---------------------
mille excuses @ChTi160 on c'est croisé ;)
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour Bruno M45,

Malheureusement, ça ne marche pas.
Les cellules "RememberValComboPPA" sont en fait des cellules "virtuelles". On ne peut pas y accéder au moyen de Range, il faut utiliser, je pense, Evaluate.
Ces cellules récupèrent les ListeIndexs de ComboBoxs (qui ne contiennent que 2 items) de la manière suivante :
VB:
Sub GestionComboPPA(obj As Object)  '(module de classe "Classe_ComboPPA")
'Gère l'action de chaque ComboBox dont le préfixe est "ComboPPA"
'Magic_Doctor

Dim x, o As Object

    Application.ScreenUpdating = False
    x = ExtractNumber(obj.Name)                            'suffixe du ComboBox
    Set o = ActiveSheet.OLEObjects("ComboPPA" & x).Object  'ComboBox
    If o.ListIndex = 0 Then                                '1er item
        ValComboPPA(x) = o.ListIndex                       'mémorise le ListIndex
    ElseIf o.ListIndex = 1 Then                            '2ème item
        ValComboPPA(x) = o.ListIndex                       'mémorise le ListIndex
    End If
'    Mémorise la valeur de la variable (Public) "ValComboPPA(x)" (pour ne pas avoir à la conserver sur la feuille)
    ActiveWorkbook.Names.Add Name:="RememberValComboPPA" & x, RefersTo:=ValComboPPA(x), Visible:=False
    Application.ScreenUpdating = True
End Sub

VB:
ActiveWorkbook.Names.Add Name:="RememberValComboPPA" & x, RefersTo:=ValComboPPA(x), Visible:=False
est une astuce que m'avait communiqué job75, permettant de ne pas avoir à mettre "physiquement" sur la feuille les ListIndex.
 
Dernière édition:

Discussions similaires