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 date la plus récente sur une base de données


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut Recherche date la plus récente sur une base de données
    Bonjour le forum
    j'ai une base de données sur une feuille excel que je dois consulter a l'aide d'un Userform, cette consultation consiste a trouver la dernière date saisie pour chaque occurrence.
    j'ai trouver ce code sur le Net je l'ai adapter mais apparemment il fonctionne pas bien.
    la disposition des données sur la feuille :
    A= Date B= Occurences (Critère de 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
     
    Private Sub ListBox1_Click()
        Dim ln&, flag&
        Dim dd As Date
     
        dd = Format(dd, "dd/mm/yyyy")
     
        With Sheets("BD")
            flag = 0
            For ln = 10 To .Range("A65536").End(xlUp).Row
                If .Range("B" & ln) = .Range("B" & ln) = Val(ListBox1) Then
                    TextBox1.Value = .Range("A" & ln).Value
                    TextBox2.Value = .Range("F" & ln).Value
                    flag = 1
                    Exit For
                End If
            Next ln
            If flag = 0 Then
                TextBox1.Value = "Pas d'entrée"
                TextBox2.Value = "Pas d'entrée"
            End If
        End With
    End Sub
    Merci d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour
    C'est bien, de "trouver ce code sur le Net "
    encore faut-il avoir au moins une petite idée de ce que l'on fait
    Ceci, déjà !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim dd As Date
    dd = Format(dd, "dd/mm/yyyy")
    n'a aucun sens et te retournera nécessairement 00:00:00
    Et comme d'ailleurs tu ne t'en sers nulle part .... !!

    Tu annonces vouloir rechercher la date "la plus récente". Ce n'est pas ce que montre ton code.

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 146
    Points : 9 985
    Points
    9 985
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une simple utilisation de Application.WorkSheetFunction.Max() appliquée sur la plage des dates te donnera le numéro de série le plus élevé
    ensuite, pour le format, t'as déjà ce qu'il te faut dans ce code improprement repris pour ton contexte


    EDIT : et pour intégrer les conditions liées aux occurrences, tu peux

    1) utiliser un filtre automatique pour isoler les lignes à prendre en compte
    2) utiliser la même mécanique que la fonction MAX(), mais cette fois-ci avec SOUS.TOTAL() (SUBTOTAL en anglais) avec le premier paramètre astucieusement choisis

    Sinon, il y a l'utilisation de MAX() en matriciel : {SI(MAX())}

    et d'autres possibilités encore

  4. #4
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    merci mes amis pour vos réponses
    mais je sollicite toujours une solution au problème


  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 146
    Points : 9 985
    Points
    9 985
    Billets dans le blog
    5
    Par défaut
    Nous sollicitons un peu d'huile de coude et de cerveau de ta part !

  6. #6
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    merci mon ami joe.levrai votre réponse m'a quand même éclairé quant a l’utilisation de la fonction
    WorksheetFunction.Max.
    j'ai refait le code en essayant de combiné FINDavec la fonction WorksheetFunction.Max mais le code ne fonctionne pas.
    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
    Private Sub ListBox1_Click()
     Dim test1 As String
      Dim FoundRange As Range
      Dim Derligne As Integer
      Dim Plage As Range
     
        test1 = ListBox1.Value
        With Sheets("BD")
         Derligne = .Range("A65536").End(xlUp).Row + 1
         Set Plage = .Range("F2", "F" & Derligne)
         Set FoundRange = .Range.Find(Application.WorksheetFunction.Max(Plage), what:=test1, LookIn:=xlFormulas, lookat:=xlWhole)
     
        If FoundRange Is Nothing Then
            TextBox1.Value = "Pas d'entrée"
            TextBox2.Value = "Pas d'entrée"
        Else
            TextBox1.Value = FoundRange.Offset(0, 5).Value
            TextBox2.Value = FoundRange.Offset(0, 4).Value
        End If
         End With
    End Sub
    Merci et bonne journée

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Juste une question pour toi (puisque tu écris du code, tu dois savoir ce que tu écris, non ?)
    Qu'est donc test1 dans ? :
    Juste pour voir si tu écris autrement que au hasard.
    Une seconde question, maintenant, de pure logique, celle-là :
    que devrait être selon toi la valeur du paramètre What de la méthode Range.Find ?

  8. #8
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    bonjour et bonne journée
    c'est le contenu ou les occurrences du Listbox1 que je dois sélectionnée pour trouver
    leurs dernière date.
    merci

  9. #9
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    Bonjour le forum et bonne journée mes amis

    j'ai complètement refait le code afin de pouvoir consulter par date la plus récente de chaque occurrence sélectionnée du listbox il semble que le code marche sans erreur mais il y a un petit souci c'est que il tiens pas compte de la sélection du listbox mais il m'affiche simplement la dernière date de la colonne "F", le deuxième problème je souhaite afficher dans les textbox la mention "Pas d'Entrée" Quant il y a pas de saisie pour l’occurrence selectionné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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub ListBox1_Click()
        Dim wsBD As Worksheet
        Dim derLig As Long
        Dim Lig As Long
        Dim Plage As Range
        Dim I As Integer
        Dim CritDateFin As String
        Dim LigList As Long
     
     Set wsBD = Worksheets("BD")
        ' Dernière ligne dans la feuille BD
        derLig = wsBD.Range("A" & Cells.Rows.Count).End(xlUp).Row
        If derLig < 2 Then Exit Sub
     
        ' Définition de la plage en colonne F celle qui contien les dates
        Set Plage = wsBD.Range("F2:F" & derLig)
     
     'boucle sur toutes les lignes de la listbox
        For I = 0 To ListBox1.ListCount - 1
            'si la ligne est sélectionnée
            If ListBox1.Selected(I) = True Then
              ' Date Fin
        CritDateFin = ListBox1.Value
        If ListBox1.Value = "" Or Not IsDate(ListBox1.Value) Then
            CritDateFin = Format(Application.WorksheetFunction.Max(Plage, I), "dd/mm/yyyy")
        End If
            End If
        Next I
        LigList = 1
         ' Boucle sur toutes les lignes
        For Lig = 2 To derLig
            ' Rechercher par rapport aux critères
            If CDate(wsBD.Range("F" & Lig).Value) >= CDate(CritDateFin) Then
             With Me
             TextBox1.Value = wsBD.Range("F" & Lig).Value
             TextBox2.Value = wsBD.Range("E" & Lig).Value
               End With
                 LigList = LigList + 1
            End If
        Next Lig
    End Sub
    Merci d'avance de vos réponses et je suis désolé de vous importuner avec mes questions
    mille Merci

Discussions similaires

  1. recherche de la date la plus récente dans une requete
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 17/05/2008, 18h30
  2. Recherche % date la plus récente
    Par desilo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/04/2008, 14h59
  3. recherche date/heure plus récent
    Par afort dans le forum Requêtes
    Réponses: 10
    Dernier message: 16/01/2008, 11h36
  4. Réponses: 3
    Dernier message: 25/07/2007, 18h28
  5. Rechercher la date la plus récente dans une BD
    Par kurkaine dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2006, 20h10

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