Formulaire & Recherche VBA

Bonjour,

Je viens demander de l'aide ici pour un soutiens sur mon code s'il vous plait.

J'ai effectué un tableau de répertoire botanique, il est composé d'un tableau, d'un formulaire pour insérer une nouvelle espèce et d'un système de recherche.

Le problème que j'ai c'est que certains code ne fonctionne pas et je ne comprends, et le deuxième étant relativement novice la dessus même si j'essaie de me débrouiller seul car c'est mieux, je n'arrive pas à créer certains code.

-Dans Recherche Botanique, le deuxième filtre de recherche n'est pas pris en compte et je ne sais pas ou j'ai fait l'erreur...

-Le bouton que j'ai fait intitulé "Aller sur la ligne sélectionné", je vous avoue que je ne sais pas comment le construire, sur excel rien de bien compliqué ou même un bouton qui active une cellule j'y arrive, mais effectuer cette opération depuis un userform sur la liste qui s’affiche dessous je bute...

-Pour le deuxième bouton, Ajouter une espèce, y'a plusieurs erreur et pareil je comprends pas. Je trouve une erreur quand j'écris dans les cases et que je fais insérer

-Pour le deuxième souci, j'ai essayé de faire un bouton bloqué s'y on indique pas le nom Scientifique, mais dès que je commence à mettre une lettre ça bug et le bouton n'est pas bloqué de base :/

Si vous avez des idées la dessus je suis vraiment tout ouïe, en espérant d'avoir été claire au mieux

Je vous remercie d'avance

Bonjour,

déjà une chose à modifier dans votre user recherche
remplacez le code

Function show_data_in_listbox()
....
end sub

par celui ci-dessous

Private Sub show_data_in_listbox()
'Activer la visibilité du tableau dans la liste
With Me.ListBox1
    .ColumnCount = 12
    .ColumnWidths = "90;90"
    .List = Range("TRepBotanique").ListObject.DataBodyRange.Value
End With
End Sub

-Dans Recherche Botanique, le deuxième filtre de recherche n'est pas pris en compte et je ne sais pas ou j'ai fait l'erreur...

Si je comprends vous recherchez d'abord le mot scientifique puis le mot français ou uniquement un des deux ?

Merci pour votre réponse et votre temps !

J'ai effectué le changement, il est effectivement loin d'être pareil...

Je vous avoue que je sais pas quel est le mieux, si je fais soit l'un soit l'autre, le plus adapté c'est soit on effectue une recherche du nom scientifique si on connais et si on connait pas on le cherche en français

J'avais pas vu cela comme ça sur le moment et c'est mieux, un peu bizarre de faire une recherche en intégrant le scientifique et le français étant donné que c'est la même chose en soit

En vous remerciant

re,

Je vous avoue que je sais pas quel est le mieux, si je fais soit l'un soit l'autre, le plus adapté c'est soit on effectue une recherche du nom scientifique si on connais et si on connait pas on le cherche en français

Ok faites ceci dans votre userform recherche

1. Tout au dessus des codes ajoutez ceci (donc en première ligne !)

Dim encours As Boolean

2. Ajoutez ce code pour la recherche en textbox nom scientifique

Private Sub TextBox1_Change()
Dim i As Integer

If encours = True Then Exit Sub
encours = True
TextBox2 = vbNullString
If TextBox1 = vbNullString Then
    ListBox1.Clear
    Call show_data_in_listbox
End If

For i = ListBox1.ListCount - 1 To 0 Step -1
    If Not ListBox1.List(i, 0) Like "*" & TextBox1.Value & "*" Then ListBox1.RemoveItem (i)
Next i
encours = False
End Sub

3. Ajoutez ce code pour la recherche en textbox nom Français

Private Sub TextBox2_Change()
Dim i As Integer

If encours = True Then Exit Sub
encours = True
TextBox1 = vbNullString
If TextBox2 = vbNullString Then
    ListBox1.Clear
    Call show_data_in_listbox
End If

For i = ListBox1.ListCount - 1 To 0 Step -1
    If Not ListBox1.List(i, 2) Like "*" & TextBox2.Value & "*" Then ListBox1.RemoveItem (i)
Next i
encours = False
End Sub

Après vous n'avez plus besoin de vos deux boutons à droite
La listbox reprendra les noms dans lesquels se trouve les ou la lettre indiquées
Le choix se fait dans une des deux textbox. Donc c'est soit l'un soit l'autre

Rem : si ok, vous pouvez supprimer les 4 codes Function filter_data_in_listbox(), Function filter_data_in_listbox_1(), Private Sub CommandRchNFr_Click() et Private Sub CommandRchNScienti_Click() . Ils ne servent plus à rien

Re,

Cela fonctionne c'est vrai que c'est mieux comme ça, j'ai juste remarqué quelque chose que j'avais pas pensé, si je fais exprès de me planter sur l'orthographe, admettons tout à la fin, on doit tout effacer et re écrire, je sais pas si c'est normal, je comprends pas si on enlève juste la lettre en trop ou mauvais, pourquoi ça reprends pas en fonction des lettres correcte ?

En vous remerciant

si je fais exprès de me planter sur l'orthographe, admettons tout à la fin, on doit tout effacer et re écrire

Oui c'est normal.
dans le code textbox1_change, ajoutez cette ligne de code après TextBox2 = vbNullString -->

Call show_data_in_listbox

Faites de même dans le code Textbox2_change mais là juste après la ligne TextBox1 = vbNullString

Avec cet ajout, chaque changement dans la textbox va remettre la listbox complète... raison pour laquelle j'évitais cela dans le code initial

NB : Après je peux jeter un oeil sur le code de l'usf formulaire si vous voulez

Oh c'est génial comme ça ! :)

C'est déjà bien gentil à vous de prendre du temps, je ne compte pas vous le demander, c'est à moi de faire en fonction pas l'inverse. Si vous voulez me solutionner pour que je puisse voir de mes erreurs et défaut de non savoir faire, je suis votre disciple.

Encore une fois c'est seulement si vous avez du temps pour le deuxième user forme.

Avez vous une solution pour le bouton qui va sur la ligne sélectionné dans la liste dans l'userform recherche botanique ? Je ne vois pas trop comment je peux le construire celui ci s'il vous plait...

En vous remerciant

OK. Voici pour l'userform Formualaire

1. Ajoutez ce code qui va s'exécuter à l'ouverture du fichier

Private Sub UserForm_Initialize()
ComboCalcaire.List = Range("Tableau2").ListObject.DataBodyRange.Value
Call TextNScient_Change
End Sub

2. Ajoutez ce code pour effacer les données dans l'usf

Private Sub reset_all_controls() 'EFFACER donnees dans USF
Dim ctl As MSForms.Control

For Each ctl In Me.Controls
    Select Case TypeName(ctl)
        Case "TextBox": ctl.Text = vbNullString
        Case "ComboBox": ctl.ListIndex = -1
    End Select
Next ctl
End Sub

3. remplacez le code ci-dessous pour le bouton Effacer

Private Sub BtnEffDonn_Click()
'Efface les zones de texte et combo
Call reset_all_controls
End Sub

Faites un test et si ok, je vous donnerai la suite

REM Importante : Votre tableau dans la feuille RépertoireBotanique est au format structuré et contient des lignes vides. Vous devez jamais avoir de lignes vides dans un tableau au format structuré :
- Sélectionnez les cellules A181 à M211
- Click droite --> Supprimer --> Ligne de tableau (vous devez toujours voir l'option "ligne de tableau". Le cas échéant c'est que vous avez des cellules sélectionnées hors du tableau


Avez vous une solution pour le bouton qui va sur la ligne sélectionné dans la liste dans l'userform recherche botanique ? Je ne vois pas trop comment je peux le construire celui ci s'il vous plait...

EDIT : Que dois faire ce bouton ? Aller sur la ligne sélectionnée de la listbox dans le tableau de la feuille répertoire ?
Si oui, est-ce la colonne A Famille peut avoir des doublons ?

Ah oui effectivement je n'avais pas fait attention qu'il y avait des lignes avec aucune données, j'ai effectué le changement et je prends note de cette précision.

Je vous avoue qu'il y a quelque chose qui me frustre quelque peu, je sais pas ce que j'ai pu faire pour que cela arrive car cela fonctionné pour la macro d'ouverture du formulaire via le bouton, mais la actuellement je ne vois pas ce que pourrait avoir le code :/

Pouvez vous juste regarder la commande Show pour ouvrir le formulaire et me dire où cela coincé s'il vous plait

En vous remerciant

je sais pas ce que j'ai pu faire pour que cela arrive car cela fonctionné pour la macro d'ouverture du formulaire via le bouton, mais la actuellement je ne vois pas ce que pourrait avoir le code :/

Simplement que votre bouton Effacer données s'appelle "BtnEffDonn" alors que dans le code Private Sub TextNScient_Change(), vous l'appelez autrement.
Je ne vous avais pas donné le code à corriger. Le voici :

Private Sub TextNScient_Change()
'Active/Désactive le bouton d'insertion de données
If TextNScient <> "" Then
    BtnInsDonn.Enabled = True 'Active le bouton
Else
    BtnInsDonn.Enabled = False 'Désactive le bouton
End If
End Sub

Bonjour,

Je prends note pour ce code mais ce n'était pas celui ci qui me posait problème, car oui effectivement nous n'avons n'y avons pas vu

C'est le bouton sur Excel, pas dans le VBA ou dans les Userform, je n'ai pas pu tester et comprendre les codes que vous avez fait pour le Formulaire, car je ne peu pas l'ouvrir avec le bouton sur Excel et je ne comprends pas ce qui s'est passé...

Je vous envoie ça pour que ce soit plus simple

image image

En vous remerciant

Bonjour

cela ne sert à rien de me montrer la vue. Si vous avez une erreur à l'ouverture de l'usf, le code reviendra automatiquement sur la ligne en jaune

Quel est le nom de l'USF ? Ici j'ai "Formulaire" comme nom

image

Je prends note pour ce code mais ce n'était pas celui ci qui me posait problème,

Si ! dans votre dernier fichier posté c'est le souci. Donc vérifiez le nom de votre Bouton "Insérer les données" dans l'usf qui doit être ceci --> BtnInsDonn

Ensuite vérifiez aussi dans le gestionnaire de noms que vous avez toujours bien le nom Tableau2 pour les infos en colonne G de la feuille base donnée

C'était simplement pour vous montrer de quoi je parlais, j'ai trouvé plus simple de vous faire des screens

l'userform c'est bien Formulaire, mais le bouton associé ne l'ouvre plus et c'est ça que je ne comprends pas...

Le code est identique à l'autre qui ouvre RepBotanique, mise à par que le seul changement "RepBotanique.Show"

En vous remerciant

l'userform c'est bien Formulaire, mais le bouton associé ne l'ouvre plus et c'est ça que je ne comprends pas..

Dans l'usf vous avez bien ce code --> Private Sub UserForm_Initialize()

Je suis vraiment navré d'être un poids comme tel...

J'ai bien ce code la que vous m'avez envoyé

Je suis entrain de revoir tous les codes envoyé et de comparer avec l'autre user form

En vous remerciant

ben redonnez moi le fichier ce sera plus simple

C'est ce que j'avais fait, vous l'avez surement pas reçu alors

Mais recopier les codes envoyé et ça remarche, alors qu'il me m'était l'erreur sur le module est non sur les codes userform "Formulaire"

Effacer les données marche

Mettre obligatoirement un mot dans le text box nom scientifique marche

Je suis navré de cette interruption...

Il reste ce code pour le formulaire

Private Sub BtnInsDonn_Click()
'Ajoute la nouvelle donnée renseigné dans le formulaire

Sheets("RépertoireBotanique").Active
Range("A12").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell = TextFamille.Value
ActiveCell.Offset(0, 1).Value = TextNScient
ActiveCell.Offset(0, 2).Value = TextNFr
ActiveCell.Offset(0, 3).Value = TextLux
ActiveCell.Offset(0, 4).Value = TextMSchOrg
ActiveCell.Offset(0, 5).Value = TextConduc
ActiveCell.Offset(0, 6).Value = TextRetEau
ActiveCell.Offset(0, 7).Value = TextPH
ActiveCell.Offset(0, 8).Value = TextTerreau
ActiveCell.Offset(0, 9).Value = TextNPK
ActiveCell.Offset(0, 10).Value = TextEngrais
ActiveCell.Offset(0, 11).Value = ComboCalcaire

MsgBox "Votre plante a bien été ajouter à votre base de données", vbOKOnly + vbInformation, "Confirmation"

End Sub

Après relecture, je n'avais pas vu que vous me posez une question

"EDIT : Que dois faire ce bouton ? Aller sur la ligne sélectionnée de la listbox dans le tableau de la feuille répertoire ?
Si oui, est-ce la colonne A Famille peut avoir des doublons ?"

Je ne sais pas si c'est possible mais au moment ou on effectue une recherche, cela nous donne les différentes lignes trouvé. Et en cliquant sur la ligne souhaité dans la liste qui ce trouve dans userform, cela nous amène sur la ligne en question dans le tableau

En vous remerciant

re

NB : Merci d'utiliser les balises de code lorsque vous postez un code en cliquant sur l'icone </> dans la barre de menu et en collant votre code dans la fenetre


Je ne sais pas si c'est possible mais au moment ou on effectue une recherche, cela nous donne les différentes lignes trouvé. Et en cliquant sur la ligne souhaité dans la liste qui ce trouve dans userform, cela nous amène sur la ligne en question dans le tableau

Je vous ai posé une question au sujet des doublons à laquelle vous ne répondez pas. donc je considère que pas de doublons en colonne A

Allez dans l'usf, remplacez le code par celui ci-dessous

Private Sub CommandLgnSelect_Click()
Dim lig As Integer
Dim TS As ListObject

Set TS = Range("TRepBotanique").ListObject

With TS
    lig = .ListColumns(1).Range.Find(ListBox1.List(ListBox1.ListIndex, 0), LookIn:=xlValues, lookat:=xlWhole).Row - .HeaderRowRange.Row
    .ListRows(lig).Range.Select
End With
Unload Me
End Sub

Dans votre USF juste avant Dim encours as boolean, rajoutez ceci

Option Compare Text

Voici le code pour ajouter les données

Private Sub BtnInsDonn_Click()
'Ajoute la nouvelle donnée renseigné dans le formulaire
Dim lig As Integer
Dim TS As ListObject

Set TS = Range("TRepBotanique").ListObject

With TS
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    Else: .ListRows.Add: lig = .ListRows.Count
    End If
    With .DataBodyRange
        .Item(lig, 1) = TextFamille.Text
        .Item(lig, 2) = TextNScient.Text
        .Item(lig, 3) = TextNFr.Text
        .Item(lig, 4) = TextLux.Text
        .Item(lig, 5) = TextMSchOrg.Text
        .Item(lig, 6) = TextConduc.Text
        .Item(lig, 7) = TextRetEau.Text
        .Item(lig, 8) = TextPH.Text
        .Item(lig, 9) = TextNPK.Text
        .Item(lig, 10) = TextEngrais.Text
        .Item(lig, 11) = ComboCalcaire.Text
    End With
End With    
MsgBox "Votre plante a bien été ajoutée à votre base de données", vbOKOnly + vbInformation, "Confirmation"
Call reset_all_controls
End Sub

D'accord merci, je ne savais pas faire pour insérer un code

Il ne pourra pas y avoir de doublons, je n'ai pas fait attention que vous avez évoqué ce mot

A quoi sert le code ci dessous s'il vous plait ?

Option Compare Text

re

A quoi sert le code ci dessous s'il vous plait ?

Elle sert à ce que le code ne fasse pas de différence entre majuscule et minuscule
Dans les textboxes de recherche, jusqu'à présent si vous tapiez un A, la listbox était triée mais pas avec un a minuscule. Avec cette instruction le code ne fera pas de différence

Il ne pourra pas y avoir de doublons, je n'ai pas fait attention que vous avez évoqué ce mot

Ok alors tout devrait être bon si vous avez suivi mes commentaires

Si terminé, pensez à

Crdlt

Rechercher des sujets similaires à "formulaire recherche vba"