Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel


Réponse
 
LinkBack Outils de la discussion
Vieux 04/05/2006, 21h50   #1 (permalink)
j-y
Guest
 
Messages: n/a
Par défaut Recherche d'une valeur approchée

Bonsoir ou re-bonsoir,

J'aimerais faire une macro qui recherche une valeure déterminée dans une colonne et me retourne le n° de la ligne correspondant à cette valeure ou à la valeure la plus proche.

J'ai essayé avec la fonction 'VlookUp' mais je ne parviens pas à comprendre comment l'utiliser dans ma macro.

Avis aux amateurs et aux spécialistes en ce domaine...

Merci d'avance
  Réponse avec citation
ANNONCES
Vieux 05/05/2006, 01h47   #2 (permalink)
XLDnaute Occasionel
 
Date d'inscription: mars 2006
Localisation: Thionville
Version Excel : Excel 2003 (PC)
Messages: 271
Par défaut Re:Recherche d'une valeur approchée

Bonsoir J-Y,

Es-tu le Jean-Yves que j'ai aidé pour un problème de fichiers .txt à importer ? Si oui, je t'ai répondu au fait.

A+
David
Davidc57 est déconnecté   Réponse avec citation
Vieux 05/05/2006, 02h20   #3 (permalink)
XLDnaute Occasionel
 
Date d'inscription: mars 2006
Localisation: Thionville
Version Excel : Excel 2003 (PC)
Messages: 271
Par défaut Re:Recherche d'une valeur approchée

Au fait quelques indications pour le problème posé :

A ma connaissance, VLOOKUP n'est pas une fonction utilisable en VBA. Je veux dire que MID, IF, MAX, LEFT, etc .. sont des fonctions excel qui fonctionne aussi dans VBA. Mais VLOOKUP, il ne me semble pas. Au mieux tu peux te la programmer toi-même dans une fonction annexe.

Et derrière cette fonction, il y a l'idée de recherche, on va donc utiliser un FIND. Si tu utilise l'option de recherche d'excel (Edit / Find ou Ctrl + F), et que tu enregistres avant, tu obteindras ce code.

Code:
Columns('A:A').Select
Selection.Find(What:='8', After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate

Mais on va le modifier un peu comme ceci :

Code:
Columns('A:A').Select
Selection.Find(What:='8', After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Select
cad on fait un .Select, on sélectionne la case qui contient le mot clé.


Ensuite on récupère la ligne de la case sélectionnée comme ceci :

Code:
numeroligne = Selection.row

Cette méthode est bien, mais génère une erreur. Il faut donc penser à la gestion de l'erreur. Pour cela (par ex):


Code:
Sub test()
On error goto GestionDesErreurs

'bla bla bla
'bref le code de recherche etc ...
et la fin de la sub :
Code:
'bla bla bla
'bla bla bla

Exit 

GestionDesErreurs:
MsgBox 'Le texte n'a pas été trouvé dans cette colonne.'

End sub

Bon ben je sais ça ne cherche pas le plus proche pour le moment, mais c'est déjà bien. Parce que en tout cas, les données de ta colonne, tu pourrais par exemple, les charger automatiquement dans une combobox. Ainsi, le mot sélectionné, tu sais qu'il existe, et il n'y a plus qu'à le retrouver avec le code ci-dessus.

Si tu veux pas de combobox, j'ai bien peur qu'il faille :

1 - Trier la colonne par ordre alphabétique (ce qui faussera peut-être tes numéros de lignes ? je ne sais pas.

2 - Comparer le mot choisi à chaque texte des différentes cases de la colonne.

Si mon mot est MAISON et que j'ai en

A1 : AVION
A2 : CHEVAL
A3 : MAISON
A4 : VOITURE

Code:
If MAISON = Range('A'&i) then
    numeroligne = i
Else If MAISON < Range('A'&i) then
numeroligne = (i + (i-1)) / 2 ' Ca finira          donc par un virgule 5. Admettons 3.5, donc ligne 3 et 4 sont les cases contenant les textes les      plus proches du mot recherché.
End If


Mais attention, aux chiffres, et à ces méthodes de recherche. Je préfère rechercher un code valeur qu'un mot clé. Pour des raisons de fiabilité.. les chiffres ne mentent jamais, alors que les mots peuvent mentir.

:lol:

Au fait, si ca a bien un rapport avec le problème d'import de txt, tu devrais en dire plus. En effet, ce genre de problèmes peut intéresser beaucoup de monde. Et moi le premier. Car si je fourni une solution, elle n'est pas pour autant la meilleure et j'apprendrai si quelqu'un offre une meilleure solution.

A+
David
Davidc57 est déconnecté   Réponse avec citation
Vieux 05/05/2006, 10h27   #4 (permalink)
j-y
Guest
 
Messages: n/a
Par défaut Re:Recherche d'une valeur approchée

Bonjour David,

je trouve ta solution un peu complexe. Mais, en consultant le forum, j'ai trouvé une fonction 'EQUIV' qui donne la ligne de la valeur approchée.

j'ai donc fait ceci:

For n = 1 To 36
Sheets(CStr(n)).Activate
i = '=EQUIV(Sheets(1).Cells(n+1,2).Value ; Sheets(CStr(n)).Range('A:A') ; 1)'
Sheets(1).Cells(n + 1, 3).Value = '=MAX(Cells(i-2,4).Value,Cells(i-1,4).Value,Cells(i,4).Value,Cells(i+1,4).Value,Cel ls(i+2,4).Value)'
Next n

Mais bon visiblement j'ai pas encore tout compris à l'utilisation des fonctions excel dans les macros...==>marche pas

Merci d'avance

NB : c'est bien moi que tu as aidé pour les fichiers '.txt'. En fait, j'essaie maintenant d'extraire une valeure précise de chacune de mes feuilles (nommées par des chiffres) et de copier la valeur maximale située aux alentours de cette valeure.
  Réponse avec citation
Vieux 05/05/2006, 10h46   #5 (permalink)
AV
Guest
 
Messages: n/a
Par défaut Re:Recherche d'une valeur approchée

Re,

''...Mais, en consultant le forum...''

As-tu consulté l'autre fil que tu as ouvert avec la même question ?

AV [aaa]
  Réponse avec citation
ANNONCES
Réponse

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +2. Il est actuellement 14h02.


(C) 2006 Excel Downloads