XL 2019 Saisie naturaliste basée sur code private sub de liste intuitive

lusert

XLDnaute Junior
Bonjour Cher membres,

Cette fois je viens vers vous concernant mon souhait d'améliorer mes fiches de saisie naturaliste. Je m'explique lister des espèces sur feuille papier c'est long me suis donc inspiré d'une macro pour rechercher comme ça les noms d'espèces et au fur et à mesure que j'écrit un mot il apparait le nom d'espèces en question. Mon porblème est le suivant j'ai connaissance de deux macro, l'une pour l'autocomplétion et l'autre pour la suivi intuitive. J'aimerais fusionner ces deux macro pour le coté esthétique car ma macro complétion ici présente en image permet d'afficher un nom au fur à fur que les lettres sont écrites mais ils faut cliquer sur la fléche pour voir tous les mots commençant par ces lettres.

A l'opposé (image avec fond jaune) l'autre macro permet par sa saisie intuitive de réduire la liste en question au fur et à mesure que des lettres sont écrites et on voit directemen tla liste se réduire. Je souhaite donc fusionner ces deux macro pour avoir quand j'écrit un mot apparaitre dans ma cellule tout en visualisant la liste se réduire. Pensez-vous qu'il est possible de faire cette manipe ? J'ai essayé mais tous foire.
complétion.PNG
1587740322567.png




ps : macro complétion _ code vba_de ma feuille de saisie
Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A2:A16], Target) Is Nothing And Target.Count = 1 Then
a = Sheets("bd").Range("liste").Value
Me.ComboBox1.List = a
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()
ActiveCell.Value = Me.ComboBox1
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.ComboBox1.List = a
Me.ComboBox1.Activate
Me.ComboBox1.DropDown
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell.Offset(1).Select
End Sub

ps : macro complétion _ code vba d'un module1
Sub xx()
x = ActiveWindow.ScrollRow
y = Cells(ActiveWindow.ScrollRow, 1).Top
End Sub


ps : macro vba_ saisie intuitive de ma feuille de saisie sans module 1 juste en associant une combobox
Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A2:A10], Target) Is Nothing And Target.Count = 1 Then
Set f = Sheets("BD")
a = Application.Transpose(f.Range("A2:A" & f.[A65000].End(xlUp).Row))
Me.ComboBox1.List = a
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 <> "" And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
Me.ComboBox1.DropDown
End If
ActiveCell.Value = Me.ComboBox1
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.ComboBox1.List = a
Me.ComboBox1.Activate
Me.ComboBox1.DropDown
End Sub

Ah oui ! une dernière chose pensez vous qu'il soit utilise d'attribuer une macro pour cela (image ci-dessous)?
J'ai crée une liste toute simple depuis validation de donnée ou j'ai renseigné la feuille et je me demande si il ne serait pas plus simple comme avec ma macro intuitive ou avec une formule excel de permettre de voir la liste en entière vu qu'il y a que 6 champs à choisir pour la saisie (ça pourrait aider mes futurs stagiaire botaniste qui ne connaissent pas par coeur ces codes ?
1587741283273.png
Merci par avance pour vos idées :)
 
Dernière édition:

lusert

XLDnaute Junior
Voila donc le fichier avec mes modifications. J'ai élaborer d'autres listes sans macro pour saisir par exemple la commune et l'abondance/dominances des espèces.


J'ai ajouté à ma feuille saisie une macro saiise intuitive pour comparer à celle que tu as produite. En faisant les manipe j'ai supprimer ta macro sans le vouloir. La plupart des explications à ma feuille de saisie se trouve en page info.

J'ai donc préféré ne pas remettre ta macro qui saute des case pour ne pas faire plus de bêtises.
J'entends par "apparaît que un champ sur deux " que en cellule A1 de ton doc la liste apparait mais pas en A2 ainsi de suite, une cellule sur deux comporte la liste.

J'ai essayé dans tous les paragraphe de ta macro de trouver la formule qui fait ce sauf de ligne répétitif de 1 cellule sur 2 mais j'ai eu que des échec.
En tout cas ta macro reste top ! j'adore sa fonction de pouvoir se déplacer dans la liste ci-contre avec les flèche du bad et du haut :)
Même cette fonction je n'ai pas réussi à l'attribuer dans la macro du document que je te transmets ici présent.
1588092068262.png
 

Pièces jointes

  • FICHE_de_RELEVES_autremodedesaisie.xlsm
    838.4 KB · Affichages: 8

BrunoM45

XLDnaute Barbatruc
Bonsoir Lusert,

Voici ton fichier modifié comme il aurait dù être avec mon code ;)

Petit oubli de ma part et TRÈS important (malheureusement) désolé
il fallait changer la propriété MatchEntry de ta Combo sur None

Sinon ça marche sur toutes les cellules, tu peux faire ESC pour sortir du combo en plus

@+
 

Pièces jointes

  • FICHE_de_RELEVES_Autocomplétion+reduction.xlsm
    838 KB · Affichages: 9

lusert

XLDnaute Junior
Bonsoir Lusert,

Voici ton fichier modifié comme il aurait dù être avec mon code ;)

Petit oubli de ma part et TRÈS important (malheureusement) désolé
il fallait changer la propriété MatchEntry de ta Combo sur None

Sinon ça marche sur toutes les cellules, tu peux faire ESC pour sortir du combo en plus

@+

Trop top :)
Merci mille fois pour les solutions que tu as apporté à mon document
Maintenant j'ai trop hâte que le confinement soit fini pour le tester sur le terrain !

En ce moment j'élabore un fichier de synthèse des données saisie à l'aide de ta macro.
Ce deuxième document avance bien, la macro que j'ai élaboré s'emboite bien avec la plage de saisie de la feuille de relevé.

Je pense que j'aurais finalisé ce doc dans les prochaines jours comme ça je l'ajouterais à la conversation pour la clôturer. Je serais ravi que tu jette un coup d'oeil à ce futur doc complémentaire une fois que je l'aurais terminé pour avoir ton avis sur la structure de mon code vba ;)
 

lusert

XLDnaute Junior
Rebonjour BrunoM45, BOISGONTIER et le forum :)

Je commence a de mieux en mieux comprendre les fonctionnalité VBA et aujourd'hui grâce à vous deux j'ai pu encore améliorer mon fichier en fusionnant des parties des macro que vous m'aviez proposez. Je me retrouve maintenant avec une fiche de saisie tiptop mixant saisie intuitive (ex : fa syl pour afficher Fagus sylvatica, ou ex : Fagus et après en appuyant sur flèche du bas ou du haut j'affiche Fagus sylvatica, J'y ai ajouté un fonction mise en forme pour mettre ces nom d'espèces en italique et certain mot sans italique ( ex : Abies alba subsp. Alba).
J'y ai ajouté une fonction pour stopper le code vba private sub de la feuille Test, je peux donc écrire et annuler une saisie en cours si saisie hors de la plage de donnée B22 : B180 mais il faut que je clique deux fois sur la cellule ou que j'écrive puis d'appuyer sur la touche entrée pour afficher mes choix de liste et mon choix s'active mais une cellule plus bas
ex :
fra (début que j'ai écrit en B22)
fraxinus excelsior ( ce que j'ai choisi de faire apparaitre mais apparait en B23)

Voila le pense qu'il doit y avoir des erreurs de syntaxes dans ce code vba de la feuille 7 (Test).
En feuille 8 (test2) il y a le bon code mais sans l'arrêt du vba si je veux faire un annuler une saisie en cours

Es-ce-que vous pourriez m'éclairez sur ces étrangetés ?

Je vous remercie d'avance et à bientôt
 

Pièces jointes

  • FICHE_de_RELEVES_FINAL_02112020.xlsm
    525.5 KB · Affichages: 3

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
299 956
Messages
1 980 368
Membres
207 067
dernier inscrit
Miks57450