Problème affichage résultat de recherche d'un formulaire
Bonjour à tous et toutes. J'ai pas mal avancé dans mon petit programme de gestion de recettes mais je bloque sur un certain point.
Voici la situation: grâce à vous, j'ai pu créer un formulaire de recettes (issu d'un tableau excel) permettant de lister l'ensemble de recettes de mon tableau. Sur ces faits, j'ai créé un deuxième formulaire (pour l'instant non définitif) permettant de faire la recherche d'un ingrédient à partir d'une inputbox qui liste l'ensemble de mes recettes à partir de la méthode find et findnext. Ces résultats sont répertoriés dans un tableau de résultat que j'ai nommé tableau.
(A terme, je voudrais pouvoir sélectionner plusieurs ingrédients dans ma liste d'ingrédients déjà affichée mais je n'arrive pas là non plus mais je n'en suis pas encore là. Il faut déjà que çà fonctionne avec un ingrédient et on verra après pour la sélection multiple)
Ce que je n'arrive pas à faire, c'est à partir de ce deuxième formulaire, afficher mon formulaire principal et afficher les résultats de ce tableau dans les champs de ce formulaire principal (nommé liste_recettes).
Pour vérifier que mon tableau se remplit bien, j'ai mis des msgbox après la recherche et tout est noté correctement.
Pour visualiser mon formulaire principal à partir de mon formulaire de recherche j'utilise l'instruction liste_recettes.show
Je pensais qu'en mettant les instructions Liste_recettes.TextBox1.Text = Cells(tableau(ligne, 1)) et ainsi de suite j'arriverais à afficher les valeurs résultats de mon tableau dans le formulaire principal mais il ne m'affiche que le premier enregistrement de ma liste (puisque je fais une initialisation de mon formulaire avec la première recette de mon fichier excel trouvée) mais rien ne se passe de plus.
Enfin quand je fais quitter sur mon formulaire principal, j'ai le message d'erreur suivant:
"Appel de procédure ou argument incorrect (Erreur 5)"
Voici le code me permettant de faire ma recherche:
Private Sub Rechercher_Click()
Dim FoundCell As Range
Dim LastCell As Range
Dim FirstAddr As String
Dim ingrec As String
Dim ligne As Long
Dim tableau(0 To 3000, 0 To 5) As String
Dim wksht As Worksheet
Set wksht = Worksheets("Recettes")
With wksht.Range("B2:B3000")
Set LastCell = .Cells(.Cells.Count)
End With
ingrec = InputBox("Ingrédient recherché")
Set FoundCell = Range("B2:B3000").Find(what:=ingrec, after:=LastCell)
MsgBox ("suivant")
ligne = FoundCell.Row
tableau(ligne, 1) = Cells(ligne, 1)
tableau(ligne, 2) = Cells(ligne, 2)
tableau(ligne, 3) = Cells(ligne, 3)
tableau(ligne, 4) = Cells(ligne, 4)
tableau(ligne, 5) = Cells(ligne, 5)
If Not FoundCell Is Nothing Then
FirstAddr = FoundCell.Address
End If
Do Until FoundCell Is Nothing
Set FoundCell = Range("B2:B3000").FindNext(after:=FoundCell)
ligne = FoundCell.Row
tableau(ligne, 1) = Cells(ligne, 1)
tableau(ligne, 2) = Cells(ligne, 2)
tableau(ligne, 3) = Cells(ligne, 3)
tableau(ligne, 4) = Cells(ligne, 4)
tableau(ligne, 5) = Cells(ligne, 5)
MsgBox ("suivant")
'MsgBox (tableau(ligne, 1))
'MsgBox (tableau(ligne, 2))
'MsgBox (tableau(ligne, 3))
'MsgBox (tableau(ligne, 4))
'MsgBox (tableau(ligne, 5))
Liste_recettes.Show
Liste_recettes.TextBox1.Text = Cells(tableau(ligne, 1))
Liste_recettes.TextBox2.Text = Cells(tableau(ligne, 3))
Liste_recettes.TextBox3.Text = Cells(tableau(ligne, 4))
Liste_recettes.TextBox4.Text = Cells(tableau(ligne, 5))
MsgBox ("suivant")
librec.Text = Cells(ligne, 1)
If FoundCell.Address = FirstAddr Then
MsgBox ("dernière recette trouvée")
Exit Do
End If
Loop
End Sub
Merci de me détailler là où sont mes erreurs car je débute en vba et j'aime bien comprendre pour pouvoir progresser.
Merci de votre compréhension.
Christophe, le galérien du VBA
christrenb a écrit :Liste_recettes.Show Liste_recettes.TextBox1.Text = Cells(tableau(ligne, 1)) Liste_recettes.TextBox2.Text = Cells(tableau(ligne, 3)) Liste_recettes.TextBox3.Text = Cells(tableau(ligne, 4)) Liste_recettes.TextBox4.Text = Cells(tableau(ligne, 5))
je pense qu'il voudrai mieux affecter les valeurs ensuite afficher le formulaire principal et non l'inverse
minanse a écrit :je pense qu'il voudrai mieux affecter les valeurs ensuite afficher le formulaire principal et non l'inverse
Merci de ta réponse minanse mais çà me fait exactement le même message d'erreur quand je mets liste_recettes.show après l'affectation des valeurs. Cela confirme que j'ai bien une erreur de syntaxe sur l'affectation des mes résultats.
Bonjour,
je pense que l'erreur viendrai d'ici
Cells(tableau(ligne, 1))
c'est un tableau de string et tableau(ligne,1) te renvoie qu'une valeur. au final tu aura cells(String) ce qui ne respect pas vraiment la syntaxe d'un cells ( je pense apres je ne suis pas vraiment bon avec les tableau ^^ )
je n'ai plus d'idées. J'ai essayé de changer en type Variant mais çà ne fonctionne pas non plus. Même message d'erreur