À l'ouverture du classeur, un Array se créé à partir d'éléments gardés en mémoire sur une plage de cellules de la feuille, avant la dernière fermeture dudit classeur.
Pour récupérer ces données, j'écris ceci, et ça marche :
"Liste_ComboChx" étant la plage de cellules où sont mémorisées les données.
Bon, maintenant supposons qu'il y ait 50 items dans cet Array... Donc j'ai tenté audacieusement une boucle qui a lamentablement échoué. ¡Caramba! Où me suis-je encore bien planté ?
Code:
For Each c In [Liste_ComboChx] '"Liste_ComboChx" est la plage nommée qui reçoit tous les items de la ComboBox "ComboChx"
listeoptions(i) = c.Value
Next
re
bonjour
array , tableau ,1 dim , 2 dim , je sais plus moi
'si le range est vertical
VB:
Sub range_vertical_to_array_1dim()
listeoptions = Application.Transpose([Liste_ComboChx].Value)
MsgBox listeoptions(1)
End Sub
-------------------------------------------------------------------------------- 'si le range est horizontal
'version1 pour faineant de la calbasse
VB:
Sub range_horizontal_to_array_1dim()
listeoptions = Application.Transpose(Application.Transpose([Liste_ComboChx2].Value))
MsgBox listeoptions(1)
End Sub
'version2
VB:
Sub xrange_horizontal_to_array_1dim()
listeoptions = Application.Index([Liste_ComboChx2].Value, 1, 0)
MsgBox listeoptions(1)
End Sub
Essayez cette PJ, elle marche très bien avec cette macro :
Code:
Sub Lecture()
Dim i As Integer, listeoptions
[A3] = Int(100 * Rnd()) ' init tableau
' Transfert tableau dans array
listeoptions = [Liste_ComboChx]
' Ecriture array dans cellules Col D
For i = 1 To UBound(listeoptions)
Cells(i + 2, 4) = listeoptions(i, 1)
Next i
End Sub
Le transfert listeoptions = [Liste_ComboChx] marche correctement.
[Edit] Dans votre macro :
VB:
Sub Essai()
Dim listeoptions As Variant
listeoptions = [Liste_ComboChx]
[B16] = listeoptions(0)
End Sub
Il y a deux erreurs.
Comme dit au post #2 le tranfert cellules array est fait dans un array de dimension 2.
Qui plus est, l'indice le plus bas est 1 et non 0;
Code:
Sub Essai()
listeoptions = [Liste_ComboChx]
[B16] = listeoptions(1,1)
End Sub
Merci pour vos réponses.
Et bien les solutions de patricktoulon et job75 marchent. Où était donc le problème ? Tout simplement pour une histoire d'Option Base. J'étais en "0" et je devais être en "1".
Explication :
VB:
Option Explicit
Option Base 1
.............................................................................
Private Sub Workbook_Open()
Dim i As Byte, listeoptions As Variant, dico As Object
Set dico = CreateObject("Scripting.Dictionary")
'Dresse la liste de tous les items mémorisés de la ComboBox "ComboChx" avant la dernière fermeture du classeur
listeoptions = Application.Transpose([Liste_ComboChx].Value)
'For i = 0 To UBound(listeoptions) 'rempli le dictionnaire ("dico") avec les éléments de la matrice "listeoptions" (Option Base 0)
For i = 1 To UBound(listeoptions) 'rempli le dictionnaire ("dico") avec les éléments de la matrice "listeoptions" (Option Base 1)
dico(listeoptions(i)) = ""
Next
Sheets("Hoja1").ComboChx.List = dico.keys 'dresse la liste de la ComboBox "ComboChx" à partir du dictionnaire
Sheets("Hoja1").ComboChx.ListIndex = 0 'sélection par défaut du 1er item de la liste de la ComboBox "ComboChx"
End Sub
Donc, redoubler d'attention avec ces histoires d'Option Base.