Recherche date la plus récente avec conditions sous VBA

Bonjour

Je suis en train de créer un fichier excel et je bloque sur un problème (fichier en pièce jointe).

Dans un formulaire, je voudrais afficher la date la plus récente du dernier état enregistré de mon équipement.

Pour détailler, j'ai 3 sous ensembles. Chaque sous ensemble contient un nombre d'équipements : Sous ensemble 1=>21 équipements ; Sous ensemble 2 => 30 équipements ; Sous ensemble 3 => 10 équipements. Chaque équipement peut avoir 3 états : Entrée, Sortie ou Réparation OK.

Le but du fichier est de créer une base de données afin d’enregistrer et dater chaque changement d'état d'un équipement.

J'ai ensuite créé un formulaire pour que s'affiche l'état actuel et la date du dernier changement d'état pour chaque équipement.

Je suis arrivé à saisir la formule pour afficher l'état mais je n'arrive pas à créer celle de la date.

Je débute en VBA donc votre aide serait la bienvenue.

Merci par avance.

24test.xlsm (31.01 Ko)

Bonjour,

Je suggèrerais ceci :

Private Sub Listbox1_Change()
    Dim sEns, Equ, n%, i%
    If ListBox1.ListIndex > -1 Then
        sEns = ComboBox_Pays.Value
        Equ = CInt(ListBox1.Value)
        With Worksheets("Feuil2")
            n = .Cells(.Rows.Count, 1).End(xlUp).Row
            For i = n To 2 Step -1
                If .Cells(i, 1) = sEns And .Cells(i, 2) = Equ Then
                    TextBox2.Value = .Cells(i, 3)
                    TextBox1.Value = .Cells(i, 4).Text
                    Exit For
                End If
            Next i
        End With
    Else
        For i = 1 To 2
            Controls("TextBox" & i).Value = ""
        Next i
    End If
End Sub

Remarque : Les valeurs des contrôles de Userforms (ComboBox, ListBox, TextBox sont par définition des valeurs de type String. Or les valeurs de tes désignations d'équipement sur la feuille sont des nombres, d'où la conversion de ListBox1.Value pour la retrouver dans la feuille. Ce sera à adapter selon ton type de données réel... Certaines conversions sont automatiquement réalisées par Excel ou VBA (et pas forcément les mêmes) et d'autres non selon les commandes utilisées. Il y a donc toujours une attention à porter au type de données pour assurer la maîtrise des opérations effectuées.

Je suggèrerais également :

Private Sub ComboBox_Pays_Change()
    Dim no_colonne As Integer, nb_lignes As Integer
    ListBox1.Clear
    no_colonne = ComboBox_Pays.ListIndex + 1
    With Worksheets("Feuil3")
        nb_lignes = .Cells(1, no_colonne).End(xlDown).Row
        For i = 2 To nb_lignes
            ListBox1.AddItem .Cells(i, no_colonne)
        Next i
    End With
End Sub

et :

Private Sub UserForm_Initialize()
    With Worksheets("Feuil3")
        For i = 1 To 3 '
            ComboBox_Pays.AddItem .Cells(1, i)
        Next i
    End With
End Sub

J'ai en effet pour habitude de tester les Userforms en les lançant directement depuis l'éditeur. Avec ta façon de coder sans qualifier tes expressions, c'est surprise à l'arrivée dès lors que la feuille active n'est pas ta feuille de service de listes !

La qualification, soit fixer l'objet auquel réfère chaque expression, d'une part enlève le caractère approximatif et dépendant de la sélection du code pourvu d'expressions non qualifiées, et d'autre part accélère l'exécution (VBA n'a pas à chercher préalablement à quel objet actif se référer).

Autre remarque : une procédure destinée à lancer le Userform... dans le module dudit Userform n'a pas de raison d'être, et est de toute façon inopérante.

Dernier conseil : un code est parfaitement lisible (en un minimum de temps et en interprétant ce qu'on lit) dès lors qu'il respecte certaines règles d'écriture : indentation correcte et systématique, sans lignes sautées inutilement, déclarations systématiquement en tête de procédure et non au milieu du code exécutable. C'est peu d'effort pour le réaliser et un gain de temps indéniable par la suite.

Et pour ce qui me concerne, cela suffit déjà à m'inciter à répondre ! Car je ne cache pas qu'à force d'avaler du code écrit de façon plus au moins aléatoire, l'aspect rebutant finit par prendre le dessus au fil de la journée et passé un seuil je ne réponds plus...

Cordialement.

Bonjour à tous

Une proposition.

Et un avis : les conseils de MFERRAND sont tout à fait pertinents

Bye !

29test-v1.xlsm (41.25 Ko)

Merci à vous MFerrand et Gmb!

Je ne m'attendais pas à avoir des réponses aussi rapidement. C'est très sympa de votre part.

Je commence tout juste à m’intéresser au langage VBA, après avoir épuisé toutes les solutions rapides par des formules "classiques".

Je vais reprendre vos conseils et vos exemples, MFerrand, même si je vous avouerai que je n'ai pas encore tout saisi. Les expressions et les codes sont nouveaux pour moi et je commence à m'apercevoir du potentiel des macros.

Gmb, votre solution est également intéressante car elle anticipe ce que je voulais faire par la suite .

Rechercher des sujets similaires à "recherche date recente conditions vba"