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 :

Recherche avec condition [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 30
    Points
    30
    Par défaut Recherche avec condition
    Bonjour,

    J'ai une base de données avec des références dans une colonne A et des dates de saisie de ses références dans une colonne B. Cependant une même référence peut être présente plusieurs fois. Actuellement je réalise une recherche mais si la référence est présente plusieurs fois, cela ne me donne pas la référence ajoutée via une textbox la plus récénte. Voici mon code actuel ci-dessous, comment puis-je faire pour ajouter une condition sur la date pour préciser ma recherche.

    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
     
    Private Sub CommandButton2_Click()
     
    'Recherche d'une filière
    Dim Cell As Range
    Set Cell = Range("A15:A65536").Find(Me.TextBox1, , lookat:=xlWhole)
     
        If Me.TextBox1 = "" Then Exit Sub
        If Not Cell Is Nothing Then
     
            MsgBox "Filière Trouvée à la Ligne " & Cell.Row & "."
            'Positionnement du curseur sur la cellule
            Cell.Offset(0, 0).Select
     
        Else
     
            MsgBox "Filière Non Trouvée."
     
        End If
     
    'Effacement de la textbox
    Sheets("Base de Données").TextBox1 = ""
     
    End Sub
    Merci d'avance.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Il me semble que ton test, ci dessous, devrait être placé en début de procèdure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.TextBox1 = "" Then Exit Sub
    Offset sert a se déplacer, ce code ne se déplace pas. A quoi sert il?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell.Offset(0, 0).Select
    A remplacer par

    Pour la date il faut boucler sur ton find en testant a chaque fois si la une variable date est > a la date se trouvant dans la colonne B.
    A la sortie de la boucle sur le fnd, tu auras la dernière date dans ta variable
    Jérôme

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 30
    Points
    30
    Par défaut Merci
    Merci pour vos remarques, j'en tiendrais compte, cependant pourriez vous me préciser un peu plus le test sur la date en me donnant un exemple.
    Je n'arrive pas trop à voir où placer la boucle ?
    Merci

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila un exemple

    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
    Dim rg As Range
    Dim rginit As Range
    Dim Madate As Date
     
     
    Set rg = Range("A:A").Find(TextBox1.text, Range("A1"), xlValues)
    If rg Is Nothing Then Exit Sub
    Set rginit = rg
     
    Do
            If Range("B" & rg.Row).Value > Madate Then Madate = Range("B" & rg.Row).Value
     
            Set rg = Range("A:A").FindNext(rg)
     
    Loop While Not rg Is Nothing And rg.Address <> rginit.Address
     
    MsgBox "la date la plus récente est " & Madate
    Jérôme

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 30
    Points
    30
    Par défaut Presque parfait
    Merci pour votre réponse, la recherche fonctionne parfaitement et pour une même référence, on trouve la date la plus avancée. Cependant, un dernier problème, je n'arrive pas à obtenir le numéro de la ligne de la date trouvée et par la même occasion à positionner le curseur sur la référence correspondante (avec un offset cette fois je pense). En remplaçant "Cell.row" par "Madate.row" cela ne fonctionne pas. Pourquoi ?

    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
     
    Dim Cell As Range
    Dim rginit As Range
    Dim Madate As Date
     
    If Me.TextBox1 = "" Then Exit Sub
    Set Cell = Range("A15:A65536").Find(Me.TextBox1, , lookat:=xlWhole)
    Set rginit = Cell
     
        If Not Cell Is Nothing Then
     
            Do
            If Range("B" & Cell.Row).Value > Madate Then Madate = Range("B" & Cell.Row).Value
     
            Set Cell = Range("A15:A65536").FindNext(Cell)
     
            Loop While Not Cell Is Nothing And Cell.Address <> rginit.Address
     
            MsgBox "La date la plus récente de contrôle de cette filière est le " & Madate & ". Filière trouvée à la ligne " & Cell.Row & "."
            'Positionnement du curseur sur la cellule
            Cell.Offset(0, -1).Select
     
        Else
     
            MsgBox "Filière Non Trouvée."
     
        End If
    Merci à vous.

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    ajoute une variable de type range qui mémorisera la cellule avec la date la plus élevée

    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
    Dim Cell As Range
    Dim rginit As Range
    Dim Madate As Date
    Dim Rgsave as Range
     
    If Me.TextBox1 = "" Then Exit Sub
    Set Cell = Range("A15:A65536").Find(Me.TextBox1, , lookat:=xlWhole)
    Set rginit = Cell
     
        If Not Cell Is Nothing Then
     
            Do
            If Range("B" & Cell.Row).Value > Madate Then 
                Madate = Range("B" & Cell.Row).Value
                set rgSave = rg
            end if
     
            Set Cell = Range("A15:A65536").FindNext(Cell)
     
            Loop While Not Cell Is Nothing And Cell.Address <> rginit.Address
     
            MsgBox "La date la plus récente de contrôle de cette filière est le " & Madate & ". Filière trouvée à la ligne " & rgsave.Row & "."
            'Positionnement du curseur sur la cellule
            rgsave.select
     
        Else
     
            MsgBox "Filière Non Trouvée."
     
        End If
    Jérôme

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 30
    Points
    30
    Par défaut Problème
    J'ai essayé votre solution mais cela ne fonctionne pas; le
    "Set Rgsave = Cell" renvoi à la première référence et non à la référence de la date la plus élevée.

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Etonnant car sur mon poste, cela fonctionne parfaitement.
    Fais une verif en pas a pas
    Jérôme

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 31
    Points : 30
    Points
    30
    Par défaut Merci
    C'est bon, je viens de réessayer à l'instant et mystérieusement cela fonctionne.
    Je n'ai pas trop compris pourquoi mais tant mieux, les joies de VBA.
    Merci pour vos réponse, vous êtes décidément très doué dans ce domaine car ce n'est pas la première fois que vous m'aidez il me semble.
    Bonne continuation à vous en tout cas et à bientôt sur le forum.

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

Discussions similaires

  1. [Python 2.X] recherche avec conditions
    Par BakiTheGrappler dans le forum Général Python
    Réponses: 3
    Dernier message: 23/11/2014, 19h54
  2. [CakePHP] Recherche avec condition sur une table éloigné du controlleur courant
    Par Spartacusply dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 04/06/2013, 22h26
  3. [XL-2010] Recherche avec condition
    Par chouchouilloux dans le forum Excel
    Réponses: 3
    Dernier message: 05/04/2012, 13h37
  4. [Toutes versions] Recherche avec conditions
    Par doume_mars dans le forum Excel
    Réponses: 8
    Dernier message: 02/04/2011, 19h59
  5. Recherche avec condition
    Par napster dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2006, 14h03

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