|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
Chers tous,
Je cherche à récupérer le numéro de la ligne qui est le plus proche de ma valeur (ici la valeur est fixée à 3000). Voic le code que j'ai écris et qui ne fonctionne pas, pourquoi, quelle(s) solution(s) ? Code :
__________________
Bonne journée, Cordialement, Vincent |
||
|
|
00
|
|
|
#2 | ||||
|
Membre chevronné
![]() Inscription : octobre 2006 Messages : 541 ![]() |
Bonjour
sans t'occuper de la dernière ligne (puisque tu cherche la dernière dans la colonne A, il n'y a rien en dessous et donc, on peut prendre un nombre de ligne supérieur) en utilisant une formule matricielle dans VBA essaies Code :
Code :
__________________
Michel_M |
||||
|
|
10
|
|
|
#3 |
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
Bonjour,
La solution proposée ne fonctionne pas. Pour info la valeur retournée doit correspondre au numéro de la ligne où est situé la valeur la plus proches de celle désirée (les 3000 dans mon cas). La msgBox n'est là qu'à titre indicatif. La valeur retournée dans C doit me permettre de réaliser d'autres calculs.
__________________
Bonne journée, Cordialement, Vincent |
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 924 ![]() |
Bonjour,
En passant par une formule intermédiaire calculée dans une cellule que l'on pourra masquer ou vider après son utilisation Code :
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|||
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
Je vais être pénible mais je souhaiterais ne pas à avoir à stocker la valeur dans une cellule intermédiaire, si c'est possible.
¨Pourquoi le code suivant ne fonctionne pas ? Code :
__________________
Bonne journée, Cordialement, Vincent |
||
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 924 ![]() |
Citation:
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
||
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
Désolé,
Tout d'abord il me dit incompatibilité de type pour PremL=ws1.[A1] Ensuite, Erreur définie par l'application ou l'objet => A = 3000 - ws1.Cells(Count, 1)
__________________
Bonne journée, Cordialement, Vincent |
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Inscription : octobre 2006 Messages : 541 ![]() |
A tout hasard, ma proposition avait été testée et fonctionnait
pour le msg, je me suis basé sur ce que tu exprimais dans ta demande Désolé de t'avoir dérangé.
__________________
Michel_M |
|
|
10
|
|
|
#9 | |||
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
Bonjour Michel,
Je suppose que mes propos ont été mal interprétés et je m'en excuse. Citation:
J'apprécie énormément l'aide que tu m'apportes ![]() Cependant la ligne de code suivante : Code :
MsgBox [Match(MIN(ABS(B1-(A1:A1000))),ABS(B1-A1:A1000),0)] L'erreur renvoyée est la suivante : "Incompatibilité de type" avec ta formule surlignée en jaune ! Je ne comprends pas pourquoi. Par ailleurs est ce que plutot que MsgBox je peux faire : Code :
Valeur = Match(MIN(ABS(B1-(A1:A1000))),ABS(B1-A1:A1000),0) Encore une fois désolé si mes propos ont été mal perçus. Merci beaucoup pour l'aide apporté ! ![]() Un grand merci à toi Michel. Ta fiormule fonctionne parfaitement bien ![]() ![]() ![]() En fait il fallait que je commence à A2 et non A1 car A1 est composé d'un titre et non d'une valeur. Quel étourdis suis-je !!!! Encore merci pour toute l'aide apportée Il m'est impossible d'utiliser la valeur retournée par la formule, Pourquoi, comment faire ? Code :
Code :
ws3.Cells(Lig, Col + 1) = ws2.Cells(Lig, Col + 1) - ws2.Cells(Val1, Col + 1)
__________________
Bonne journée, Cordialement, Vincent |
|||
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 924 ![]() |
dans un premier, pour éviter les erreurs d’interprétation par VBA
Correspond à l'objet Range Correspond à la valeur de l'objet Range Donc Code :
ws3.Cells(Lig, Col + 1).Value = ws2.Cells(Lig, Col + 1).Value - ws2.Cells(Val1, Col + 1).Value
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
10
|
|
|
#11 |
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
La solution que tu me proposes ne fonctionne pas.J'ai essayé de mettre un point d'arrêt mais je n'arrive pas à cerner ce que ça m'apporte (je ne sais pas m'en servir !
Merci pour ton aide en tout cas
__________________
Bonne journée, Cordialement, Vincent |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 924 ![]() |
As tu la valeur de Val1 quand ca plante ?
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
non, je vais rajouter un msgBox et je te dis ça
En fait ça donne 1 !!! (ce n'est pas la valeur attendue !)
__________________
Bonne journée, Cordialement, Vincent |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
Dans ta formule Code :
Val1 = [Match(MIN(ABS(1900-(A2:A65536))),ABS(1900-(A2:A65536)),0)] Pour définir la ligne correspondante, tu dois appliquer un décalage de +1 puisque tu commences en A2. Ligne = Val1 + 1 Cordialement. |
|
|
10
|
|
|
#15 |
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
Bonjour la solution apportée me permet d'éradiquer le message d'erreur. Cependant :
Code :
Val1 = [Match(MIN(ABS(1900-(A2:A65536))),ABS(1900-(A2:A65536)),0)] 'Trouve la ligne la plus proche de 1900 Je suis perdu : tantôt la formule cité précédemment fonctionne (voir le fichier Joint par Michel), Tantôt elle renvoie une valeur "bidon" (dans mon cas !) J'ai esssayé sur un fichier test et le code fonctionne mais là sur ma macro définitive (ça bug) J'ai beau essayé cette formule, dans un classeur elle me renvoie la bonne valeur, dans l'autre ça me renvoie 1 je n'arrive pas cerner pourquoi ! Je joins mes deux fichiers ainsi que le répertoire nécessaire au chargement des données pour la macro "qui foire" Merci pour votre aide
__________________
Bonne journée, Cordialement, Vincent |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
Code :
ws3.Cells(Lig, Col + 1).Value = ws2.Cells(Lig, Col + 1).Value - ws2.Cells(ValA + 1, Col + 1).Value Cordialement. |
|
|
00
|
|
|
#17 | ||
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
oui, effectivement dans le code que j'ai fourni je n'ai mi qu'un extrait. En fait ws2 est une worksheet définie dans mon vrai code.
Code :
__________________
Bonne journée, Cordialement, Vincent |
||
|
|
00
|
|
|
#18 | |||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Citation:
Fait un essai avec Code :
|
|||
|
|
10
|
|
|
#19 |
|
Membre régulier
![]() Vincent VincentInscription : octobre 2010 Messages : 246 ![]() |
ça fonctionne ! Houra !!! jfontaine Michel_M gFZT82Merci énormément à vous 3
__________________
Bonne journée, Cordialement, Vincent |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com