Formule droite et fonction ou imbriqué

dina1

XLDnaute Nouveau
Je voudrais imbriqué des ou avec une formules droite et gauche pour qu'elle me donne un résultat spécifique

Je m'explique à travers un exemple dans un fichier excel : cf fichier joint

J'espère que j'ai été clair :D

Merci d'avance
 

Pièces jointes

  • Base_test.xlsx
    11.9 KB · Affichages: 20

vgendron

XLDnaute Barbatruc
Bonjour aussi....
heureusement qu'il y a un fichier pour comprendre.. :-D

essaie avec une fonction personalisée que tu peux appeler comme une fonction normale excel
VB:
Function extrait(target As Range)
application.volatile
Liste = Array("abcdef", "bcdefg", "cdefgh", "defghi", "efghij", "fghijk", "ghijkl", "hijklm", "mlkjuh", "ghyfgd", "dfrtgf", "fgtyhu", "nbhbnh", "kiolpu")
Last5Caract = Right(target, 6)
trouvé = False
For Each ele In Liste
    If Last5Caract = ele Then
        trouvé = True
        Exit For
    End If
Next ele
If trouvé Then
    extrait = Last5Caract
Else: extrait = Mid(target, 4, 5)
End If


End Function
 

vgendron

XLDnaute Barbatruc
sinon, si tu souhaites pouvoir récupérer TOUT le mot fraise au lieu de juste Frais
VB:
Function extrait2(target As Range)
Application.Volatile
Liste = Array("abcdef", "bcdefg", "cdefgh", "defghi", "efghij", "fghijk", "ghijkl", "hijklm", "mlkjuh", "ghyfgd", "dfrtgf", "fgtyhu", "nbhbnh", "kiolpu")
mot = Split(target, " ")

LastCaract = mot(UBound(mot))
trouvé = False
For Each ele In Liste
    If LastCaract = ele Then
        trouvé = True
        Exit For
    End If
Next ele
If trouvé Then
    extrait = LastCaract
Else: extrait = mot(1)
End If

End Function
 

dina1

XLDnaute Nouveau
Bonjour aussi....
heureusement qu'il y a un fichier pour comprendre.. :-D

essaie avec une fonction personalisée que tu peux appeler comme une fonction normale excel
VB:
Function extrait(target As Range)
application.volatile
Liste = Array("abcdef", "bcdefg", "cdefgh", "defghi", "efghij", "fghijk", "ghijkl", "hijklm", "mlkjuh", "ghyfgd", "dfrtgf", "fgtyhu", "nbhbnh", "kiolpu")
Last5Caract = Right(target, 6)
trouvé = False
For Each ele In Liste
    If Last5Caract = ele Then
        trouvé = True
        Exit For
    End If
Next ele
If trouvé Then
    extrait = Last5Caract
Else: extrait = Mid(target, 4, 5)
End If


End Function


Merci beaucouppppp vraiment

Pourrais tu m'expliquer en détail le code :))))


Que veut dire le : trouvé = False
et
if trouvé Then
extrait = Last5Caract
Else: extrait = Mid(target, 4, 5)
End If
 

Brice G

XLDnaute Occasionnel
Bonjour, vous trouverez sans doute cela moins élégant, :p ; mais ça fonctionne sans VBA, avec une formule utilisant les fonctions SI, OU, DROITE (que tu voulais utiliser) et STXT.:)
J'ai brièvement expliqué le rôle de chaque fonction sur le fichier, mais tu trouveras tout ce que tu veux et des exemples sur internet.;):)
 

Pièces jointes

  • Base_test_brice.xlsx
    12.9 KB · Affichages: 19

vgendron

XLDnaute Barbatruc
Trouvé est une variable booleenne (vrai ou faux)
trouvé =false pour initialiser la variable:; par défaut on suppose qu' on a pas trouvé la séquence de lettre
if trouvé then --> est strictement équivalent à if trouvé=true.. (le =true est implicite)
 

vgendron

XLDnaute Barbatruc
VB:
Function extrait(target As Range) 'définit la fonction personalisée Extrait avec une cellule en argument
application.volatile 'permet à la fonction d'actualiser le résultat si la feuille change
Liste = Array("abcdef", "bcdefg", "cdefgh", "defghi", "efghij", "fghijk", "ghijkl", "hijklm", "mlkjuh", "ghyfgd", "dfrtgf", "fgtyhu", "nbhbnh", "kiolpu") 'on définit la liste des élements à chercher
Last6Caract = Right(target, 6) 'on récupère les 6 derniers caractères de la cellule donnée en argument
trouvé = False 'initiale à faux
For Each ele In Liste 'on parcourt la liste des éléments
   If Last6Caract = ele Then 'si les 6 derniers caractères de la cellule target correspondent à l'élément en cours de test
        trouvé = True 'trouvé mis à vrai
       Exit For 'on sort de la boucle.. pas la peine d'aller au bout
   End If
Next ele
If trouvé Then 'si on a trouvé
    extrait = Last6Caract 'on affecte les 6 derniers caractère à la fonction : histoire de retourner le résultat...
Else: extrait = Mid(target, 4, 5) 'si pas trouvé, alors on renvoit les 5 caractères à partir du 4eme
End If
End Function
 

Brice G

XLDnaute Occasionnel
Hello BriceG
avec une formule un peu plus courte :-D
suffit de mettre la liste des elements abcdef, bcdef.... en colonne (D14:D27) par exemple
et taper la formule
=SI(ESTNUM(EQUIV(DROITE(A1;6);$D$14:$D$27;0));DROITE(A1;6);STXT(A1;4;5)

Bonjour, aaah oui ça m'avait effleuré l'esprit de mettre ça dans dans une colonne ou quoi mais je n'ai pas creusé, merci de l'info ; formule plus courte avec estnum et equiv en plus, aaah finalement c'est moi qui aurais appris un truc, merci !


Edit : Tu auras été très complet, bravo ; l'auteur a tout ce qu'il lui faut.:)
 
Dernière édition:

Discussions similaires

Réponses
13
Affichages
534
Réponses
4
Affichages
224

Membres actuellement en ligne

Statistiques des forums

Discussions
314 144
Messages
2 106 358
Membres
109 563
dernier inscrit
sylla121