Désactiver une formule sous certaines conditions

Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007 - 20 avril 2007 à 13:05
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 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

13 réponses

cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
20 avril 2007 à 14:05
Salut

Pour activer /desactiver un controle:   nom_du_controle.enable = true (ou false)

Pour tester s'il est vide 

if nom_du_controle.text = "" then    (ou voir ausi avec nom_du_controle.isnull je crois)

Pour connaitre la taille du champ contenu dans un controle

len(nom_du_controle.text)

Je pense que ca devrait te suffir.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
20 avril 2007 à 23:27
Si tu écris ta formule RechercheV et qu'elle retourne un #N/A, tu peux gérer ça avec un Si(EstErreur...)

ex: = Si(EstErreur(MaRechercheV); ""; MaRechercheV)
Il ne reste qu'à changer "MaRechercheV par la formule que tu utilises.

Si c'est à cause d'une cellule vide, tu peux aussi faire
Si(A1 ""; "" ; MaRechercheV)

Pour un mot de 12 caractères
=Si(Len(A1)<>12; ""; MaRechercheV)

Et tu peux faire un heureux mélange de tout cela...

MPi
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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.

Autrement, tout pareil

Molenn
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 avril 2007 à 15:29
Pour le LEN / NBCAR, effectivement, Len() c'est pour les versions anglaises... désolé...

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 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 ?!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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.

MPi
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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.

Ta formule devrait être dans Excel :

Si(ESTVIDE(A1)VRAI;"";SI(NBCAR(A1)=12;RECHERCHEV(A1, ...);"")

Molenn
0
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007
22 avril 2007 à 21:00
J'ai créé une fonction If (len(A1)=12... Then VLockUp et elle marche.

Le seul problème c'est qu'elle fonctionne même si ma case contient 5 caractères par exemple... Pourriez-vous m'éclairer ? Merci
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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.

Le mieux, donne ta fonction complète.

Molenn
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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

MPi
0
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 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
   
ActiveCell.Offset(I - 1, 0).FormulaR1C1 = "=VLOOKUP(RC[-12],Base!R4C1:R17C9,5,FALSE)"




End If
End If




Next I




End Sub



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 ?

Bonne soirée et bon second tour
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
23 avril 2007 à 02:31
Tu peux faire un copier/coller de la cellule en valeur. De la cellule au fur et à mesure de la boucle ou de la colonne une fois la boucle terminée.

Ou tu peux faire ta RechercheV en utilisant Find pour trouver la valeur dans la plage ou feuille Base. Ensuite tu inscris le résultat dans la cellule.

Il doit bien y avoir d'autres méthodes encore ...

MPi
0
Stephi83 Messages postés 19 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 29 avril 2007
23 avril 2007 à 10:37
Super
Merci beaucoup !

Stéphanie
0
Rejoignez-nous