Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Problème pour remplir un Array

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

À 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 :
VB:
    listeoptions = Array([Liste_ComboChx].Cells(1, 1).Value, [Liste_ComboChx].Cells(2, 1).Value, [Liste_ComboChx].Cells(3, 1).Value, [Liste_ComboChx].Cells(4, 1).Value, [Liste_ComboChx].Cells(5, 1).Value)
"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
Code:
 
Bonjour Magic_Doctor,
Faites simplement :
VB:
listeoptions = [Liste_ComboChx]
Attention cependant pour la lecture de l'array, il est de dimension 2.
Donc pour lire l'élément 3 il faut faire valeur=listeoptions(3,1)
 
Bonsoir Sylvanu.

Je viens d'essayer, ça ne marche pas du tout.
Du reste quand je veux tester par curiosité :
VB:
Code:
Sub Essai()

Dim listeoptions As Variant

     listeoptions = [Liste_ComboChx]

     [B16] = listeoptions(0)

End Sub
ça plante...
 
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

😉
 
Bonjour à tous,

Ceci fonctionne quelle que soit la plage, vecteur vertical ou horizontal :
VB:
Dim r As Range, listeoptions(), i&
Set r = [Liste_ComboChx]
ReDim listeoptions(1 To r.Count)
For i = 1 To r.Count
    listeoptions(i) = r(i)
Next
A+
 
Bonjour Magic_Doctor, Patrick, Job,

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
 

Pièces jointes

Dernière édition:
Bonsoir,

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.

Encore merci à tous les deux.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…