OVH Cloud OVH Cloud

Anti-doublon et textbox

6 réponses
Avatar
Florian
Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec cette
procédure, il refuse de valider le userfrom, car la valeur est déjà dans la
feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" & vbNewLine &
_
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If

6 réponses

Avatar
LSteph
Bonjour,

une solution peut être

dans la feuille en A3:A5000
Validation Personnalisé
la formule:
=NB.SI($a$3:$a$5000;a3)<2

'lSteph

"Florian" a écrit dans le message de news:

Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec
cette procédure, il refuse de valider le userfrom, car la valeur est déjà
dans la feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" & vbNewLine
& _
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If



Avatar
Florian
Bonjour LSteph
Le problème est que la saisie se fait sur le userform et je souhaiterai
qu'avant la validation l'utilisateur soit prévenu.
Merci pour l'aide apportée
Flo riant

"LSteph" a écrit dans le message de news:

Bonjour,

une solution peut être

dans la feuille en A3:A5000
Validation Personnalisé
la formule:
=NB.SI($a$3:$a$5000;a3)<2

'lSteph

"Florian" a écrit dans le message de news:

Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec
cette procédure, il refuse de valider le userfrom, car la valeur est déjà
dans la feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" & vbNewLine
& _
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If







Avatar
Jacky
Bonjour,

Une piste peut-être
'---------
nom = textbox1.Value
If Application.CountIf(Worksheets("Feuil1").Range("a3:a5000"), "=" & nom) > 1 Then
MsgBox "Saisie de doublon"
End If
'----------
Salutations
JJ


"Florian" a écrit dans le message de
news:
Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec
cette

procédure, il refuse de valider le userfrom, car la valeur est déjà dans
la

feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" & vbNewLine
&

_
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If




Avatar
Florian
Bonjour Jacky
je te remercie pour ta syntaxe qui est plus lisible que la mienne
qui d'ailleurs ne provient pas de moi ;-)
Je vais contourner le pb en mettant simplement if activecell ="" then etc.
Merci pour l'aide apportée
Flo riant

"Jacky" a écrit dans le message de news:

Bonjour,

Une piste peut-être
'---------
nom = textbox1.Value
If Application.CountIf(Worksheets("Feuil1").Range("a3:a5000"), "=" & nom)
1 Then
MsgBox "Saisie de doublon"


End If
'----------
Salutations
JJ


"Florian" a écrit dans le message de
news:
Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec
cette

procédure, il refuse de valider le userfrom, car la valeur est déjà dans
la

feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" &
vbNewLine
&

_
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If









Avatar
Hervé
Bonjour Florian,
En utilisant une collection, colle tout le code dans le module de ta Form et
adapte ce qui ne te convient pas :
'-------------------
Dim Col As New Collection 'en tête du module de la Form

Private Sub UserForm_Initialize()
Dim Plage As Range
Dim I As Long

Set Plage = Range([A1], [A65536].End(3))
For I = 1 To Plage.Count
'au cas où il y a malgré tout des doublons
'si la liste est saine, supprime le gestionnaire d'erreur
On Error Resume Next
Col.Add Plage(I), CStr(Plage(I))
If Err.Number <> 0 Then
MsgBox "Un doublon se trouve dans la liste " & _
"dans la cellule A" & I
'colore en rouge les doublons
Range("A" & I).Interior.ColorIndex = 3
End If
Next I

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set Col = Nothing
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
If .Value <> "" Then
'ajoute la valeur à la collection
'si existe, une erreur est générée
On Error Resume Next
Col.Add .Value, .Value
If Err.Number <> 0 Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" &
vbCr _
& "Le numéro * " & .Value & " * apparaît déjà dans le
" _
& "programme !", vbCritical, _
" Numéro déjà saisi !"
Cancel = True 'laisse le focus sur le textbox
Else
'ajout de la valeur à la fin de la liste
'en colonne A (à adapter !)
[A65536].End(3)(2) = .Value
End If
End If
End With

End Sub
'----------------

Hervé.

"Florian" a écrit dans le message de news:

Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec
cette

procédure, il refuse de valider le userfrom, car la valeur est déjà dans
la

feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" & vbNewLine
&

_
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If




Avatar
Florian
Merci beaucoup Hervé
c'est vraiment très intéressant
je te remercie beaucoup
bonne soirée
Flo riant

"Hervé" a écrit dans le message de news:
%
Bonjour Florian,
En utilisant une collection, colle tout le code dans le module de ta Form
et
adapte ce qui ne te convient pas :
'-------------------
Dim Col As New Collection 'en tête du module de la Form

Private Sub UserForm_Initialize()
Dim Plage As Range
Dim I As Long

Set Plage = Range([A1], [A65536].End(3))
For I = 1 To Plage.Count
'au cas où il y a malgré tout des doublons
'si la liste est saine, supprime le gestionnaire d'erreur
On Error Resume Next
Col.Add Plage(I), CStr(Plage(I))
If Err.Number <> 0 Then
MsgBox "Un doublon se trouve dans la liste " & _
"dans la cellule A" & I
'colore en rouge les doublons
Range("A" & I).Interior.ColorIndex = 3
End If
Next I

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set Col = Nothing
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
If .Value <> "" Then
'ajoute la valeur à la collection
'si existe, une erreur est générée
On Error Resume Next
Col.Add .Value, .Value
If Err.Number <> 0 Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" &
vbCr _
& "Le numéro * " & .Value & " * apparaît déjà dans
le
" _
& "programme !", vbCritical, _
" Numéro déjà saisi !"
Cancel = True 'laisse le focus sur le textbox
Else
'ajout de la valeur à la fin de la liste
'en colonne A (à adapter !)
[A65536].End(3)(2) = .Value
End If
End If
End With

End Sub
'----------------

Hervé.

"Florian" a écrit dans le message de news:

Bonjour.
J'ai un textbox qui envoie des valeurs dans une feuille de calcul
dans la colonne A3:A5000 les valeurs du textbox1
je souhaite que si une valeur se trouve déjà dans la plage A3:A5000 un
msgbox se lance afin de prévenir l'utilisateur que la valeur a déjà été
saisi.
Mais le pb est que parfois je dois modifier le userform, et alors avec
cette

procédure, il refuse de valider le userfrom, car la valeur est déjà dans
la

feuille.
Comment dois-je m'y prendre ?
Merci beaucoup
Flo riant

If TextBox1 <> "" Then
If IsNumeric(Application.Match(TextBox1.Value, [Ref!A3:A5000], 0)) Then
MsgBox "Vous ne pouvez pas saisir 2 fois le même numéro !" &
vbNewLine
&

_
"Le numéro * " & TextBox1.Value & " * apparaît déjà dans le
programme !", vbCritical, _
" Numéro déjà saisi !"
TextBox1.SetFocus
Exit Sub
End If
End If