Stephi83
Messages postés19Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention29 avril 2007
-
20 avril 2007 à 13:05
Stephi83
Messages postés19Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention29 avril 2007
-
23 avril 2007 à 10:37
Bonjour,
J'aimerais savoir comment activer une formule Recherche V uniquement si le 1er champ de la fonction ("valeur cherchée") n'est pas vide, afin de ne pas avoir "N/A" dans la cellule de résultat.
De mêrme, je souhaiterais aussi savoir comment faire pour que la fonction ne se déclenche que si la "valeur cherchée" contient un mot de 12 caractères ?
Merci par avance.
Voici ma formule :
Sub bid()
Range("N18").Select
ActiveCell.FormulaR1C1 = _
"=IF(Abs((VLOOKUP(RC[-10],Base!R2C1:R30C9,9,FALSE)-RC[-5]))>100,""ecart"",""-"")"
Selection.AutoFill Destination:=Range("N18:N50"), Type:=xlFillDefault
End Sub
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 21 avril 2007 à 13:35
Je rejoins quelque peu MPi, ça se fait sans aucun soucis sous Excel, mais personnellement, je n'utiliserai pas les mêmes formules .
Plutôt que ESTERREUR, comme il cherche les cellules non vides, j'utiliserais ESTVIDE.
Et pour la longueur de la chaine de caractères, ce n'est pas Len mais NBCAR.
Stephi83
Messages postés19Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention29 avril 2007 22 avril 2007 à 01:05
Merci beaucoup pour vos réponses si précises !
Finalement, j'ai utilisé la fonction Len (excel semble de ne pas reconnaître NBCAR).
J'ai écrit mon programme pour qu'il ne fonctionne que si la valeur cherchée contient 12 caractères.
Si ma case est vide, ca marche parfaitement (aucun #N/A).
Par contre, la fonction marche même si ma case ne contient pas 12 caractères...
J'ai lu qque part que cette fonction comptait le nbre d'octets ?!
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 22 avril 2007 à 03:09
Quelle est la formule que tu as écrite ?
Si ce sont des valeurs numériques que tu recherches avec ta RechercheV, tu peux changer les "" par des 0. Comme ça les calculs incluant ces cellules ne causeront pas d'erreur.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 22 avril 2007 à 12:41
C'est quand même étonnant qu'Excel ne reconnaisse pas NBCAR, mais LEN, soit tu as une version Internationale (dans ce cas, normalement, RechercheV ne fonctionne pas non plus, mais Vlookup plutôt) soit, et je penche plutôt pour cette solution, tu colles ta formule dans une macro et dans ce cas, effectivement, comme tu utilises la propriété .FormulaR1C1 , il faut mettre les formules en anglais donc Len.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 22 avril 2007 à 21:49
C'est donc qu'il y a plus de 12 caractères dans ta cellule A1 ^^ Il arrive souvent, surtout avec des imports automatiques de fichiers textes par ex., qu'on ait un espace après le contenu d'une cellule, et l'espace compte comme un caractère.
Donc, tu vérifies s'il n'y a pas un espace en fin ... ou alors, tu encadres ta formule avec la fonction Trim.
If (len(trim(A1))=12... Then VLockUp
Mais, le pb, c'est que ton code est quand même bien bizarre ...
Tu mélanges du Excel et du VBA, c'est pour ça que je comprends mal ...
Ton code devrait être :
If (len(range("A1").value)=12... Then code de la rechercheV
Ou alors, la formule Excel comme donnée plus haut : =SI(NBCAR(A1)=12;RechercheV;"")
Parce que ton code, quand on le lit, A1 est considérée comme une variable. Et Len d'une variable non initialisée, ça fera toujours 0.
Donc, plein d'incohérence.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 22 avril 2007 à 22:05
Je pense effectivement qu'il y a un mélange entre les formules Excel et les formules VBA qui ne sont en aucun cas identiques. Que ce soit RechercheV ou VLookUp, ces 2 fonctions sont des formules Excel et non VBA.
On peut toutefois s'en servir sous VBA, mais ça revient à utiliser une formule dans une cellule.
Stephi83, si on récapitulait ?
Qu'est-ce que tu essaies de faire exacetement ?
1- Écrire une formule dans une cellule directement
2- Écrire une formule dans une cellule en passant par VBA
3- Écrire une valeur dans une cellule en passant par une fonction VBA
Stephi83
Messages postés19Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention29 avril 2007 22 avril 2007 à 23:19
Bonsoir MPi,
C'est un mélange des solutions 2 et 3.
Je sais que je pourrais tout simplement écrire ma fonction recherche V dans une cellule Excel.
En fait, je préfère passer par VBA afin d'activer la formule uniquement si la valeur que je cherche contient 12 caractères. Comme ça, ça m'évite de devoir effacer à la main les #N/A.
J'ai fait un test et c'est vrai que ma cellule recherchée contenait des espaces. En rajoutant Trim, ça marche parfaitement. Merci du tuyau.
Du coup, voici ce que ça donne :
Sub Valo_prix()
Worksheets("Valorisation").Range("P18").Select
For I = 1 To 50
If Len(Trim(ActiveCell.Offset(I - 1, -12))) <> 12 Then
ActiveCell.Offset(I - 1, 0).Value = ""
'Aucun code ISIN
Else
If Len(Trim(ActiveCell.Offset(I - 1, -12))) = 12 Then
'Identification d'un code ISIN
J'espère ne pas avoir été trop confuse dans mes explications
Par contre, est-ce qu'il y a un moyen d'avoir juste le résultat, sans que la formule recherche V apparaisse dans la cellule ?