• 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

Bonjour à tous,
Bonjour bqtr,

C'est super tout ça, en plus tu anticipes mes questions 🙂

Pour le bouton "Valider", j'ai enlevé le 2ème test et gardé ceci, il n'est pas indispensable que l'heure d'arrivée soit placée dans le dernier élément.

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.ComboChauffeurs.ListIndex = -1 Then
    MsgBox "Choisir un chauffeur"
    Exit Sub
End If
'...\...
Pour le bouton "Ajouter une Info", j'ai rajouté ceci pour encore + de souplesse.
Code:
Private Sub B_AjouInfo_Click()
[COLOR=teal][B]If Me.txtHeure <> "" And Me.ComboPCharge.ListIndex >= 0 Then Me.ListBox1.AddItem txtHeure & " " & Me.ComboPCharge[/B][/COLOR]
[COLOR=teal][B]If Me.txtHeure2 <> "" And Me.ComboDestination.ListIndex >= 0 Then Me.ListBox1.AddItem txtHeure2 & " " & Me.ComboDestination[/B][/COLOR]
If Me.ComboCivilite.ListIndex >= 0 And Me.ComboClients.ListIndex >= 0 Then Me.ListBox1.AddItem ComboCivilite & " " & Me.ComboClients
If Me.txtNbrePers <> "" Then Me.ListBox1.AddItem Me.txtNbrePers
If Me.txtTel <> "" Then Me.ListBox1.AddItem Me.txtTel
If Me.txtAdresse <> "" Then Me.ListBox1.AddItem Me.txtAdresse
'...\...

Par contre, je n'arrive pas à régler ce petit détail.
(Sur le principe, le code fonctionne bien)
Illustration :

Je crée une course dans ListBox1, je valide ---> 2 cas se présentent si la plage horaire contient déjà une course.
MsgBox (Plage horaire déjà prise, voulez-vous remplacer la course initiale ?)

Si oui, la ListBox1 et la ComboChauffeurs se vident bien, par contre quand je clique sur non, leur contenu ne s'efface pas 😕
Ci dessous, dois-je déplacer l'instruction ou bien la rajouter ailleurs dans le code du bouton "Valider".
Code:
Remise_Zero
Me.ListBox1.Clear

Dernier point, dans le cas de figure ci-dessus, serait-il possible de mentionner le nom du chauffeur dans la MsgBox (Plage horaire déjà prise, voulez-vous remplacer la course initiale de "ComboChauffeurs")

Ps : si tu vois d'autres petites fonctionnalités à rajouter, n'hésites pas à m'en faire part.

A+ Cibleo et Allez Nantes 😉

Bonne soirée à tous
 
Re : Alimenter 1 listbox

Re,

Pour ta 1ère demande enlève le Exit Sub
Code:
.../...
       Next
         Cells(lign, Col) = Left(Concat, Len(Concat) - 1)
    Else
       For k = 0 To ListBox1.ListCount - 1
         Concat = Concat & ListBox1.List(k) & Chr(10)
       Next
       Cells(lign, Col) = Cells(lign, Col) & Chr(10) & Chr(10) & Left(Concat, Len(Concat) - 1)
    End If
  Else
    For k = 0 To ListBox1.ListCount - 1
.../...

Pour la Msgbox :
Code:
.../...
 If MsgBox("Plage horaire déjà prise, voulez-vous remplacer la course initiale de " & Me.ComboChauffeurs & " ? ", vbYesNo + vbExclamation, "Attention :") = vbYes Then
.../...

La véritable place des Nantais est en ligue 2 et ils font tous ce qu'il faut pour y aller. Allez encore un petit effort il ne reste que deux matchs. 😀


Bonne fin de soirée
 
Re : Alimenter 1 listbox

Bonsoir le forum 🙂
Bonsoir bqtr et encore merci,

Un petit retour avant le Sochaux-Nantes de ce soir et des larmes en perspective 🙁

Je finalise la 1ère partie de mon projet en posant cette dernière question.
J'illustre une nouvelle fois :

Je crée une course dans ListBox1, je valide ---> 2 cas se présentent si la plage horaire contient déjà une course.
MsgBox (Plage horaire déjà prise, voulez-vous remplacer la course initiale ?) ---> Oui ou Non

Je clique sur Non et la course vient se placer après la course initiale .

Maintenant, j'aimerais instaurer un nouveau choix au moment du clic sur le Non.

Peut-on faire apparaitre une nouvelle MsgBox (Oui et Non) pour placer la course avant ou après la course initiale dans la cellule concernée.

MsgBox (Après la course ci-dessous ?)

Si Oui ----> la course vient se placer après la course initiale.
Si Non ----> la course vient se placer avant.

De plus, pour bien visualiser le truc, peut-on faire figurer le contenu de la cellule concernée (la course initiale) dans cette nouvelle MsgBox ?

Merci de ton aide et bonne soirée à tous.

Cibleo

Ps : j'ai renvoyé mon fichier dans un post plus haut avec toutes tes modifications.
 
Re : Alimenter 1 listbox

Bonjour,

Le code du bouton "Valider la course" modifié :
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.ComboChauffeurs.ListIndex = -1 Then
    MsgBox "Choisir un chauffeur"
    Exit Sub
End If
 
With Sheets("Planning")
  lign = Me.ComboChauffeurs.ListIndex + 9
  Col = Left(ListBox1.List(0), 2) - 4
  If Col < 3 Then Col = 3
  If Col > 13 Then Col = 13
  If .Cells(lign, Col) <> "" Then
    If MsgBox("Plage horaire déjà prise, voulez-vous remplacer la course initiale de " & Me.ComboChauffeurs & " ? ", vbYesNo + vbExclamation, "Attention :") = vbYes Then
       For k = 0 To ListBox1.ListCount - 1
         Concat = Concat & ListBox1.List(k) & Chr(10)
       Next
         Cells(lign, Col) = Left(Concat, Len(Concat) - 1)
    Else
       If MsgBox("Après la course initiale ?" & Chr(10) & Chr(10) & Cells(lign, Col), vbYesNo + vbInformation, "Position :") = vbYes Then
         For k = 0 To ListBox1.ListCount - 1
           Concat = Concat & ListBox1.List(k) & Chr(10)
         Next
         Cells(lign, Col) = Cells(lign, Col) & Chr(10) & Chr(10) & Left(Concat, Len(Concat) - 1)
       Else
         For k = 0 To ListBox1.ListCount - 1
           Concat = Concat & ListBox1.List(k) & Chr(10)
         Next
         Cells(lign, Col) = Left(Concat, Len(Concat) - 1) & Chr(10) & Chr(10) & Cells(lign, Col)
       End If
    End If
  Else
    For k = 0 To ListBox1.ListCount - 1
      Concat = Concat & ListBox1.List(k) & Chr(10)
    Next
      Cells(lign, Col) = Left(Concat, Len(Concat) - 1)
  End If
End With
 
Remise_Zero
Me.ListBox1.Clear
Me.txtHeure.SetFocus
 
End Sub

Bon dimanche
A+
 
Re : Alimenter 1 listbox

Bonsoir le forum,
Bonsoir bqtr,

Tout fonctionne à merveille 🙂

Je reviens avec l'UserForm1 qui contient une listbox à 2 colonnes (Numéros Utiles) où figurent une liste de contacts que j'aimerais faire figurer dans la plage (C17:M17) de ma feuille "Planning", puis (C18:M18) ...

1ère colonne : noms des contacts
2ème colonne : N° Tel des contacts

Illustration : Dans la listbox, je sélectionne Gare Dinant et MDR Tilloy, j'aimerais voir s'afficher l'un en dessous de l'autre les données.

En C17
Gare Dinant
03.85.12.46.51

En D17
MDR Tilloy
03.85.12.46.56

Pour cela, j'ai voulu adapter un de tes codes (fil ci-dessous) mais j'ai une erreur d'éxécution.
https://www.excel-downloads.com/threads/copier-listbox-a-plusieurs-colonnes-vers-feuille.100309/

Peux-tu une nouvelle fois intervenir ? 😱

Bonne soirée à tous

Amicalement Cibleo
 

Pièces jointes

Dernière édition:
Re : Alimenter 1 listbox

Bonsoir,

Teste ceci :
Code:
Private Sub CommandButton1_Click()

Dim y As Byte, m As Integer
Dim ColDeb As Byte, LignDeb As Integer, ColFin As Byte, LignFin As Integer

ColFin = 13
LignFin = 19

With Sheets("Planning")
  For y = 17 To LignFin
    For m = 3 To ColFin
      If .Cells(y, m) = "" Then
         ColDeb = m
         LignDeb = y
         GoTo S1
      End If
    Next
  Next
  
S1:
  If ColDeb = 0 Or LignFin = 0 Then
    MsgBox "Plage complète.", vbCritical, "Erreur:"
    Exit Sub
  End If
  
  For k = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(k) Then
       .Cells(LignDeb, ColDeb) = ListBox1.List(k, 0) & Chr(10) & ListBox1.List(k, 1)
       ColDeb = ColDeb + 1
       If ColDeb > ColFin Then
          ColDeb = 3
          LignDeb = LignDeb + 1
       End If
       If LignDeb > LignFin Then
          MsgBox "Plage remplie.", vbExclamation, "Attention !"
          Exit For
       End If
    End If
  Next
End With

End Sub
Les numéros utiles peuvent se mettre sur les lignes 17,18,19 et les colonnes 3 à 13.
La plage C17:M19 est balayée(ligne 17 puis 18 et enfin 19). Dés qu'une cellule vide est trouvée on sort des boucles (GoTo S1) et le transfert de la listbox commence à partir de cette dernière.

A+
 
Dernière édition:
Re : Alimenter 1 listbox

Bonjour à tous,
Bonjour bqtr,

Plus haut, j'ai remplacé le fichier initial avec tes nouvelles modifications ci-dessus.

Tout colle parfaitement 🙂

J'ai repris l'UserForm1 en y rajoutant une Listbox2 de 3 colonnes où figurent les coordonnées de "Clients douteux" que j'aimerais transférer, selon le même principe que précédemment, en ligne 12 de la feuille "planning".

Ces données ne dépasseront pas les bornes de la plage (C12:M12), puisqu'il y en aura peu.

Je pense que cette dernière demande viendra cloturer ce fil.
Encore une fois merci

Je retourne sur l'autre fil.
Cibleo
 
Re : Alimenter 1 listbox

Bonjour,

Sur le même principe, essaye ceci :
Code:
Private Sub CommandButton3_Click()
Dim y As Byte, m As Byte, k As Long
Dim ColDeb As Byte
With Sheets("Planning")
    For m = 3 To 13
      If .Cells(12, m) = "" Then
         ColDeb = m
         Exit For
      End If
    Next
 
  If ColDeb = 0 Then
    MsgBox "Plage complète.", vbCritical, "Erreur:"
    Exit Sub
  End If
 
  For k = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(k) Then
       .Cells(12, ColDeb) = ListBox2.List(k, 0) & "  " & ListBox2.List(k, 1) & Chr(10) & ListBox2.List(k, 2)
       ColDeb = ColDeb + 1
       If ColDeb > 13 Then
          MsgBox "Plage remplie.", vbExclamation, "Attention !"
          Exit For
       End If
    End If
  Next
End With
End Sub

Bonne journée
A+
 
Re : Alimenter 1 listbox

Bonsoir à tous,
Bonsoir bqtr,

Merci bqtr, ça colle comme d'habitude 😉

Je pensais en avoir fini avec la première phase de mon projet 🙄, mais je souhaiterais y incorporer une dernière petite fonctionnalité.

Pour éviter éventuellement de saisir 2 fois la même course, j'aimerais afficher une alerte (MsgBox : Oui, Non) lors de la saisie du nom de la personne transportée dans la "ComboClients".

Style : Attention le Nom "Duval" figure déjà dans votre planning !
Voulez-vous continuer la saisie ?

Avec visualisation dans la MsgBox de la course déjà saisie.

Je pense qu'il faut utiliser l'événement Exit ou AfterUpdate de la ComBobox.

Merci une nouvelle fois de te pencher sur ma nouvelle demande.

Après, j'attaquerai la phase 3 de mon projet sur un autre fil 😀

Amicalement Cibleo

Bon week-end à tous
 
Re : Alimenter 1 listbox

Bonsoir Cibleo

Essaye ceci en remplacement de la procédure Private Sub ComboClients_Click() existante :
Code:
Private Sub ComboClients_Click()

Dim cel As Range, Texte As String, Question As String

Me.ComboCivilite.Enabled = True
For Each cel In Sheets("Planning").Range("C4:M10")
  If cel <> "" Then
    If cel Like "*" & ComboClients & "*" Then Texte = Texte & "Cellule " & cel.Address & " :" & vbCrLf & cel & vbCrLf & vbCrLf
  End If
Next

If Texte <> "" Then
   If MsgBox("Attention le Nom : " & ComboClients & " figure déjà dans votre planning !" & vbCrLf & vbCrLf & Texte & "Voulez-vous continuer la saisie ?", vbExclamation + vbYesNo, "Attention :") = vbNo Then
      ComboClients.ListIndex = -1
      Me.ComboCivilite.Enabled = False
      Exit Sub
   End If
End If

End Sub

Bonne soirée
A+
 
Dernière édition:
Re : Alimenter 1 listbox

Bonsoir le forum,
Bonsoir bqtr,

C'est génial 🙂

Dernière petite amélioration : à l'affichage de la MsgBox, j'aimerais aussi mentionner le nom du chauffeur qui effectue la course.

Style du message venant se placer à la suite de la course : C'est "Pierre" qui effectue cette course.

Aussi, lors du clic sur le "Non", j'aimerais que le focus revienne sur la "txtHeure" tout en remettant à blanc les données initialement saisies.

A part quelques petits problèmes de focus, je pense en avoir fini avec ce formulaire 🙄

Je passe à la phase 3.

Encore merci Cibleo
 
Re : Alimenter 1 listbox

Re,

La modif :
Code:
Private Sub ComboClients_Click()

Dim Cel As Range, Texte As String, Question As String

Me.ComboCivilite.Enabled = True
For Each Cel In Sheets("Planning").Range("C4:M10")
  If Cel <> "" Then
    If Cel Like "*" & ComboClients & "*" Then Texte = Texte & "Cellule " & Cel.Address & " :" & vbCrLf & Cel & vbCrLf & "C'est : " & Cells(Cel.Row, 2) & " qui effectue la course." & vbCrLf & vbCrLf
  End If
Next

If Texte <> "" Then
   If MsgBox("Attention le Nom : " & ComboClients & " figure déjà dans votre planning !" & vbCrLf & vbCrLf & Texte & "Voulez-vous continuer la saisie ?", vbExclamation + vbYesNo, "Attention :") = vbNo Then
      ComboClients.ListIndex = -1
      Remise_Zero
      Me.txtHeure.SetFocus
      Exit Sub
   End If
End If

End Sub

Bonne journée
A+
 
Re : Alimenter 1 listbox

Bonsoir le forum,
Bonsoir bqtr 🙂

Avec cette dernière réponse, j'arrive au terme de ce post.

Je ne sais pas comment te remercier pour tout ce temps consacré au développement de la 1ère phase de mon projet.

Tout s'est merveilleusement bien déroulé sauf qu'on a perdu Bebere en route 😀

Je marque une pause dans mon projet, je ne manquerai pas d'y revenir après d'autres recherches sur le forum.

A bientôt sur un autre fil.

Mille mercis bqtr

Je remercie aussi pour leur contribution Bebere, myDearfriend, PascalXLD et bhbh.

Bonne soirée à tous
Cibleo
 
- 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