Fonction de recherche

  • Initiateur de la discussion Initiateur de la discussion dudule859
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

dudule859

Guest
Bonjour à tous,

J'ai fait une fonction qui permet de rechercher des objets, cette fonction fonctionne, mais c'est après que ca se gatte, car je n'arrive pas ac qu'il me mette sur la bonne ligne le nombre à prendre, le lieu et le le contact, il recommence depuis le depuis du tableau
Des captures pour que vous puissiez mieux comprendre
Quand je clique sur Bouton (cerclé), il m'affiche, ce que je veux rechercher

Exemple Poëlle
Il me dit qu'il l'a trouvé

Et c'est ici que ca se gatte
"Donnez le lieu du camp", je donne le lieu
Ex: Test

Et la, il va pas le mettre sur la ligne Poëlle, mais sur la 7ème ligne du tableau

Alors que je voudrais que ca aille sur la ligne Poëlle ou autre ligne en fonction de ce que j'aurais mis avant

Voici le code VBA
Code:
Sub NbreEmprunter_Outils_Cuisine_Test()
Dim Trouve As Range
Dim Valeur_cherchee As String
Dim Ligne
Dim Ligne1
Dim Nombre
Valeur_cherchee = InputBox("Valeur recherchée?")
    Set Trouve = Sheets("OutilsCuisine (2)").Columns(4).Cells.Find(what:=Valeur_cherchee)
        If Trouve = Valeur_cherchee Then
            Trouve.Select
            rep = MsgBox("trouvée")
            Ligne = 7
Ligne1 = 7
Nombre = 0
Nombre1 = 0
Colonne = 8
Colonne1 = 9
While (Worksheets("OutilsCuisine (2)").Cells(Ligne, 7).Value <> "")
    Nombre = Nombre + 1
Cells(Ligne, Colonne).Value = InputBox("Donnez le lieu du camp", "Lieu du camp")
Ligne = Ligne + 1 ' Passage à la ligne suivante
Wend
While (Worksheets("OutilsCuisine (2)").Cells(Ligne1, 7).Value <> "")
    Nombre1 = Nombre1 + 1
Cells(Ligne1, Colonne1).Value = InputBox("Donnez le contact", "Personne à contacter")
Ligne1 = Ligne1 + 1 ' Passage à la ligne suivante
Wend
        Else
        
            Trouve.Select
            rep = MsgBox("Non Trouvé", vbInformation, "Trouve")
        End If



End Sub


dudule859
 
Dernière modification par un modérateur:
Re : Fonction de recherche

Bonjour

juste avec le code sans voir la structure du fichier ca va être compliqué..
j'ai remis ton code ci dessous, avec une meilleure mise en forme pour bien voir les débuts et fin de boucle
ainsi que des commentaires questions

Code:
Sub NbreEmprunter_Outils_Cuisine_Test()
Dim Trouve As Range
Dim Valeur_cherchee As String
Dim Ligne
Dim Ligne1
Dim Nombre

Valeur_cherchee = InputBox("Valeur recherchée?")
    Set Trouve = Sheets("OutilsCuisine (2)").Columns(4).Cells.Find(what:=Valeur_cherchee)
    If Trouve = Valeur_cherchee Then
        Trouve.Select
        rep = MsgBox("trouvée")
        Ligne = 7 'es tu sur de cette initialisation?
        Ligne1 = 7
        Nombre = 0 'n'est jamais utilisé dans la macro. sauf dans la première boucle While.. ??
        Nombre1 = 0
        Colonne = 8
        Colonne1 = 9
        While (Worksheets("OutilsCuisine (2)").Cells(Ligne, 7).Value <> "")
            Nombre = Nombre + 1 'ne sert à rien dans cette boucle puisque n'est pas utilisé
            Cells(Ligne, Colonne).Value = InputBox("Donnez le lieu du camp", "Lieu du camp")
            Ligne = Ligne + 1 ' Passage à la ligne suivante
        Wend
        While (Worksheets("OutilsCuisine (2)").Cells(Ligne1, 7).Value <> "")
            Nombre1 = Nombre1 + 1
            Cells(Ligne1, Colonne1).Value = InputBox("Donnez le contact", "Personne à contacter")
            Ligne1 = Ligne1 + 1 ' Passage à la ligne suivante
        Wend
    Else
        Trouve.Select
        rep = MsgBox("Non Trouvé", vbInformation, "Trouve")
    End If
End Sub
 
Re : Fonction de recherche

une question en plus
dans le cas ou ta macro ne trouve pas la valeur cherchée.. tu n'as pas de plantage?
je dis ca parce que pour tester le résultat d'une recherche, je ne connaissais pas cette syntaxe mais plutot celle ci:

If Not Trouve Is Nothing Then
firstAddress = Trouve.Address
Do
bla bla bla
Loop
End If
 
Re : Fonction de recherche

ok, tant mieux..
mais j'insiste sur le test de recherche.
je viens d'essayer ton code.. si la valeur cherchée n'existe pas. ton code plante..donc à modifier
if not Trouve is nothing then
ton code
Else rep = MsgBox("Non Trouvé", vbInformation, "Trouve")
 
Re : Fonction de recherche

Bonjour dudule859 et le Forum,Salut vgendron.

Perso, je préfère la fonction Match à Find qui est environ 60 fois plus rapide.

dim d as variant
valeur = Cells(CDbl(TextBox1.Value ),1)'Valeur Alpha ou numéric recherchée en colonne A
d = Application.Match(valeur, Range("A:A"), 0)'renvoie en "d" le numéro de la ligne si valeur existe
If IsNumeric(d) Then ' valeur existe et ligne trouvée
'suite de la routine de traitement
Else
'La valeur recherchée n'existe pas dans la colonne A
traitement
End If

Un exemple sur 10000 recherches alléatoires dans une colonne A de 65000 références:
Methode Find=127 secondes
Methode Macth=2 secondes

A+

René
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
906
Réponses
7
Affichages
990
Retour