Bonjour à tous,
Ce post sera le dernier, je l'espère concernant le développement d'un formulaire de saisie de noms d'espèce pour faciliter la vie des naturalistes et rester à jours avec les normes d'écritures ICBN (mise en forme des noms d'espèces et d'auteurs) et INPN (versions TAXREF).
Mon code actuel me permet d'agir sur la mise en forme du texte (italique, balise et couleur) et de faire une saisie intuitive par recherche multimots (exemple j'écris "ab al" ou "ab al pour faire apparaitre tous les noms d'espèces comportant ces lettres comme "Abies alba susp alba nom d'auteur" J'ai intégré un code qui trie et sans doublons et depuis impossible d'utiliser la saisie intuitive par recherche mutlimots.
Code proposé par M.Boisgontier (ci-dessous) pour la saisie intuitive type Ab Al pour Abies alba :
Code permettant de trier et avoir une liste sans doublon
Mon formulaire comporte une combobox1 qui selon l'espèce saisie va afficher des correspondances dans différents texbox (voir fichier version saisie avec...). Quand j'intègre les codes de tries et sans doublons (fichier version sans saisie) ça ne fonctionne plus, je suis obligé d'enlever les codes de saisie intuitive et les codes liés permettant d'afficher une valeur dans les textbox.
Je vois que le problème et au niveau de la plage de données de la liste de la combobox1 et des codes utilisés basés sur a et temp ou choix1. Je n'arrive pas à adapter tous cela.
Si vous avez des idées sur le pourquoi du comment je vous en remercie d'avance. J'ai fait un certain nombre de manipulations et tests sans résultats...
Ce post sera le dernier, je l'espère concernant le développement d'un formulaire de saisie de noms d'espèce pour faciliter la vie des naturalistes et rester à jours avec les normes d'écritures ICBN (mise en forme des noms d'espèces et d'auteurs) et INPN (versions TAXREF).
Mon code actuel me permet d'agir sur la mise en forme du texte (italique, balise et couleur) et de faire une saisie intuitive par recherche multimots (exemple j'écris "ab al" ou "ab al pour faire apparaitre tous les noms d'espèces comportant ces lettres comme "Abies alba susp alba nom d'auteur" J'ai intégré un code qui trie et sans doublons et depuis impossible d'utiliser la saisie intuitive par recherche mutlimots.
Code proposé par M.Boisgontier (ci-dessous) pour la saisie intuitive type Ab Al pour Abies alba :
VB:
Dim choix1()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([B77:B124], Target) Is Nothing And Target.Count = 1 Then
choix1 = Application.Transpose(Sheets("bd").Range("liste").Value)
Me.ComboBox1.List = choix1
Me.ComboBox1.Height = Target.Height + 3
Me.ComboBox1.Width = Target.Width
Me.ComboBox1.Top = Target.Top
Me.ComboBox1.Left = Target.Left
Me.ComboBox1 = Target
Me.ComboBox1.Visible = True
Me.ComboBox1.Activate
Else
Me.ComboBox1.Visible = False
End If
End Sub
Private Sub ComboBox1_Change()
If Me.ComboBox1 <> "" Then
mots = Split(Trim(Me.ComboBox1), " ")
Tbl = choix1
For i = LBound(mots) To UBound(mots)
Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
Next i
Me.ComboBox1.List = Tbl
Me.ComboBox1.DropDown
End If
End Sub
Private Sub ComboBox1_click()
ActiveCell = Me.ComboBox1
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(1).Select
End If
End Sub
Code permettant de trier et avoir une liste sans doublon
Code:
Private Sub UserForm_Initialize()
Me.ComboBox1.Clear
Set f = Sheets("BD")
Set MonDico = CreateObject("Scripting.Dictionary")
a = f.Range("z3:z" & f.[z65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then MonDico(a(i, 1)) = ""
Next i
'--avec tri
temp = MonDico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2) ' l'antislah \ donne la partie entière d'une division
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
Mon formulaire comporte une combobox1 qui selon l'espèce saisie va afficher des correspondances dans différents texbox (voir fichier version saisie avec...). Quand j'intègre les codes de tries et sans doublons (fichier version sans saisie) ça ne fonctionne plus, je suis obligé d'enlever les codes de saisie intuitive et les codes liés permettant d'afficher une valeur dans les textbox.
Je vois que le problème et au niveau de la plage de données de la liste de la combobox1 et des codes utilisés basés sur a et temp ou choix1. Je n'arrive pas à adapter tous cela.
Si vous avez des idées sur le pourquoi du comment je vous en remercie d'avance. J'ai fait un certain nombre de manipulations et tests sans résultats...