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 :

Code VBA recherche dépendant de 2 dates dans tableau


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut Code VBA recherche dépendant de 2 dates dans tableau
    Bonjour à tous,

    J'ai un tableau de 3 colonnes :

    Date de début, date de fin et taux de remise.

    Dans un autre onglet, je saisis une date en A1 et je souhaiterai qu'en A2 s'affiche le taux de remise correspondant (à aller chercher dans la tableau de l'autre onglet).

    Je sais le faire sans code VBA mais j'ai besoin de la coder sous VBA et je ne vois pas comment faire ?

    Merci à tous pour votre aide.

    Je joins mon fichier d'exemple pour une meilleure compréhension.Exemple pour VBA.xlsx

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Formule à mettre en B2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(A2;Tableau!A2:C7;3;VRAI)

  3. #3
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut
    Bonour,

    Merci mais comme indiqué je sais le faire sans VBA, ma question porte uniquement sur le VBA car le fichier final n'est pas si simpliste.

    Merci quand même.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re,

    Place ce code dans la feuille résultats et lance avec un bouton ou autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    F = "=VLOOKUP(RC[-1],Tableau!RC[-1]:R[5]C[1],3,TRUE)"
    Range("B2").Formula = F

  5. #5
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut
    Citation Envoyé par mimimathy Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    F = "=VLOOKUP(RC[-1],Tableau!RC[-1]:R[5]C[1],3,TRUE)"
    Range("B2").Formula = F
    Bonjour,

    Après plusieurs essais je n'arrive pas à m'en sortir avec ce code :-(

    Mon problème est que la date qui sert de recherche n'est pas nécessairement dans le tableau où on effectue la recherche.

    Par exemple, si je reprend mon cas d'étude j'ai une date de référence au 01/08/2015, et je souhaite donc que la macro détecte que cette date appartient à la période du 01/04/2014 au 29/02/2016 pour me renvoyer le taux associé à cette période : 15%.

    Peut être ai-je mal écrit la macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro1()
     
    Dim date_ref as Date
    date_ref = Sheets("Résultats").Range("A2")
    taux_remise = Application.WorksheetFunction.VLookup(date_ref, Sheets("Tableau").Range("A2:C8"), 3, False)
     
    End Sub
    Merci pour votre aide.

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    voir avec ça (pour éviter d'avoir la dernière cellule du tableau vide ajouter =aujourd'hui) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub calcul_Remise()
    Dim Tablo
    Dim TauxRech
    Dim i As Long
    Dim DatRech As Date
    DatRech = Sheets("Résultats").Range("A2").Value
    Tablo = Sheets("Tableau").Range("A1", "C" & Sheets("Tableau").Range("C" & Rows.Count).End(xlUp).Row)
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        If DatRech >= Tablo(i, 1) And DatRech <= Tablo(i, 2) Then
            TauxRech = Tablo(i, 3)
        End If
    Next i
    Sheets("Résultats").Range("B2") = TauxRech
    End Sub

  7. #7
    Invité
    Invité(e)

  8. #8
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut
    Merci ça fonctionne.

    Par contre ça ralenti énormément la macro. Mon fichier fait des centaines de lignes et le calcul du taux est nécessaire à chaque ligne.

    Y a t-il un moyen de gagner en rapidité sur le calcul ?

    En tout cas merci c'est déjà super !

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    sans boucle c'est bien plus rapide !
    Il suffit juste d'appliquer en VBA la même formule que l'on peut directement entrer dans une cellule …

    Ecrire une formule dans Excel à l'aide d'une procédure VBA

    Ecrire une formule dans Excel à l'aide d'une procédure VBA (Part 2)

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re, Bonjour,

    Cela revient à mettre comme sur mon post #5 avec une recopie jusqu'en ligne 65000 et une gestion des erreurs

    Code à remplacer entre le sub et le end sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim f As String
    Range("b2:b65000").ClearContents
    f = "=IFERROR(VLOOKUP(RC[-1],Tableau!RC[-1]:R[5]C[1],3,TRUE),"""")"
    Range("B2").Formula = f
    Range("B2").AutoFill Destination:=Range("B2:B65000"), Type:=xlFillDefault

Discussions similaires

  1. [WD-2007] Recherche remplace de motifs date dans un fichier word
    Par rosemary_antoine dans le forum VBA Word
    Réponses: 1
    Dernier message: 16/06/2009, 01h22
  2. [VBA-E] Saisie d'une date dans une Input Box
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 31/05/2006, 20h51
  3. Réponses: 2
    Dernier message: 19/10/2005, 15h38
  4. Réponses: 4
    Dernier message: 13/10/2005, 14h44
  5. [VBA] Pb de format des dates dans un état
    Par linda15975 dans le forum IHM
    Réponses: 45
    Dernier message: 21/06/2005, 14h49

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