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 subpar 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 Boolean2. 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 Sub3. 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 SubAprè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_listboxFaites 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 Sub2. 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 Sub3. 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 SubFaites 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 SubBonjour,
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
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
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 SubDans votre USF juste avant Dim encours as boolean, rajoutez ceci
Option Compare TextVoici 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 SubD'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 Textre
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