Eviter doublons dans Combobox
Bonjour
Donc une fois la combobox2 matériel, remplie vous n'avez plus besoin du fichier gestion-loc et on peut donc le fermer ?
Ce fichier ne sert qu'à récupérer les infos pour la combobox3 et 2. Juste ?
Oui c'est exactement ça!
Votre fichier en retour pour test sur les checkbox1 et 2 (Autre n'est pas opérationnel) et sur les deux combobox3 et 2
La combobox3 est par défaut triée de plus petit au plus grand sur base du tri effectué dans le fichier Gestion-loc_materiel.
Pour l'instant le fichier gestion-loc restera ouvert jusqu'à ce que vous cliquiez sur Valider. J'ai opté pour cette solution car si par hasard vous changez de BL dans la combobox3 (suite à une erreur de choix par exemple , il faut pourvoir à nouveau avoir les bonnes infos dans la combobox2
Dans de votre retour avant de poursuivre si nécessaire
D'accord, le souci c'est qu'il ne faudrait pas modifier le fichier "gestion loc matériel". Or là les lignes sont en sens inverse ..
Est ce qu'on pourrait pas laisser l'ordre des ligne comme c'est, rentrer les BL dans "tablo" et ensuite trié en sens inverse tablo ? De manière à pas touché au fichier de base?
Lors du click sur Valider le fichier gestion-loc sera fermé sans être sauvé (le code ne vous demande rien sur ce fichier). Il restera donc identique à ce qu'il était à l'ouverture de l'userform et donc non modifié. Donc pas de souci l'ordre des lignes restera tel quel
Sinon que voyiez vous comme problème à ce niveau ?
D'accord parfait !
Petit problème supplémentaire : Si on coche en premier la case IJINUS, et qu'on coche ensuite la case Hydreka, une boîte de dialogue s'ouvre en disant " le fichier est déjà ouvert... patati patata .." on clique sur Oui continué, et là un message d'erreur apparait: "Erreur 1004 la méthode 'Range de l'objet' _Worsheet' à échoué". En cliquant sur débogage ça me désigne la ligne de code qui permet de trier le fichier en ordre inverse.
Donc l'idéal serait d'ouvrir le fichier quand on coche "Matériel externe", et non IJINUS ou HYDREKA. Et je pense que ça devrait régler le problème.
Petit problème supplémentaire : Si on coche en premier la case IJINUS, et qu'on coche ensuite la case Hydreka, une boîte de dialogue s'ouvre en disant " le fichier est déjà ouvert... patati patata .." on clique sur Oui continué, et là un message d'erreur apparait: "Erreur 1004 la méthode 'Range de l'objet' _Worsheet' à échoué".
Oui c'est normal parce que le tri ne peut se faire que sur la feuille active et que la feuille HYDREKA ne contient qu'une ligne. Pour régler ce souci, remplacez ces lignes dans la macro liste_BL
With OS
.Range("Tableau" & i).Sort Key1:=.Range("tableau" & i & "[N°BL]"), Header:=xlYes, Order1:=xlDescending
End With
Par celle-ci
With OS
.Select
On Error Resume Next
.Range("Tableau" & i).Sort Key1:=.Range("Tableau" & i & "[N°BL]"), Header:=xlYes, Order1:=xlDescending
On Error GoTo 0
End With
refaite un test
Edit:
Donc l'idéal serait d'ouvrir le fichier quand on coche "Matériel externe", et non IJINUS ou HYDREKA. Et je pense que ça devrait régler le problème.
Non parce que la combobox est remplie sur base de la feuille active et là en cliquant sur matériel externe, on ne sait pas quelle feuille est concernée pour compléter la Combobox 3
D'accord ! ça marche bien comme ça ! Merci !
ah non effectivement il y a un autre souci. il faudrait rajouter une condition à la fermeture du fichier "gestion loc matériel". Parce que si je n'ai que du matériel interne à rentrer, le fichier ne s'ouvre pas, or en cliquant sur le bouton valider il y à la commande de fermer de fichier !
il faudrait le fermer que s'il est déjà ouvert. Est ce qu'il y a une fonction pour ça ?
ah non effectivement il y a un autre souci. il faudrait rajouter une condition à la fermeture du fichier "gestion loc matériel". Parce que si je n'ai que du matériel interne à rentrer, le fichier ne s'ouvre pas, or en cliquant sur le bouton valider il y à la commande de fermer de fichier !
Juste ! Désolé mais je n'ai toute la vue actuellement de ce que vous faites
C'est assez facile. A la fin de la macro Valider, juste avant l'instruction CS.CLOSE FALSE, mettez --> ON ERROR RESUME NEXT
Mais en principe il ne devrait pas être ouvert puisque vous ne cochez pas une des cases IJINUS ou HYDREKA. Peut être que l'on pourrait rendre actives les trois cases à cocher IJINUS HYDREKA et AUTRES si vous avez cliqué avant sur Materiel externe. Votre avis ?
Pas de soucis! C'est compréhensible !
Si je comprend bien, il s'agirait de verrouiller les cases pour que l'on puisse les cocher uniquement si "matériel externe" est coché? Effectivement ça serait super bien de faire ça ! ça permet de limiter les erreurs
Si je comprend bien, il s'agirait de verrouiller les cases pour que l'on puisse les cocher uniquement si "matériel externe" est coché? Effectivement ça serait super bien de faire ça ! ça permet de limiter les erreurs
Exact !. Je vous fait cela.
revoici votre fichier pour test
A l'ouverture de l'userform, les cases à cocher IJINUS, AUTRE, .... sont indisponibles tant que vous ne sélectionnez pas Materiel externe.
Si vous sélectionnez matériel Interne, cela désactive la case à cocher Matériel externe et les 3 cases à cocher IJINUS, AUTRE...
Les modifications dont nous avons parlées avant sont incorporées.
J'ai aussi ajouté le cas AUTRES pour tenir compte de la feuille Autres Loueurs dans la macro Liste_BL
Ok merci c'est parfait !
J'ai rajouté dans l'useform un calendar, plus simple pour rentrer les dates. Est-ce qu'il y a possibilité de sélectionner une plage de jours ? C'est à dire que la première sélection définie la date de départ, et la deuxième définie la date de fin ? avec les dates entre les deux en surbrillance ?
Pour l'instant je suis partie sur deux calendar différents, mais clairement 1 seul ça peut être pas mal si c'est faisable.
De manière à renseigner ensuite les dates sélectionnées dans mon onglet "historique réservation" en colonne H et I ?
J'ai apporté des modifications au fichier, alors je vous le transmet de manière à repartir sur de bonne bases
Bonjour
Non j'ai un gros souci avec votre fichier. L'option Calendar ne fonctionne pas et cela buggue à l'ouverture. Je perds les 2 textbox dates
Si vous voulez un calendrier, vous pouvez regarder le fil suivant dans lequel il y a une userform et code que j'ai proposé --> https://forum.excel-pratique.com/excel/menu-deroulant-vba-pour-les-mois-de-l-annee-151368#p934396
De plus il y a des liaisons avec un autre fichier à l'ouverture... souci également là
reprenez cette version dans laquelle j'ai modifié deux ou trois choses car en utilisation j'ai remarqué deux ou trois erreurs par rapport au fichier gestion-loc quand il était ouvert et que vous passiez d'une case à cocher à l'autre.
L'ouverture du fichier (votre idée d'ailleurs) se fait lorsque vous cocher la case Matériel externe et se ferme lorsque vous cochez la case Matériel Interne
Repartez surtout de ce fichier. (je l'ai mis en version 6 vu que vous avez créé une version 5)
D'accord merci je vais regarder ça !
J'ai un petit problème supplémentaire.
Finalement la combobox 2 ne va se remplir que si le matériel est interne. Dans le cas ou le matériel est externe on va copier l'intégralité de la liste matériel correspondent au numéros de BL. Donc le code correspondent au bouton validation n'est pas le même. J'ai fais le code suivant:
Private Sub CommandButton1_Click() 'validation
Dim OS As Worksheet
Dim CS As Workbook
Fichier = "Gestion loc materiel externe 21_LSA.xlsx"
Chemin = ThisWorkbook.Path & "\Loc externe\"
Set CS = Workbooks(Fichier)
'If Not IsDate(TextBox3) Then
'MsgBox "Format incorrect date départ"
'TextBox3 = ""
'Exit Sub
''Else
''MsgBox "Format correct"
''...la suite de la procédure
'End If
' If Not IsDate(TextBox4) Then
' MsgBox "Format incorrect date retour"
' TextBox4 = ""
'Exit Sub
''Else
''MsgBox "Format correct"
''...la suite de la procédure
'End If
'If DateDiff("ww", TextBox3, TextBox4) < 0 Then
' MsgBox "Date retour inférieure à date de départ"
' Exit Sub
' End If
For i = 3 To 500
If InStr(ComboBox2.Text, Sheets("Inventaire").Range("C" & i).Value) > 0 Then
Sheets("Inventaire").Range("J" & i).Value = TextBox3
Sheets("Inventaire").Range("K" & i).Value = TextBox4
Sheets("Inventaire").Range("I" & i).Value = "Non"
Sheets("Inventaire").Range("L" & i).Value = TextBox2
End If
Next
If CheckBox1 = True Then 'Si Matériel interne
DerniereLigne = Sheets("Historique reservations").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Historique reservations").Range("A" & DerniereLigne).Value = TextBox1
Sheets("Historique reservations").Range("B" & DerniereLigne).Value = TextBox2
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox2
Sheets("Historique reservations").Range("H" & DerniereLigne).Value = TextBox3
Sheets("Historique reservations").Range("I" & DerniereLigne).Value = TextBox4
Sheets("Historique reservations").Range("J" & DerniereLigne).Value = DateDiff("d", TextBox3, TextBox4)
Sheets("Historique reservations").Range("C" & DerniereLigne).Value = "Interne"
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = "-"
Sheets("Historique reservations").Range("E" & DerniereLigne).Value = ComboBox2
For i = 3 To 500
If Sheets("Inventaire").Range("C" & i).Value = ComboBox2 Then
Sheets("Historique reservations").Range("F" & DerniereLigne).Value = Sheets("Inventaire").Range("D" & i).Value
Sheets("Historique reservations").Range("G" & DerniereLigne).Value = Sheets("Inventaire").Range("E" & i).Value
End If
Next
End If
If CheckBox2 = True Then 'Si matériel externe
If CheckBox3 = True Then 'si IJINUS
Set OS = CS.Worksheets("IJINUS")
For Each i In OS.Range("B3:B" & OS.Range("B" & OS.Rows.Count).End(xlUp).Row)
DerniereLigne = Sheets("Historique reservations").Range("A" & Rows.Count).End(xlUp).Row + 1
If i.Value = ComboBox3 Then
Sheets("Historique reservations").Range("A" & DerniereLigne).Value = TextBox1
Sheets("Historique reservations").Range("B" & DerniereLigne).Value = TextBox2
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox2
Sheets("Historique reservations").Range("H" & DerniereLigne).Value = TextBox3
Sheets("Historique reservations").Range("I" & DerniereLigne).Value = TextBox4
Sheets("Historique reservations").Range("J" & DerniereLigne).Value = DateDiff("d", TextBox3, TextBox4)
Sheets("Historique reservations").Range("C" & DerniereLigne).Value = "Externe"
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox3
Sheets("Historique reservations").Range("E" & DerniereLigne).Value = "-"
Sheets("Historique reservations").Range("F" & DerniereLigne).Value = OS.Range("C" & i.Row).Value
Sheets("Historique reservations").Range("G" & DerniereLigne).Value = OS.Range("E" & i.Row).Value
End If
Next
End If
If CheckBox4 = True Then 'si HYDREKA
Set OS = CS.Worksheets("HYDREKA")
For Each i In OS.Range("B3:B" & OS.Range("B" & OS.Rows.Count).End(xlUp).Row)
DerniereLigne = Sheets("Historique reservations").Range("A" & Rows.Count).End(xlUp).Row + 1
If i.Value = ComboBox3 Then
Sheets("Historique reservations").Range("A" & DerniereLigne).Value = TextBox1
Sheets("Historique reservations").Range("B" & DerniereLigne).Value = TextBox2
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox2
Sheets("Historique reservations").Range("H" & DerniereLigne).Value = TextBox3
Sheets("Historique reservations").Range("I" & DerniereLigne).Value = TextBox4
Sheets("Historique reservations").Range("J" & DerniereLigne).Value = DateDiff("d", TextBox3, TextBox4)
Sheets("Historique reservations").Range("C" & DerniereLigne).Value = "Externe"
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox3
Sheets("Historique reservations").Range("E" & DerniereLigne).Value = "-"
Sheets("Historique reservations").Range("F" & DerniereLigne).Value = OS.Range("D" & i.Row).Value
Sheets("Historique reservations").Range("G" & DerniereLigne).Value = OS.Range("F" & i.Row).Value
End If
Next
End If
''''''''''''''''''''''''''''''''''''''''''''''''''Problème dans cette boucle
If CheckBox5 = True Then 'si AUTRES LOUEURS
Set OS = CS.Worksheets("AUTRES LOUEURS")
For Each i In OS.Range("B3:B" & OS.Range("B" & OS.Rows.Count).End(xlUp).Row)
DerniereLigne = Sheets("Historique reservations").Range("A" & Rows.Count).End(xlUp).Row + 1
MsgBox (i.Value & " " & ComboBox3)
If i.Value = ComboBox3 Then '''''''''' la boucle ne se lance pas si le n° de BL ne contient pas de Lettre
MsgBox "ok"
Sheets("Historique reservations").Range("A" & DerniereLigne).Value = TextBox1
Sheets("Historique reservations").Range("B" & DerniereLigne).Value = TextBox2
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox2
Sheets("Historique reservations").Range("H" & DerniereLigne).Value = TextBox3
Sheets("Historique reservations").Range("I" & DerniereLigne).Value = TextBox4
Sheets("Historique reservations").Range("J" & DerniereLigne).Value = DateDiff("d", TextBox3, TextBox4)
Sheets("Historique reservations").Range("C" & DerniereLigne).Value = "Externe"
Sheets("Historique reservations").Range("D" & DerniereLigne).Value = ComboBox3
Sheets("Historique reservations").Range("E" & DerniereLigne).Value = "-"
Sheets("Historique reservations").Range("F" & DerniereLigne).Value = OS.Range("C" & i.Row).Value
Sheets("Historique reservations").Range("G" & DerniereLigne).Value = OS.Range("E" & i.Row).Value
End If
Next
End If
End If
ComboBox2.Clear
For i = 2 To 500
If Sheets("Inventaire").Range("I" & i).Value = "Oui" And Sheets("Inventaire").Range("F" & i).Value = ComboBox1 Then ComboBox2.AddItem Sheets("Inventaire").Range("D" & i)
Next
On Error Resume Next 'pour eviter un erreur si le fichier n'est pas ouvert
CheckBox2CS.Close False 'fermeture du fichier Gestion-Loc
End Sub
Pas de soucis pour le matériel interne, ni pour le matériel externe concernant les feuilles ijinus et hydreka, cependant, la deuxieme boucle if si la checkbox5 est activée ne se lance pas si les BL sont composés de chiffre uniquement. Par contre, si on rajoute un lettre au BL le code marche bien.
Est ce qu'il y a une syntaxe différente permettant de d'éviter ce problème ? De manière à pouvoir avoir une bonne comparaison des valeurs de BL du fichier, et de la combobox3?
Pas de soucis pour le matériel interne, ni pour le matériel externe concernant les feuilles ijinus et hydreka, cependant, la deuxieme boucle if si la checkbox5 est activée ne se lance pas si les BL sont composés de chiffre uniquement. Par contre, si on rajoute un lettre au BL le code marche bien.
Votre commentaire est par rapport au bouton Validation ?
Finalement la combobox 2 ne va se remplir que si le matériel est interne. Dans le cas ou le matériel est externe on va copier l'intégralité de la liste matériel correspondent au numéros de BL.
Heu pas sur d'avoir bien compris.Vous aurez une liste déroulante Combobo2 avec des doublons alors ?
Ou alors vous voulez uniquement dire que si la case matériel interne est cochée on reprend la liste dans la feuille inventaire
Sinon, ce que je vous ai proposé jusqu'à présent est bon ou pas ?
Oui c'est par rapport au bouton validation effectivement. Je vous transmet mon fichier pour que vous puissiez voir les modifications que j'y ai apporté. Ce sera plus simple je pense.
Du coup c'est normal qu'il n'y ai plus les deux textbox date. Je l'ai mis en stand by pour le moment.
Oui les modifications apportées au codes concernant l'ouverture du fichier sont nickel!
Heu pas sur d'avoir bien compris.Vous aurez une liste déroulante Combobo2 avec des doublons alors ?
Ou alors vous voulez uniquement dire que si la case matériel interne est cochée on reprend la liste dans la feuille inventaire
Alors non! Dans le cas ou le matériel est interne on ne modifie rien, le code tourne comme avant.
C'est s'il s'agit de matériel externe que j'ai un peu modifié la chose. La combobox2 ne sera pas utilisée, on importera quand la feuille "historique réservation" l'ensemble du matos correspondant au n° de BL dans l'autre fichier.