Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2012, 10h35   #1
Invité régulier
 
Inscription : mai 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 35
Points : 8
Points : 8
Par défaut Recherche de valeur dans un tableau

Bonjour à tous!

J'ai un petit problème algorithmique... (pour trouver des taux financiers)

En gros j'ai un tableau de données avec des données sur chaque lignes.

La ligne 1 correspond à 1 jour
La ligne 2 correspond à 2 jours
La ligne 3 correspond à 3 jours
la ligne 4 correspond à 1 semaine
La ligne 5 correspond à 2 semaines
La ligne 6 correspond à 3 semaines
La ligne 7 correspond à 4 semaines
La ligne 8 correspond à 1 mois
La ligne 9 correspond à 2 mois
La ligne 10 correspond à 3 mois
...
La ligne 19 correspond à 12 mois
La ligne 20 correspond à 24 mois

En gros pour un jour donné, je dois trouver les deux lignes correspondant encadrant ce jour.


Par exemple, en entrant 9 jours, il me renvoie la ligne 4 et la ligne 5.
(Car 1 semaine< 9 jours <2 semaines)

Merci beaucoup!
cott333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 10h40   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Le nombre de jours pour la ligne est indiqué dans un colonne ou pas ? Dans ce cas, tu pourrais faire directement un RECHERCHEV
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 10h44   #3
Invité régulier
 
Inscription : mai 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 35
Points : 8
Points : 8
Elle ne sont pas écrites explicitement. Je ne pense pas qu'elle soit utilisable.

Mais RECHERCHEV est une fonction Excel non? Je ne peux pas l'utiliser sous vba?

Et puis je n'ai qu'une colonne de donnée. Je sais que la premiere ligne correspond à la valeur pour un jour, deuxieme ligne pour deux jours...

En espérant que cela t'aide a voir mieux mon problème
cott333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 10h56   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Ca aurait été plus simple si tu avais pu rajouter une autre colonne avec le nombre de jours (1, 2, 3, 7, 14, 21, 28, ...)
Dernière question avant de te proposer autre chose, quand tu dis 1 mois, c'est par exemple 30 jours forfaitaires ou ça dépend de la date actuelle, c'est à dire le même jour le mois prochain ? La donnée en entrée est une date ou un nombre de jours ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 11h02   #5
Invité régulier
 
Inscription : mai 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 35
Points : 8
Points : 8
Oui ca aurait été plus simple

En gros l'utilisateur entre deux dates. VBA calcule le nombre de jours séparant les deux dates. Et avec cette difference, il renvoie les deux lignes encadrant ce nombre de jour.
cott333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 11h42   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Voici un code que je te propose.
Il faudra juste adapter en fonction de :
- Ce que tu veux si date2<date1.
- Quelle borne est stricte ? (pour le moment borne supérieure)
- Ce que l'on veux si > 24 mois
Code :
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
Option Explicit
 
Public Function getRow(date1 As Date, date2 As Date) As Integer
    Dim dtList(20) As Date
    Dim i As Integer
 
    'On remplit la liste des dates
    dtList(0) = date1
 
    For i = 1 To 3 'Les jours
        dtList(i) = DateAdd("d", i, date1)
    Next i
    For i = 4 To 7 'Les semaines
        dtList(i) = DateAdd("ww", i - 3, date1)
    Next i
    For i = 8 To 19 'Les mois
        dtList(i) = DateAdd("m", i - 7, date1)
    Next i
    dtList(20) = DateAdd("m", 24, date1)
 
    'On renvoie la ligne
    getRow = 20
    If date2 < date1 Then getRow = -1
    For i = 0 To 19
        If date2 >= dtList(i) And date2 < dtList(i + 1) Then
            getRow = i
            Exit For
        End If
    Next i
 
End Function
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/01/2012, 23h03   #7
Invité régulier
 
Inscription : mai 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 35
Points : 8
Points : 8
Merci beaucoup!
C'est du beau code ça j'y avais pas pensé

Je vais essayer de l'adapter à mon userform et je vous tiens au courant.

Merci!
cott333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h52.


 
 
 
 
Partenaires

Hébergement Web