Interdire la saisie de doublon dans USF
Bonjour,
Après des recherches infructueuses sur le net, je vous pose mon souci. Je souhaiterai interdire la saisie d'un doublon dans un USF lors de la validation ?
Et deuxièmement, je n'arrive pas à réduire la longueur des menus déroulants dans l'USF.
Merci d'avance.
Titouan.
Bonjour
Pour le deuxièmement, essaie de changer ce code :
Private Sub UserForm_Initialize()
With Sheets("mouvements") 'prend en compte l'onglet "mouvements"
'alimentation dynamique des comboboxes
ComboBox1.List = .Range("X2:X3" & .Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
ComboBox2.List = .Range("Y2:Y4" & .Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
ComboBox3.List = .Range("Z2:Z5" & .Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
ComboBox4.List = .Range("AA2:AA3" & .Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
ComboBox5.List = .Range("AB2:AB4" & .Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
End With 'fin de la prise en compte de l'onglet "mouvements"
End Subpar celui-ci :
Private Sub UserForm_Initialize()
With Sheets("Mouvements") 'prend en compte l'onglet "mouvements"
'alimentation dynamique des comboboxes
ComboBox1.RowSource = "Mouvements!X2:X" & .Cells(Rows.Count, 24).End(xlUp).Row
ComboBox2.RowSource = "Mouvements!Y2:Y" & .Cells(Rows.Count, 25).End(xlUp).Row
ComboBox3.RowSource = "Mouvements!Z2:Z" & .Cells(Rows.Count, 26).End(xlUp).Row
ComboBox4.RowSource = "Mouvements!AA2:AA" & .Cells(Rows.Count, 27).End(xlUp).Row
ComboBox5.RowSource = "Mouvements!AB2:AB" & .Cells(Rows.Count, 28).End(xlUp).Row
End With 'fin de la prise en compte de l'onglet "mouvements"
End SubMerci GMB, ça marche.
Concernant le premier point , le critère du doublon se fait sur l'immatriculation du véhicule colonne H de la feuille mouvement.
J'ai fait plusieurs tentatives avec différents code mais rien de rien. Il s’obstine à ne pas fonctionner.
Merci.
Re bonjour
Le plus simple, et sans remettre tout en cause, c'est de supprimer la ligne que tu viens de mettre s'il y a doublon...Il suffit de rajouter une seule ligne à ta macro.
With Sheets("Mouvements")
Lg = .Range("h" & Rows.Count).End(xlUp).Row
For J = Lg To 1 Step -1
If Me.TextBox4 = .Range("h" & J) Then
MsgBox "Le véihcule existe déjà"
Rows(Lg).Delete Shift:=xlUp
Exit Sub
End If
Next J
End WithEt puis, un conseil : change les valeurs des propriétés "TabIndex" de tes ComboBox et fais les suivre, de 1 à 10 et 11 pour le bouton Valider.
C'est beaucoup plus agréable lors de la saisie car on va de l'un à l'autre dans l'ordre avec la touche Tabulation !
Merci pour le conseil des Combobox du coup, j'ai vu un autre bug lors de la saisie.
J'ai modifié le code et maintenant il marque systématiquement que le véhicule existe déjà :
Bonjour
Tu remets l'USF à zéro puis tu effectues un test sur le TextBox4 : il est forcément nul !
Tu dois faire cette remise à zéro après :
Dim c As Control
'For Each c In Me.Controls 'remise à zéro USF
'Select Case TypeName(c)
'Case "TextBox"
' c.Value = ""
'Case "CheckBox"
'c.Value = False
'Case "ListBox", "ComboBox"
'c.ListIndex = -1
'End Select
'Next c
Dim Maintenant As Date 'détecte les doublons
Dim J As Long
Dim Lg As Long
Dim Ws As Worksheet
With Sheets("Mouvements")
Lg = .Range("h" & Rows.Count).End(xlUp).Row
For J = Lg - 1 To 1 Step -1
If Me.TextBox4 = .Range("h" & J) Then
MsgBox "Le véihcule existe déjà"
Rows(Lg).ClearContents 'Delete Shift:=xlUp
Exit Sub
End If
Next J
End With
For Each c In Me.Controls 'remise à zéro USF
Select Case TypeName(c)
Case "TextBox"
c.Value = ""
Case "CheckBox"
c.Value = False
Case "ListBox", "ComboBox"
c.ListIndex = -1
End Select
Next c
End Sub
oups bien sur quelle nouille, c'est le manque de sommeil
Dans ce sens ça marche impecc.
Merci pour ton aide.