Microsoft 365 Eviter la création d'un doublon lors de la saisie dans un Textbox

Bounty57

XLDnaute Nouveau
Bonjour,
J'ai une question afin d'éviter un doublon lors de la création de projet.
Je m'explique.
Dans l'Userform, j'ai un Textbox dans lequel je renseigne le numéro de projet
Ensuite, j'ai un bouton de commande qui doit m'insérer dans la colonne 1 (sur la dernière ligne vide) le projet si il n'existe déjà pas dans la colonne 1
L'Userform est vierge car je n'ai pas voulu faire n'importe quoi....
Merci pour votre aide.
 

Pièces jointes

  • essai.xlsm
    12.9 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
Eric tu biaise le résultat là
tu rempli ta list par rowsource qui a le meme phenomene qu'avec evaluate
en quelque sorte c'est c'est du long/string)
rempli ta list avec .list ou additem tu verra
VB:
Private Sub Ini()
Dim L As Integer
Dim Plage As String

L = Sheets("Feuil1").Range("A65536").End(xlUp).Row
Plage = Sheets("Feuil1").Range("A2:A" & L).Address
'ComboBox1.RowSource = "Feuil1!" & Plage
ComboBox1.List = Range(Plage).Value

End Sub
perso je pense que rowsource ne devrait plus exister
 

Dranreb

XLDnaute Barbatruc
toujours les convertir en textes", en quoi cela interfère t'il sur le fait que Dranreb saisisse 4 et que le ComboBox lui affiche 456.
En cela que si on y tape "4" elle reconnait que c'est le début d'un poste de la List contenant le String "456" et le propose donc d'après les options habituelles des autre propriétés. En revanche elle ne le reconnaitrait pas s'il y avait à la place le Double 456 et ne le proposerait donc pas.
 

patricktoulon

XLDnaute Barbatruc
re
par ce qu'elle est très restrictive
une combo ou list box ne peut être modifiée dynamiquement si elle est alimenté par rowsource
hors la plus part du temps on tri on supprime les doublons on re liste etc etc.....
et ça c'est pas possible avec rowsource
essaie donc de faire un simple additem apèrs rowsource pour voir tu t en rendra compte par toi même
 

patricktoulon

XLDnaute Barbatruc
re
@JM27
fait moi péter ce stack de gestion d'erreur
l'object application a un membre(fonction) pour ça
VB:
Private Sub CommandButton1_Click()
    Dim MyVar As Long
    If Me.ComboBox1 = "" Then Exit Sub
    If IsNumeric(Me.ComboBox1) = True Then
        MyVar = Application.IfError(Application.Match(Val(ComboBox1), Worksheets("Feuil1").Range("A1:A65536").Value, 0), 0)
        If MyVar = 0 Then
            Sheets("Feuil1").Range("A" & Sheets("Feuil1").Range("A65536").End(xlUp).Row + 1) = CDbl(Me.ComboBox1)
            Me.ComboBox1.AddItem (Me.ComboBox1)
            Me.ComboBox1 = ""
        Else
            MsgBox "numéro doublonné"
            Me.ComboBox1 = ""
        End If
    End If
End Sub
c'est plus net;)
cela dit prendre un combo et coder dans l'event ce qu'elle peut faire nativement 🤔🤔🤔🤔🤔🤔
sert toi carrément d'un simple textbox alors avec ce code
 

patricktoulon

XLDnaute Barbatruc
@JM27
ben tiens tu m'a donné une idée tiens
voila l'auto sélection sans l'auto complétion ca va plaire a @Dranreb ça
l'auto sélection se fait uniquement si la chaine tapée corespond a la chaine ntiere d'un item et uniquement à ce moment là
vous connaissez la chanson après hein (if .listindex blablabla)
VB:
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim MyVar As Long
    If Me.ComboBox1 = "" Then Exit Sub
    If IsNumeric(Me.ComboBox1) = True Then
        MyVar = Application.IfError(Application.Match(Val(ComboBox1), Worksheets("Feuil1").Range("A1:A65536").Value, 0), -1)
        If MyVar > -1 Then ComboBox1.ListIndex = MyVar: ComboBox1.DropDown
    End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
allez je corrige je simplifie on reste dans la combobox je dropdown pour voir l'item auto selectionnée

purée celle là je vais la garder (la combo est en matchentrynone )

VB:
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim MyVar As Long, cmb, t()
    If Me.ComboBox1 = "" Then Exit Sub
    Set cmb = ComboBox1
    If IsNumeric(Me.ComboBox1) = True Then
        MyVar = Application.IfError(Application.Match(Val(ComboBox1.Value), ComboBox1.List, 0), -1)
        If MyVar > -1 Then ComboBox1.ListIndex = MyVar - 1: ComboBox1.DropDown
    End If
End Sub

Private Sub UserForm_Initialize()
  With Sheets("Feuil1")
  Me.ComboBox1.List = .Range("A2:A" & .Range("A65536").End(xlUp).Row).Value
End With
End Sub
purée celle là elle me plait 😂
 

Bounty57

XLDnaute Nouveau
bonjour
Ma contribution
On peut simplifier si l'on s'assure que les valeurs saisies sont numériques exclusivement
A tester
Bonsoir à vous tous,
C'est exactement la solution de JM27 que je cherchais à faire.
Merci encore à vous tous pour votre aide précieuse. Je ne pensais pas que ma question était aussi difficile....c'est pour cela que je bloquais :)
Bonne soirée à vous tous,
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 796
Membres
101 817
dernier inscrit
carvajal