Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Basculer entre TextBox et ComboBox

9 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'aimerais selon les occurrences trouv=E9es, basculer entre l'affichage du=
r=E9sultat trouv=E9 dans un TextBox ou un ComboBox

-Si on trouve une seule occurrence :
On affiche dans le TextBox et on cache le ComboBox

-Si plusieurs occurrences trouv=E9es :
On remplit le ComboBox et on masque le TextBox.


http://www.cjoint.com/c/ELfxhqY5Utz

Merci d'avance.

9 réponses

Avatar
Jacky
Bonjour Apitos,
-Si plusieurs occurrences trouvées



Dans l'exemple donné
1- La recherche par le n° ne trouvera jamais plusieurs occurences dans
la colonne A, puisque celle ci est(doit) être unique.
2- Ceci est eronée
X = Application.Match(Range([A2], [A65000].End(xlUp)), Vlr, 0)

Pour debuter
:;)
Pour la "recherche unique" par le numero par "un texbox", la procédure
pourrait ressembler à ceci:
'------------
Private Sub BtnRechercher_Click()
Dim X As Long, Vlr As Long
Vlr = TextBox1.Value
If IsNumeric(Application.Match(Vlr, Range("A2:A" & Range("A" &
Rows.Count).End(xlUp).Row), 0)) Then
'Si on trouve une seule occurrence
'On remplit le TextBox et on cache le ComboBox
ComboBox1.Visible = False
TextBox1.Visible = True
X = Application.Match(Vlr, Range("A2:A" & Range("A" &
Rows.Count).End(xlUp).Row), 0) + 1
TextBox2.Value = Range("C" & X)
TextBox3.Value = Range("B" & X)
Else
MsgBox "Numéro inexistant", 64, "Recherche"
End If
End Sub
'-------------
Comme les numeros sont uniques cela pourrait être aisément remplacé par
un ComboBox et faire la recherche par le nom qui remplit un ComboBox si
ce nom est dupliqué.
A toi de voir..

--
Salutations
JJ

Apitos a exposé le 06/12/2015 :
Bonjour à tous,

J'aimerais selon les occurrences trouvées, basculer entre l'affichage du
résultat trouvé dans un TextBox ou un ComboBox

-Si on trouve une seule occurrence :
On affiche dans le TextBox et on cache le ComboBox

-Si plusieurs occurrences trouvées :
On remplit le ComboBox et on masque le TextBox.


http://www.cjoint.com/c/ELfxhqY5Utz

Merci d'avance.
Avatar
Apitos
Bonjour Jacky,

Merci pour l'astuce.

Voila un nouveau code avec à la base une recherche sur les noms des titul aires des numéros :

http://www.cjoint.com/c/ELgvrY2PMfN
Avatar
Apitos
Bonjour,

Voila le code :

'----------------------------

Private Sub BtnRechercher_Click()
Dim Vlr As Long, Tit As String
Dim Cel As Range, xC As Long, xTc As Long

Vlr = TextBox1.Value

If IsNumeric(Application.Match(Vlr, Range("A2:A" & Range("A" & Rows.Cou nt).End(xlUp).Row), 0)) Then
xC = Application.Match(Vlr, Range("A2:A" & Range("A" & Rows.Count ).End(xlUp).Row), 0) + 1
Tit = Range("B" & xC)
xTc = Application.CountIf(Range("B2:B" & Range("B" & Rows.Count). End(xlUp).Row), Tit)
If xTc = 1 Then
'Si on trouve une seule occurrence
'On remplit le TextBox et on cache le ComboBox
ComboBox1.Visible = False
TextBox2.Visible = True
ComboBox2.Visible = False
TextBox4.Visible = True
TextBox2.Value = Range("A" & xC)
TextBox3.Value = Range("B" & xC)
TextBox4.Value = Range("C" & xC)
ElseIf xTc > 1 Then
ComboBox1.Visible = True
TextBox2.Visible = False
ComboBox2.Visible = True
TextBox4.Visible = False

Alim_Combo 1, Tit
Alim_Combo 2, Tit
End If
Else
MsgBox "Numéro inexistant", 64, "Recherche"
End If
End Sub
'-------------

Private Sub ComboBox1_Change()
Me.TextBox3 = ""
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Me.TextBox3 = Range("B" & Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1 ))
End Sub
Private Sub ComboBox2_Change()
Me.TextBox3 = ""
If Me.ComboBox2.ListIndex = -1 Then Exit Sub
Me.TextBox3 = Range("B" & Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1 ))
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub


Private Sub Alim_Combo(CbxIndex As Integer, Optional Titulaire As Variant)
Dim j As Integer
Dim obj As Control

'Définit le ComboBox à remplir
Set obj = Me.Controls("ComboBox" & CbxIndex)
'Supprime les anciennes données
obj.Clear
For Each c In Range([B2], [B65000].End(xlUp))

If c Like Titulaire Then
If CbxIndex = 1 Then
obj.AddItem c.Offset(0, -1)
Else
obj.AddItem c.Offset(0, 1)
End If
obj.List(obj.ListCount - 1, 1) = c.Row
End If
Next c
obj.ListIndex = 0
End Sub
Private Sub UserForm_Initialize()
TextBox1.Visible = True
With ComboBox1
.Visible = False
.ColumnCount = 2
.ColumnWidths = "-1;0"
.ListRows = 0
End With
With ComboBox2
.Visible = False
.ColumnCount = 2
.ColumnWidths = "-1;0"
.ListRows = 0
End With
End Sub

'----------------------------
Avatar
Jacky
Bonjour Apitos,

Je ne saisie pas la finalité de ce que tu cherches à faire....
Une dernière proposition ici
http://www.cjoint.com/c/ELiqBpSGCZh
Avatar
Apitos
Bonjour Jacky et merci pour l'exemple joint (Il y a de quoi apprendre)

Je ne saisie pas la finalité de ce que tu cherches à faire....



Comme la liste des numéros peut aller jusqu'à 8000 numéros ou plus (N uméros de téléphone), j'avais besoin de rechercher par numéro pour consulter les donnés en relation avec, notamment son titulaire.

Maintenant si on veut vérifier, pour le deuxième cas, ou plusieurs num éros appartiennent à une même personne, on aura besoin d'ajouter a la recherche du numéro une recherche par titulaire d'où la nécessité d'afficher les numéros communs pour une seule personne dans un ComboBox a u lieu d'un TextBox réservé à l'affichage d'un seul numéro.

J'espère avoir bien expliqué ma demande.
Avatar
Jacky
Re,
J'espère avoir bien expliqué ma demande.



Adapte ceci
http://www.cjoint.com/c/ELloOpnNn5h
Avatar
Apitos
Bonjour jacky,

J'ai essayé d'adapter le code.

Puisque les numéros de téléphone sont uniques, je n'ai pas utiliser l e filtre avancé sur les numéros.

Voila ou j'en suis, mais ça n'a pas encore fonctionner :

'-------------
Private Sub ComboBox1_Change()
Dim a(), b()
Application.ScreenUpdating = False
' -- On ne declenche l'évenement Change
' -- que si la longueur du ComboBox à atteint 11 caractères
If Me.ComboBox1 = "" Or Len(Me.ComboBox1.Value) < 11 Then Exit Sub

' On travaille sur la feuille Feuil1
With Feuil1
.Activate

'-- On filtre par le numéro de téléphone contenu dans ComboBo x1
.Range("A1").AutoFilter Field:=1, Criteria1:=Me.ComboBox1.Value

'-- Enregistrement du résultat du filtre dans le tableau a
a = .Range("a2:c" & .Cells(.Rows.Count, 2).End(xlUp).Row) _
.SpecialCells(xlCellTypeVisible).Value

MsgBox "Titulaire : " & a(1, 2)
'-- Vérification de l'existance du même titulaire pour d'autres numéros
.Range("A1").AutoFilter Field:=1, Criteria1:=a(1, 2) 'Me.Com boBox1.Value
'-- Enregistrement du résultat du filtre dans le tableau b
b = .Range("a2:c" & .Cells(.Rows.Count, 2).End(xlUp).Row) _
.SpecialCells(xlCellTypeVisible).Value

'-- Affectation du résultat obtenu dans le ComboBox2
Me.ComboBox2.List = b

'-- Affichage du resulat dans le formulaire
Me.Label2.Caption = "Résultat= " & UBound(b) - 1 & IIf(UBound (b) - 1 > 1, " Titulaires trouvés", " Titulaire trouvé")

'-- Si le tutilaire trouvé à plusieurs numéros de télépho ne
If UBound(b) - 1 > 1 Then
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox3 = ""

'-- On affiche le ComboBox2
Me.ComboBox2.Visible = True
Else
'-- Sinon on remplit les TextBox dans l'ordre
On Error Resume Next
If Err = 0 Then
Me.TextBox1 = [plage].SpecialCells(xlCellTypeVisible)(1)
Me.TextBox2 = [plage].SpecialCells(xlCellTypeVisible)(2)
Me.TextBox3 = [plage].SpecialCells(xlCellTypeVisible)(3)

'-- Et on masque le ComboBox2
Me.ComboBox2.Visible = False
End If
On Error GoTo 0
End If
End With
End Sub
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'-- Procédure pour formater la saisie dans ComboBox1
'-- Sous forme "0# ## ## ##"
ComboBox1.MaxLength = 12
Select Case Len(ComboBox1)
Case 2, 5, 8 ', 11
ComboBox1 = ComboBox1 & Chr(32)
End Select
End Sub

'-------------
Avatar
Jacky
Re..
Recherche par numéro OU par nom ;o)
http://www.cjoint.com/c/ELmqx7iiwbh

--
Salutations
JJ

Apitos a exposé le 12/12/2015 :

'-------------
Avatar
Apitos
Re,

Recherche par numéro OU par nom ;o)
http://www.cjoint.com/c/ELmqx7iiwbh



Merci pour le nouveau fichier.

Je vais essayer de l'adapter :))

Je tiens à préciser que la colonne A ne contiendra jamais de doublons d es numéros.

Pour les titulaires de plusieurs numéros différents se sont des clients publiphones.

--------------
Cordialement