Tableau multidimensionnel dans une liste

Résolu/Fermé
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - Modifié par HugoHerbomez le 20/02/2017 à 10:00
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 20 févr. 2017 à 17:05
Bonjour,

J'ai un tableau multidimensionnel, de type "String", que j'aimerai mettre dans deux listes. Je m'explique, je voudrais mettre dans la première liste toutes les valeurs appartenant à "MyList()", et dans l'autre liste certaines valeurs de "MyList()()". je voudrais donc savoir comment faire appel à toutes les valeurs de MyList(), et ce juste en paramètre de "Formula1:=Join(MyList, ",")". (Un peu brouillon l'explication ^^)

Voici le code :

Dim ws As Worksheet
Dim i As Integer, j As Integer
ReDim Preserve MyList(1 To maxNbMachine, 1 To maxNbSousMachine)
i = 1
j = 1
'Parcourt de toutes les feuilles du classeur
For Each ws In Worksheets
    If ws.Name <> "Interventions Machine" And ws.Name <> "Impression Temporaire" Then
        If i <> 1 Then
            If MyList(i) <> Mid(ws.Name, 1, (InStr(ws.Name, "-")) - 2) Then
                i = i + 1
                j = 1
            End If
        End If
        MyList(i, j) = Mid(ws.Name, 1, (InStr(ws.Name, "-")) - 2) & Mid(ws.Name, (InStr(ws.Name, "-")) + 1)
    End If
Next

With Range("C11").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(MyList, ",") *** !!! Erreur ICIIIIIIIIIIII !!! ***
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = "Information"
    .ErrorTitle = ""
    .InputMessage = "Cliquez sur la flèche à droite afin de sélectionner la dénomination de la machine."
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With


On peut voir que ma liste est chargée au dessus, mon problème étant que "Formula1:=Join(MyList, ",")" n'est pas reconnut. Mon message d'erreur étant "Argument ou appel de procédure incorrecte".

J'ai déjà fait la même démarche avec un tableau de type "String", mais à une dimension. Aucun problème de ce côté là.

Un peu d'aide serait donc le bienvenu,
merci !


Bien cordialement,
Hugo
A voir également:

1 réponse

HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
20 févr. 2017 à 15:46
up
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
20 févr. 2017 à 16:11
Bonjour Hugo, bonjour le forum,

J'ai planché sur ton cas mais je m'y suis cassé les dents. Je pensais que :
Join(Application.Index(MyList, ,1),",")
ou Application.Index(MyList, ,1) renvoie les données de la première colonne du tableau MyList ferait l'affaire mais ça plante aussi.
Je ne vois qu'une boucle du type :
Dim L As String

For I = 0 To UBound(Mylist, 1)
    L = IIf(L = "", Mylist(I, 1), Mylist(I, 1) & "," & L)
Next I
 
 With Range("C11").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=L
    '...
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
20 févr. 2017 à 16:32
J'ai planché sur ton cas mais je m'y suis cassé les dents J'ai bien ri haha

C'est pas beau un "I" majuscule! j'ai toujours fait avec des "i". vade retro satana

En tout cas c'est un élément de réponse qui fonctionne très bien, je vais devoir alourdir mon programme.... merci !
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017
20 févr. 2017 à 16:47
Re,

C'est suite à un (bon) conseil qui m'a été donné, que je mets toujours le nom de mes variables en majuscule... Et si c'est pas beau pourquoi tu écris : Erreur ICIIIIIIIIIIII. Arf !...
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 20/02/2017 à 16:54
Re,

Du coup si tu appelles une variable "année" tu vas l'appeler ANNEE ou Annee? je faisais ça en FORTRAN90 xD Le plus beau langage au monde

C'était une hyperbole afin d'attirer le regard de mon lecteur, VOILA
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017
20 févr. 2017 à 17:05
Re,

C'était, bien sûr juste pour plaisanter... Ne prend pas ça comme une pique. Je pensais que le Arf en dirait assez mais visiblement non... Heu là aussi c'est pour déc***er.

En fait, je n'utilise pratiquement jamais des variables avec des noms à rallonge comme maxNbMachine ou maxNbSousMachine par exemple. Ça serait plutôt MNM et MNSM ou M1 et M2.
En revanche quand je commente mes codes, j'explique à quoi correspond le nom donné dans le commentaire :
Dim A As Date 'déclare la variable A (Année)

Étant complètement autodidacte, je ne connais malheureusement que VBA (et encore, puis-je dire connaître avec le peu que j'en sais) et même sous la torture je ne parle pas FORTRAN. Je suis Very BasiC Amateur...
0