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

Excel Discussion :

Recherche date proche d'une autre date avec condition. [XL-2010]


Sujet :

Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut Recherche date proche d'une autre date avec condition.
    Bonjour,

    Je cherche à automatiser une recherche de date : voici ci-dessous la problématique du sujet,
    Je dois trouver la date de consommation (Située dans l’onglet Données puis colonne F) la plus proche de la date de réception (Onglet Analyse, Colonne B) tout en tenant compte de l’article situé dans la colonne A de l’onglet Analyse, Il faut également que la date trouvée soit supérieure ou égale à la date de réception située dans la colonne B de l’onglet Analyse.

    Je mets à disposition un exemple avec le fichier en pièce jointe.
    Merci pour votre aide.

    Cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut
    Bonjour,
    Proposition avec VBA

    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
    Sub RechercheDate()
    Dim Compteur As Integer, celA As Range, celD As Range, Code As Variant, dateCons As Date, dateRec As Date
    Dim premLigne As Integer, derLigneD As Integer, derLigneA As Integer, Analyse As Range, Données As Range
     
    Sheets("Analyse").Activate
    'Code et dateRec lus dans la plage AnalyseCode de la feuille Analyse
    For Each celA In Range("AnalyseCode")
        Code = celA: dateRec = celA.Offset(0, 1)
    'Recherche dans la plage nommée DonnéesCode de la feuille Données
        Sheets("Données").Activate
        For Each celD In Range("DonnéesCode")
        dateCons = celD.Offset(0, 5)
            If celD = Code And celD.Offset(0, 5) >= dateRec Then
                Sheets("Analyse").Activate
                celA.Offset(0, 2) = celD.Offset(0, 5)
                Exit For
            End If
        Next celD
    Next celA
    Sheets("Analyse").Activate
     
    End Sub

    Une date est différente ???
    Fichiers attachés Fichiers attachés
    Cordialement.

    RJ

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Points : 215
    Points
    215
    Par défaut
    Bonjour,

    Une autre proposition en VBA, avec une fonction personnalisée,

    Mets ça dans un module, puis utilise la fonction Date_superieure avec pour arguments
    L'article qui fait la condition
    La liste des articles dans la table de données
    La date que l'on compare
    La liste des dates dans la table de données

    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
    Function Date_superieure(Article As Range, Liste_article As Range, Date_comp As Range, Liste_date As Range) As Variant
    Dim Col_article As Collection
    Dim i, j, Max_i, Max_j As Long
    Dim out As String
    Dim c As Variant
    Dim min_sup_date As Variant
    'Détermination du nombre du plus petit nombre de lignes utilisées dans les plages entre les plages liste_articles
    'et liste_date
    Max_i = Liste_date.Cells(Liste_date.Rows.Count, 1).End(xlUp).Row - Liste_date.Row
    If Liste_article.Cells(Liste_article.Rows.Count, 1).End(xlUp).Rows - Liste_article.Row < Max_i Then
        Max_i = Liste_article.Cells(Liste_article.Rows.Count, 1).End(xlUp).Row - Liste_article.Row
    End If
    Max_i = Max_i + 1
     
    Set Col_article = New Collection
    For i = 1 To Max_i
        If Liste_article.Cells(i, 1) = Article Then
            Col_article.Add Liste_date.Cells(i, 1)
        End If
    Next i
    For Each c In Col_article
        out = out & c.Address & vbCrLf
    Next c
     
    min_sup_date = 1E+28
    For Each c In Col_article
        If c > Date_comp And c < min_sup_date Then
            min_sup_date = c
        End If
    Next c
    If min_sup_date = 1E+28 Then
    min_sup_date = -1
    End If
    Date_superieure = min_sup_date
     
    End Function
    Mr Poulpe

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Merci à vous deux : rjamin et Mr Poulpe pour votre aide et votre solution respective.
    Je viens d'essayer les 2 solutions et tout fonctionne comme souhaité.
    Vraiment un grand merci.

    Cordialement.

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

Discussions similaires

  1. recherchev dans une autre feuille avec condition
    Par lucien(67) dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/12/2010, 19h22
  2. Réponses: 1
    Dernier message: 08/01/2010, 14h46
  3. [JDOM] Insérer une balise dans une autre balise avec condition
    Par maya dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/10/2009, 13h28
  4. générer une date à partir d'une autre date
    Par Melody Nelson dans le forum 4D
    Réponses: 2
    Dernier message: 20/08/2007, 17h59
  5. Réponses: 14
    Dernier message: 09/01/2007, 17h19

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