Passer par 1 tableau pour alimenter ListBox1

cibleo

XLDnaute Impliqué
Bonjour à tous,
J'illustre par le dessin le résultat souhaité.

1ère saisie : je remplis les champs suivants de mon formulaire.
txtHeure + ComboPCharge
txtHeure2 + ComboDestination
Trajet2.jpg

Nouvelle saisie : j'efface txtHeure2 + ComboDestination avec cette procédure :
Code:
Private Sub ComboDestination_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If MsgBox("[COLOR=red]Voulez-vous fixer un autre point d'arrivée ?[/COLOR] ", vbYesNo + vbExclamation) = vbYes Then
     Me.txtHeure2 = ""
     Me.ComboVers.ListIndex = -1
     Me.ComboDestination.ListIndex = -1 '
     Me.txtHeure2.SetFocus
  Else
     Me.ComboClients.SetFocus
  End If
'La création du tableau
End Sub
et je remplis à nouveau txtHeure2 + ComboDestination :
Trajet1.jpg

Puis j'alimente Listbox1 avec les instructions ci-dessous :
Code:
Private Sub CommandButton1_Click() 'Créer la course
.../...
Me.ListBox1.AddItem txtHeure & " " & Me.ComboPCharge
.../...
Me.ListBox1.AddItem [COLOR=blue]Me.ComboDestination & " " & txtHeure2[/COLOR]
.../...
J'obtiens alors ceci :
ListBox.jpg

Or j'aimerais afficher cela : soit le départ et les 2 destinations saisies successivement.
ListBox1.jpg

Faut-il que je crée 1 tableau par l'intermédiaire de la procédure événementielle :
Private Sub ComboDestination_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Puis procéder ainsi :
Code:
Private Sub CommandButton1_Click() 'Créer la course
.../...
Me.ListBox1.AddItem txtHeure & " " & Me.ComboPCharge
.../...
Me.ListBox1.AddItem [COLOR=blue]le tableau[/COLOR]
[COLOR=black].../...[/COLOR]

Le problème est complexe :cool:
Pouvez-vous une nouvelle fois m'aider ?
Cibleo

Ps : saisir les horaires sous cette forme : exemple 0930 donne 09:30
 

Pièces jointes

  • ListBox.jpg
    ListBox.jpg
    5 KB · Affichages: 122
  • ListBox.jpg
    ListBox.jpg
    5 KB · Affichages: 122

Softmama

XLDnaute Accro
Re : Passer par 1 tableau pour alimenter ListBox1

Bonjour,

A chaque fois que tu rencontres une info que tu voudras faire apparaître plus tard dans ta listbox, tu la gardes ou dans une variable tableau, ou dans un coin d'une feuille de calcul (par ex. les uns en dessous des autres en colonne A de la feuille Data)

Ainsi quand tu en as besoin, il te suffit de faire un truc du genre
Code:
set c=sheets("Data").[A1]
do while c<>""
    me.textlistBox1.addItem c
    set c = c(2,1)
loop

Pour la méthode Tableau:
Code:
dim Tableau(3)
...
Tableau(1) =  txtHeure & " " & Me.ComboPCharge

Tableau(2) =  Me.comboDestination & " " & txtHeure2
à placer dans ta macro d'effacement de champ

puis, à la fin de la saisie:
Tableau(3) =  Me.ComboDestination & " " & txtHeure2

du coup qd tu veux alimenter ta liste box, fais :
For t = 1 to 3
    me.ListBox1.AddItem Tableau(t)
Next
 

cibleo

XLDnaute Impliqué
Re : Passer par 1 tableau pour alimenter ListBox1

Bonjour à tous,
Bonjour Softmama,

Même avec tes explications, c'est loin d'être gagné. :(
J'aimerais éviter de passer par une feuille de calcul.
Je continue mes recherches.

Cibleo
 

cibleo

XLDnaute Impliqué
Re : Passer par 1 tableau pour alimenter ListBox1

Bonsoir à tous,

Dans un premier temps, il faut que je remplisse ma variable tableau.
Dim tableau () parce que je ne connais pas le nombre d'éléments qu'elle peut contenir.

Et pour inserer ces différents éléments dans la variable tableau, il faut que je passe par ReDim Preserve.

Mais je sais pas faire :(

Seules les saisies successives de txtHeure2 et ComboDestination doivent alors se retrouver dans la variable tableau.

Cibleo
 

cibleo

XLDnaute Impliqué
Re : Passer par 1 tableau pour alimenter ListBox1

Bonsoir à tous,

A la sortie de ComboDestination, s'affiche la MsgBox comme ceci :

ListBox2.jpg

2 choix possibles :
Non, la variable tableau est remplie avec l'unique saisie de txtHeure2 et ComboDestination.
Oui, la variable tableau est remplie avec la 1ère saisie puis les n saisies suivantes de txtHeure 2 et ComboDestination.

2 saisies successives donneraient ceci par exemple :
Code:
Dim MyArray As Variant
Dim i As Integer
'My array = Array("ComboDestination & " " & txtHeure2","ComboDestination & " " & txtHeure2") 
MyArray = Array("CH Auxerre 10:45", "MDR Noyers 13:00")

Puis pour alimenter ListBox1, je procéderai comme ceci :
Code:
Private Sub CommandButton1_Click() 'Créer la course
.../...
For i = LBound(MyArray) To UBound(MyArray)
        Me.ListBox1.AddItem MyArray(i)
.../...
  Next

Je ne parviens pas à remplir la variable tableau avec les saisies successives dans txtHeure2 et ComboDestination. :(

Cibleo
 

Pièces jointes

  • ListBox2.jpg
    ListBox2.jpg
    13.7 KB · Affichages: 113
  • ListBox2.jpg
    ListBox2.jpg
    13.7 KB · Affichages: 107

Banzai64

XLDnaute Accro
Re : Passer par 1 tableau pour alimenter ListBox1

Re

Zut je viens de m'apercevoir que l'on ne prend pas la dernière course

Rajoute la ligne en rouge
Code:
  Private Sub CommandButton1_Click() 'Créer la course
.
.
.
.
For i = 1 To UBound(Tablo, 2) - 1
    Me.ListBox1.AddItem Tablo(2, i) & " " & Tablo(1, i)
  Next i
  [COLOR="Red"]Me.ListBox1.AddItem Me.ComboDestination & " " & txtHeure2[/COLOR]


Désolé
 

cibleo

XLDnaute Impliqué
Re : Passer par 1 tableau pour alimenter ListBox1

Bonsoir à tous,
Bonsoir Banzai64 :)

Génial, c'est exactement cela.
J'analyse tout çà, j'ai vraiment beaucoup de mal avec les variables tableaux.

Par contre, j'ai voulu remplacer l'évènement de ComboDestination
Code:
Private Sub ComboDestination_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
.../...
End Sub
par un Exit
Code:
Private Sub ComboDestination_Exit(ByVal Cancel As MSForms.ReturnBoolean)
.../...
End Sub

A la sortie de ComboDestination, la MsgBox ne s'affiche pas et le focus se place sur ComboClients, pourtant cela serait l'évènement plus approprié, non ?
A la fin de l'exécution, j'ai ceci : erreur d'exécution 2110
le focus ne peut être déplacé sur le contrôle car celui-ci est invisible, non activé, ou d'un type n'acceptant pas le focus.
Si vous voyez pourquoi cela cloche ?

Sinon avec l'événement KeyDown, cela fonctionne :rolleyes:

A+ Cibleo

Ps : dans mon élan, j'ai oublié de dire merci.
 
Dernière édition:

Banzai64

XLDnaute Accro
Re : Passer par 1 tableau pour alimenter ListBox1

Bonsoir

Dur dur de deviner comment tu voulais articuler tout cet assemble

Différence entre 'Créer la course' et 'Valider la course" ?

Sinon à mon avis il serait bien de poser la question dans l'événement 'Créer la course'

si OUI on quitte la création et on redemande les renseignements voulues
etc....

Si NON on finit l'affichage de la ListBox

Mais bon c'est pas sur que j'ai compris ce que tu attendais
 

cibleo

XLDnaute Impliqué
Re : Passer par 1 tableau pour alimenter ListBox1

Re Banzai64,

Un mot d'explications :
Au lieu de "Valider la course", il faut comprendre "Affecter la course".
Dans mon formulaire original, j'ai une Combobox "ComboChauffeurs" ou figurent tous les noms de chauffeurs.
Definir.jpg

Code:
Private Sub UserForm_Initialize()
Me.ComboChauffeurs.List = [Chauffeurs].Value
.../...

Tu vois le planning, je choisis un chauffeur dans la ComBoChauffeurs, je clique sur "Valider la course" et le contenu de Listbox1 est dispatché dans le planning en fonction de l'horaire de départ.

Comme la Combochauffeurs ne figurait plus dans le formulaire, j'avais décommenté le code ci-dessous, ça beuguait à l'affichage.

Code:
Private Sub B_Valider_Click() 'Valider la course
 
Dim Col As Integer, lign As Long, k As Long, Rep As String, Concat As String
 
If Me.ListBox1.ListCount = 0 Then Exit Sub
 
If InStr(1, ListBox1.List(0), ":") = 0 Then
  MsgBox "Le début de la course n'est pas valide.", vbInformation, "Erreur."
  Exit Sub
End If
 
If Me.[COLOR=red]ComboChauffeurs[/COLOR].ListIndex = -1 Then
    MsgBox "Choisir un chauffeur"
    Me.ComboChauffeurs.SetFocus
    Exit Sub
End If
.../...
Tu dis :
Dur dur de deviner comment tu voulais articuler tout cet assemble
Même moi, je me pose la question ?:rolleyes:

Sinon, je vais reprendre ton exemple pour l'appliquer à une listbox multiselect où l'on peut alterner les listes qui la composent.
Est-ce que ce sera exactement la même syntaxe, le même évenement ?

Ex : je fais une première sélection dans listbox2, je sors, je change de liste dans listbox2, nouvelle sélection, je clique et j'envoie dans Listbox1.
C'est le même principe que ce que tu as développé, sauf qu'il n'y a qu'1 seul contrôle et qu'il s'agit d'une listbox.

Cibleo
 

Pièces jointes

  • Definir.jpg
    Definir.jpg
    23.2 KB · Affichages: 93
  • Definir.jpg
    Definir.jpg
    23.2 KB · Affichages: 87

cibleo

XLDnaute Impliqué
Re : Passer par 1 tableau pour alimenter ListBox1

Re bonsoir à tous,

Pour en revenir au post #10# où j'évoquais l'erreur d'exécution 2110 avec l'événement Exit à la place de KeyDown, je pense que ce sont les Frames qui mettent le bazar.

J'ai fait un essai en supprimant les Frames, et il n'y plus d'erreur sauf que la msgBox ci-dessous s'affiche 2 fois successivement lors du déclenchement de l'événement Exit de ComboDestination.
ListBox2.jpg
Donc le résultat s'en trouve faussé.

Je laisse KeyDown.

Quelqu'un a t-il déjà rencontré un problème similaire ? Qu'il me fasse signe.

A+ Cibleo
 

Pièces jointes

  • ListBox2.jpg
    ListBox2.jpg
    13.7 KB · Affichages: 67
  • ListBox2.jpg
    ListBox2.jpg
    13.7 KB · Affichages: 69
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 714
Messages
2 091 243
Membres
104 818
dernier inscrit
DARKDEAMON