IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction Find et opérateur sup et inf [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut Fonction Find et opérateur sup et inf
    Bonjour,
    Je travail actuellement sur l'élaboration d'une base de données.
    J'ai créé tout une interface qui permet de faire une recherche dans celle-ci.
    J'affiche les résultats de la recherche dans une list box.

    Pour l'améliorer, je souhaiterai ajouter la possibilité de rechercher des données dont un paramètre est compris entre deux bornes.

    Par exemple, afficher toutes les commandes dont le prix est compris entre telle et telle valeur.

    Pour l'instant, j'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Public Sub chercher(rech As String, c As Integer)  ' recherche d'une chaine
    Dim sel As Range
    Dim valide As Boolean
    Dim i As Integer
    Dim n As Integer
    l = 3
    n = 0
     
    With ShParam
     
        UF_remarque.ListBox1.Clear
        If rech = "" Then Exit Sub
            Do
                Set sel = Cells.Find(rech, .Cells(l, c), xlValues, xlPart, xlByColumns, _
                xlNext, False)
     
                If sel Is Nothing Then Exit Do
                If sel.Column <> c Then Exit Do
                If sel.Row <= l Then Exit Do
     
                l = sel.Row
                valide = True
     
                If UF_remarque.Controls("Textbox1").Value <> "" And InStr(1, _
                    LCase(.Cells(l, 3).Value), LCase(UF_remarque.Controls("Textbox1").Value)) = 0 _
                Then valide = False
    .
    .
    .
    If valide Then
     
                    UF_remarque.ListBox1.AddItem .Cells(l, 71)
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(l, 3).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(l, 4).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(l, 7).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 4) = .Cells(l, 12).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 5) = .Cells(l, 6).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 6) = .Cells(l, 8).Value & _
                    " | " & .Cells(l, 9).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 7) = .Cells(l, 10).Value & _
                    " | " & .Cells(l, 43).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 8) = .Cells(l, 64).Value & _
                    " | " & .Cells(l, 66).Value
                    UF_remarque.ListBox1.List(ListBox1.ListCount - 1, 9) = .Cells(l, 62).Value & _
                    " | " & .Cells(l, 65).Value & " | " & Cells(l, 63).Value & " || " & .Cells(l, 68).Value & _
                    " | " & .Cells(l, 67).Value
     
                    DonLigne(ListBox1.ListCount - 1) = l
                    n = n + 1
                End If
            Loop
    End With
    End Sub
    C'est donc bien la fonction find qui doit être modifié pour intégrer le faite qu'elle peut trouver d'autre valeur que celle signifiée.
    En fait, il faudrait pouvoir trouver les valeurs comprises dans un intervalle donné.
    Merci d'avance pour vos éventuelles solution.

    Bonne journée.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    Pour l'améliorer, je souhaiterai ajouter la possibilité de rechercher des données dont un paramètre est compris entre deux bornes.

    Par exemple, afficher toutes les commandes dont le prix est compris entre telle et telle valeur.
    Peut-tu préciser quel est le paramètre (le prix), s'agit il de sel que tu recherche ou d'une cellule à coté. car il n'y a qu'a comparer cette valeur au seuil que tu désire et inclure le traitement entre if /end if.

  3. #3
    Membre habitué
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Alors en faite je cherche la valeur d'un diamètre.
    En faite, dans mon interface, je donne la possibilité à l'utilisateur de borner la recherche sur un diamètre mini et maxi.

    Il faut alors que la recherche prenne en compte ce détail. Et donc que j'affiche toutes les lignes (de la base de données) dont le diamètre est compris entre ces bornes.

    J'utilise deux fichiers excel.
    Un fichier base de données(ShParam). Il n'y a pas de macro dans ce fichier, uniquement les données (c'est donc ici qu'est enregistré la valeur du diamètre).
    Un autre fichier, où sont regroupées toutes les macros.
    L'interface est comprise dans ce fichier.

    Le problème que je rencontre est qu'actuellement ma fonction find ne recherche que les chaines partiellement ou entièrement identique.
    Je en peux donc pas inclure le faite que je recherche des valeurs sup ou inf à la référence.
    Il faudrait que quand j'ai un diamètre compris dans les bornes, je modifie mon paramètre de recherche dans le find, pour que celui ci m'indique la bonne ligne. Le problème est qu'il faut que cela ce fasse pour toutes les lignes de la base de données.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Désolé si je n'est pas été clair

    en fait il y a beaucoup de question par rapport à ton code

    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub chercher(rech As String, c As Integer)
    A quoi correspond
    rech -> au diametre recherché ?
    C -> a la colonne ou il faut effectuer la recherche

    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set sel = Cells.Find(rech, .Cells(l, c), xlValues, xlPart, xlByColumns, xlNext, False)
    tu effectus la recherche dans la feuille active (cells.find) et non dans la feuille ShParam (.cells.find)
    xlPart -> si rech est le diametre et que tu cherche 8 tu cherche les résultat tel que 8, 18, 80, 180 ... ???


    pourquoi ne pas utiliser simplement une boucle pour parcourir la colonne des diamètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'boucle dans la colonne des diametre dans ShParam
      'si la valeur = mini < rech < maxi
      '
      'alors on fait le traitement
    '
    'fin de boucle

  5. #5
    Membre habitué
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Bon tout d'abord merci de t'intéresser à mon cas...
    Je vais donc essayer d'être meilleur dans la description de mon problème et programme.
    A quoi correspond
    rech -> au diametre recherché ?
    C -> a la colonne ou il faut effectuer la recherche
    Alors rech : C'est une valeur que je récupère dans mon interface de recherche.
    en faite j'ia des champs dans lesquel je peux rentrer des valeurs. Quand la valeur dans champ change, je lance le processus "chercher" avec la valeur de rech.
    Ainsi j'affiche de manière dynamique l'ensemble des résultats.

    C est la colonne dans ma base de données. Donc utile uniquement pour connaitre où il faut chercher.
    tu effectus la recherche dans la feuille active (cells.find) et non dans la feuille ShParam (.cells.find)
    xlPart -> si rech est le diametre et que tu cherche 8 tu cherche les résultat tel que 8, 18, 80, 180 ... ???
    Alors la feuille active est en faite ShParam. Elle se met en arrière plan, mais est active.
    Sinon oui c'est comme ça que je fais ma recherche.
    Mais bon, si je cherche 180, je tape au moins 18.

    Maintenant imagine que dans ma base de données j'ai des diamètres telles que 10 20 30 40 50 . et que je sélectionne comme paramètre de trie diam min = 20.

    Et bien il faut que j'affiche toutes les lignes de ma base de données dont le diamètre est supérieur à 20.

    C'est ici qu'est la difficulté, car avant ej ne chercher que des diamètres qui correspondaient à a recherche et non sup ou inf.. ce qui n'a rien à voir en terme de procédure de recherche.

    A ton avis est il possible de transformer la variable rech en tableau, de borner ce tableau avec mes valeurs min et max et de lancer la recherche ainsi.

    Comme cela, la fonction find chercherai toutes les données qui sont comprises entre ces bornes.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Dans un premier temps afin de ne pas trop modifier ton code, pourquoi ne pas tester le résultat de la recherche tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If sel.Value < ValeurMini Or sel.Value > valeurMaxi Then valide = False
     
    If valide Then
    et récuperer les variables ValeurMini et valeurMaxi en paramètre de ta routine pas exemple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02
  2. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43
  3. [VBA-E]Fonction .find
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2006, 11h03
  4. fonction si et arrondi.sup dans access
    Par jean-baptiste dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2005, 19h39
  5. [VBA-E] Fonction "FIND"
    Par cinc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2005, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo