• Initiateur de la discussion Initiateur de la discussion cibleo
  • Date de début Date de début

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 !

cibleo

XLDnaute Impliqué
Bonsoir le forum,

Je sais vous allez me dire que le sujet a été mille fois abordé.😉

Mais pour illustrer ma demande, j'ai repris un fichier trouvé sur le forum qui répond partiellement à mon problème.

Dans la feuille de calcul "Monte" s'affiche un formulaire dans lequel la combo1 et combo2 alimentent la listbox1 sur ses 2 colonnes. (Travail de Boisgontier)

Dans la feuille "Monte2", je reprends les mêmes éléments et code identique sauf que la listbox1 ne possède plus qu'une colonne et j'aimerais que la sélection effectuée en combo1 et 2 s'affiche l'une en dessous de l'autre dans la listbox et non plus sur la même ligne comme dans l'exemple de Boisgontier.

Quequ'un peut il m'aider à modifier le code.

Tout cela en vue d'un futur projet qui me permettrait d'alimenter un planning journalier.
Actuellement, je rassemble beaucoup d'éléments sur le forum pour concevoir mon formulaire.

Ma base de travail étant le fichier de Jyll dans le fil ci-dessous.

https://www.excel-downloads.com/threads/userform-intuitif.75953/

Merci de votre aide.

Cibleo
 

Pièces jointes

Dernière édition:
Re : Alimenter 1 listbox

Bonsoir cibleo,

Essaye comme ceci pour l'USF2: code du bouton "Ajouter"

Code:
'.../...
 If Me.ComboBox2.ListIndex = -1 Then
    MsgBox "choisir un cheval"
    Exit Sub
  End If
  Me.ListBox1.AddItem Me.ComboBox1
  Me.ListBox1.AddItem Me.ComboBox2
  Me.ComboBox1.RemoveItem Me.ComboBox1.ListIndex
  Me.ComboBox2.RemoveItem Me.ComboBox2.ListIndex
  If Me.ComboBox1.ListCount > 0 Then
    Me.ComboBox1.ListIndex = 0
  Else
'.../...

A+
 
Re : Alimenter 1 listbox

Re, bonjour Bebere,

Le code du bouton "Ok" du USF2 pour transférer la listbox dans la feuille "Monte2" si tu souhaites remplir les colonnes A et B comme sur la feuille "Monte1".

Code:
Private Sub B_ok_Click()
Dim k As Long, y As Long
  
  y = 3
  With Sheets("Monte2")
    .Range("A2:B" & .Range("A65536").End(xlUp).Row + 1).Clear
    .Range("A2") = ListBox1.List(0)
    .Range("B2") = ListBox1.List(1)
    If ListBox1.ListCount > 2 Then
      For k = 2 To ListBox1.ListCount - 1
         If k Mod 2 = 0 Then
             .Cells(y, 1) = ListBox1.List(k)
         Else
             .Cells(y - 1, 2) = ListBox1.List(k)
             y = y - 1
         End If
         y = y + 1
      Next
    End If
  End With
End Sub

Bonne journée

A+
 
Re : Alimenter 1 listbox

Bonsoir le forum,
Bonsoir bqtr, Bebere

Vraiment heureux de vous croiser sur ce fil 🙂
Consultant régulièrement vos réponses dans d'autres posts, j'avoue être admiratif devant le travail accompli.

Je t'avouerai bqtr que je n'ai pas regardé ton travail cet après midi, mais je me suis plutôt campé sur le fichier de Bebere.

De là, j'ai commencé à élaborer mon formulaire (ce n'est qu'une ébauche), je procède pas à pas, je n'ai pas votre talent 😀

Comme vous le verrez, j'ai un peu modifié le code.

Puis, j'ai rajouté une Combo (ComboCivilite) et une TextBox (txtHeure).

Dans la ListBox1, j'aimerais donc effectuer :
- la concanétation ComboCivilite & ComboClients
- la concanétation txtHeure & ComboCommunes

Exemple, j'aimerais voir s'afficher Mr DUVAL Pierre et en dessous 9:10 Dijon

Aussi, je vais m'inspirer de votre travail dans le fil ci-dessous
https://www.excel-downloads.com/thr...dans-differentes-cellule-dune-colonne.108737/

En résumé, mon souhait est d'alimenter mon planning journalier à l'aide des données de la Listbox1 selon la méthode de Jyll et en m'aidant de votre solution proposée dans le fil ci-dessus.

Mais bon, en premier lieu, j'aimerais résoudre le problème de la concanétation.

Merci de votre aide
Cibleo

Pour info, le code de la txtHeure est signé myDearFriend, il suffit de saisir 0910 pour afficher 09:10

Ps : bqtr, je vais regarder ton travail demain, promis.
 

Pièces jointes

Dernière édition:
Re : Alimenter 1 listbox

bonjour Cibleo,Bqtr
comprends pas ce que tu veux dans bouton valider sélection
le chauffeur peut-il avoir plusieurs personnes à transporter
fait le code pour une validation et spinbutton et concaténation
à bientôt
 

Pièces jointes

Re : Alimenter 1 listbox

Bonjour à tous,
Bonjour bqtr, Bebere

Pour bien comprendre, je résume :

- On laisse de côté le SpinButton pour le moment.

- le bouton "créer la course" renseigne la ListBox1 à l'aide des données entrées dans les 4 controles suivants : ComboCivilite, ComboClients, txtHeure et ComboCommunes, sur ce point on est d'accord.

- La Listbox1 ainsi remplie, le bouton "valider la course" doit me permettre d'en ventiler les données vers mon "planning" par l'intermédiaire de la sélection effectuée dans les 2 autres ComboBox (ComboCreneaux et ComboChauffeurs).

Pour illustrer ma demande, j'ai pris le fichier de Jyll cité en référence dans mon premier post.

Pour faire la comparaison :

ComboChauffeurs = ComboReference dans le fichier de Jyll
ComboCreneaux = ComboDate ....
ListBox1 = TextBoxQuantité .....
Bouton "valider la course" = Bouton "Valider".....

Sinon pour la concaténation, c'est exactement l'effet recherché 🙂

Tu dis :
le chauffeur peut-il avoir plusieurs personnes à transporter

Au départ je n'avais pas prévu cela, mais effectivement ton code le permet et cela m'arrange.🙂
09:00 Mr DUVAL Pierre
09:10 Mr ALLOU Marc

Par contre, après avoir créé ma course dans ma Listbox1 en cliquant sur le bouton (Créer la course), je n'arrive pas à la ventiler dans mon Planning avec le bouton "Valider la course".

Apparait toujours le message "une sélection minimum,svp"

Je ne dois pas faire la bonne manipulation, il faut bien que je désigne un chauffeur dans la ComboChauffeurs et saisir un horaire dans la ComboCreneaux 😕

Merci pour tes explications Bebere

Cibleo

Dernière remarque : je n'ai pas eu le temps de paramétrer "ComboCreneaux" au format horaire.
J'ai trouvé le fil adéquate ci-dessous

https://www.excel-downloads.com/threads/affichage-heures-dans-combobox.97333/

Ouf, j'ai fini 😱

Bonne soirée à tous
 
Re : Alimenter 1 listbox

Bonjour Bebere, bqtr

D'abord merci pour toute l'attention portée à mon projet, cela avance à grands pas et j'avoue avoir du mal à vous suivre.

Après plusieurs tests, voici mes remarques.

bqtr : effectivement la ComboCreneaux n'a plus lieu d'être puisque la ventilation (données de la ListBox1) s'effectue via l'horaire saisi et le choix du chauffeur (ComboChauffeurs) ; c'est parfait et cela me convient.🙂

Par contre, la plage de mon planning s'étalant de 6:00 à 21:00, je ne peux saisir l'horaire d'une course hors de cette plage ---> Message d'erreur.

Est-il possible de rajouter certaines conditions dans le code ?

Exemple : si l'heure saisie est 00, 01, 02, 03, 04 ou 05:00 alors ventiler dans la plage de 06:00. Idem après 21:00

En effet, pour des raisons de commodité, je souhaite concentrer mon planning sur 1 seule feuille à l'impression et non 2, d'où cette plage horaire restreinte.

D'autre part, j'aimerais que la course ventilée dans le planning s'affiche comme dans la Listbox1, soit les données les unes en dessous des autres.
Est-ce possible ?

Autre point important : lors de la création de plusieurs courses, les données ventilées correspondent toujours aux 2 derniers items de ma Listbox1, j'aimerais que tout le contenu de la Listbox soit ventilé (dans l'absolu, je pourrais avoir 10 items !!).

Dernier point à aborder et ce sera fini pour aujourd'hui 🙂 : le spinButton.

J'aimerais qu'il me serve à déplacer les items de ma listBox, comme dans ton exemple dans le fil ci-dessous bqtr.

https://www.excel-downloads.com/threads/deplacer-les-lignes-dune-listview.118103/

Je sais que c'est beaucoup de travail mais je ne suis pas pressé pour mener mon projet à bien.

Merci pour tout le travail déjà accompli, je vais souffler un peu et prendre le temps de dépouiller les codes générés. 😀

Bon week-end à tous

Cibleo
 
Re : Alimenter 1 listbox

Re,


Pour les données comme dans la listbox:

Code:
With Sheets("Planning")
  lign = Me.ComboChauffeurs.ListIndex + 9
  Col = Left(ListBox1.List(1), 2) - 3
  .Cells(lign, Col) = ListBox1.List(0) & [B]Chr(10)[/B] & ListBox1.List(1)
  If ListBox1.ListCount > 2 Then
    For k = 2 To ListBox1.ListCount - 1
      If k Mod 2 = 0 Then
         Col = Left(ListBox1.List(k + 1), 2) - 3
         .Cells(lign, Col) = ListBox1.List(k) & [B]Chr(10)[/B] & ListBox1.List(k + 1)
      End If
    Next
  End If
End With
Pour ceci:

Autre point important : lors de la création de plusieurs courses, les données ventilées correspondent toujours aux 2 derniers items de ma Listbox1, j'aimerais que tout le contenu de la Listbox soit ventilé (dans l'absolu, je pourrais avoir 10 items !!).


Normalement tout le contenu de la listbox est ventilé quelque soit le nombre de course 😕

Pour le reste je regarde.

A+

Edit: Pour l'heure voici une solution qui interdit de saisir une heure < à 06h00et > à 21h00
Modifie la macro de Didier comme ceci:

Code:
'.../...
 If m Like "####" Then
        hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
        min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
        If hr < 6 Or hr > 21 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
        Check_hourFormat = True
    End If
End Function
 
Dernière édition:
Re : Alimenter 1 listbox

Re bqtr,

Sur l'heure, on s'est mal compris.

En fait, le problème vient de ma plage horaire du planning qui est limitée au créneau 6:00-21:00.

Si je dois saisir une course à 5:10, elle ne peut pas être ventilée dans la colonne correspondante puisque l'en-tête 05:00 n'existe pas dans mon planning --> Message d'erreur.

A défaut, je voulais savoir si l'on pouvait quand même la ventiler dans la colonne des 6:00 en insérant des conditions dans ton code ?

Sinon, je viens de faire un test et je te confirme si j'ai plusieurs items, seuls les 2 derniers sont ventilés.

Vas y doucement, je ne suis pas un champion en VBA 😱 j'ai tout mon temps.

Le VBA, c'est du sport avec toi 😀

Autre point, ça serait bien que les colonnes s'ajustent automatiquement lors de la ventilation.

Bonne soirée Cibleo
 
Re : Alimenter 1 listbox

Re,

Pour l'heure je pense que c'est bon.
Pour la ventilation de la listbox c'est étonnant car ça fonctionne bien.
Tu as fait des essais avec ton fichier original ou avec celui du forum ?
Pour le spinbutton tu peux faire le tour de la listbox autant de fois que tu veux 😀, à condition de sélectionner une ligne évidemment.

Bonne journée
 

Pièces jointes

Re : Alimenter 1 listbox

bonjour bqrt,cibleo
listbox1 a 2 colonnes,dans la 2ème est stoqué l'index ligne du chauffeur
en partant du code de bqtr

Private Sub B_Valider_Click() 'Valider la course

Dim Col As Integer, lign As Long, k As Long

If Me.ListBox1.ListCount = 0 Then Exit Sub

If Me.ComboChauffeurs.ListIndex = -1 Then
MsgBox "Choisir un chauffeur"
Exit Sub
End If

With Sheets("Planning")
For k = 0 To ListBox1.ListCount - 1
If Me.ListBox1.List(k, 1) <> "" Then lign = Me.ListBox1.List(k, 1)
If k Mod 2 = 0 Then
Col = Left(ListBox1.List(k + 1), 2) - 3
If Col < 3 Then Col = 3
If Col > 18 Then Col = 18
.Cells(lign, Col) = ListBox1.List(k) & Chr(10) & ListBox1.List(k + 1)
End If
Next
.Columns("C:Q").AutoFit
End With

End Sub

à bientôt
 
Re : Alimenter 1 listbox

Bonjour Bebere, bqtr
Bonjour à tous,

Un petit résumé pour faire un point ensemble 🙂.

- Ce qui conditionne la ventilation c'est l'horaire saisi et la désignation du chauffeur, on est d'accord.
- la ventilation avant 06:00 et après 21:00, ça colle aussi
- et le spinbutton fonctionne 🙂

Mais j'apporte quelques précisions :

Je ne t'ai présenté qu'un formulaire dépouillé et la version finale comportera d'autres contrôles (Textbox etc...) qui me serviront à entrer d'autres infos comme dans l'exemple ci-dessous.

09:10 Sauvigny
MR ALLOU Marc
Diabétique
Consultation
Dr Duranton
10:30 CHU Dijon

D'où l'utilité du Spinbutton pour trier les différentes infos de la Listbox1.

Précision importante et rectification à apporter au code: c'est donc l'heure inscrite dans le 1er item de la Listbox1 qui conditionnera la ventilation des données saisie.

Si je reprends l'exemple ci-dessus, la course sera ventilée dans la colonne 09:00 et non 10:00.

Voilà pourquoi, je ne comprenais pas le principe et le résultat de ta ventilation, je n'avais pas assez clarifié les choses 😱.

Le 1er item affichera toujours une heure et son point de départ, je pense que le code va s'en trouver simplifié.

En attendant, je m'emploie à redessiner mon formulaire.

Bon week-end et à bientôt

Cibleo

Ps : Bebere, je viens à l'instant de voir ta réponse, pas eu le temps d'analyser, trop occupé à rédiger mon post 😱
 
Re : Alimenter 1 listbox

Re,

Tu devrais mettre en PJ un exemple de ton USF tel qu'il sera au final.
D'après ce que tu dis, le code qui sert à ventiler la listsbox n'est pas du tout adapté à ce que tu veux, du moins si je comprends bien.

Ce qui conditionne la ventilation c'est bien les heures.
Les six lignes en exemple sont dans la listsbox ? Si c'est le cas il va falloir faire des modifs.

Essaye de mettre un exemple réel avec ton USF complet et les explications qui vont avec.
On procédera étape par étape si tu veux, mais vaut mieux travailler sur du concret et avoir une vue d'ensemble du projet que de procéder petit bout par petit bout, du moins c'est ce que je pense. 🙂


A+
 
- 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

Discussions similaires

Réponses
1
Affichages
1 K
Retour