Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.
 

Eric C

XLDnaute Barbatruc
Ah - Ok - Donc, d'après Patrick, j'ai eu ce résultat identique parce que ma CombobBox était alimentée via RowSource.
@patrick - -=-=- Tant que je "biaise" , je peux rester ?? -=-=- Et pourquoi ne devrait elle plus exister cette façon d'alimenter le Cbo ?
 

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
 

JM27

XLDnaute Barbatruc
bonjour
Ma contribution
On peut simplifier si l'on s'assure que les valeurs saisies sont numériques exclusivement
A tester
 

Pièces jointes

  • essai.xlsm
    23.5 KB · Affichages: 5
Dernière édition:

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,
 

Eric C

XLDnaute Barbatruc
Bonsoir le fil

@Bounty57 : content que tu ais trouvé ce que tu cherché. Toutefois, si tu regardes le post #3, la réponse (toute simple) était déjà donnée .... Ajout de données si elle ne fait pas partie de la liste des items sinon suppression....
@+ Eric c
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…