Créer une fonction avec Index et Equiv

Bonjour,

J'ai une feuille excel avec deux colonnes: la première contient une liste de ce qu'on peut appeler des abbréviations toutes de 3 caractères et la colonne voisine contient le nom complet qui correspond à l'abbréviation de 3 caractères.

Par exemple en A1 j'ai BUD et en B1 j'ai Budapest, en A2 j'ai MAD et en B2 j'ai Madrid, .....

Le but est de créer une fonction nommée fullname qui me permettrait de retrouver ce à quoi correspond une abbréviation de 3 caractères.

Ainsi, si dans une autre feuille j'ai BUD dans la cellule X1,

si dans X2 j'écris =fullname(X1) alors j'obtiens Budapest dans cette cellule X2

En somme, le tout est de créer une fonction correspondant au code suivant en supposant que dans la feuille 'Sheet1' j'ai mes 2 colonnes dans la plage A1:B30 et que dans une autre feuille j'ai dans la cellule X1 cette abbréviation de 3 caractères dont je veuille le nom complet correspondant:

=INDEX(Sheet1!A1:B30,MATCH(X1,Sheet1!A1:B30,0),2)

Notez que j'utilise la fonction Match au lieu de Equiv car je suis sur une version anglaise.

Donc j'ai fait la tentative suivante pour créer cette fonction mais mes faibles connaissances en la matière ne m'ont pas permis de réussir:

Function fullname(cell As String)

    Application.Volatile
    Dim plage As Range
    Dim col As Range

    plage = ActiveWorkbook.Worksheets("Sheet1").Range("A1:B30")
    col = ActiveWorkbook.Worksheets("Sheet1").Range("A1:A30")

    With Application.WorksheetFunction
         fullname = .Index(plage, .Match(cell, col, 0), 2)
    End With

End Function

Merci de bien vouloir m'aider à rectifier le tir pour que cela fonctionne

evilwell

bonjour

joins ton fichier, c'est la meilleure des explications et on peut te répondre par le fichier

il semble que ce RECHERCHEV VLOOKUP

Oui le voici ci-joint !

16exemple-villes.zip (9.52 Ko)

re

RECHERCHEV

Merci, ça marche aussi comme ça dans la feuille mais mon but est de pouvoir le faire en créant une nouvelle fonction ce qui rend minimale l'instruction entrée et qui accessoirement m'aide à progresser dans la création de fonctions !

Alors quand j'adapte mon code à ta formule, ça ne marche pas non plus, j'aimerais donc comprendre pourquoi:

Function fullname(cell As String)

    Application.Volatile
    Dim plage As Range

    plage = ActiveWorkbook.Worksheets("Sheet1").Range("A1:B30")

    With Application.WorksheetFunction
         fullname = .VLookup(cell, plage, 2)
    End With
End Function

bonjour

mon conseil perso : VBA n'est pas Excel et il ne faut pas l'apprendre !

tous les dév avec VBA sont périssables, car ils enflent vite et deviennent ingérables (sauf si tu deviens un dieu comme on en trouve sur ce forum. Bonjour à eux au passage )

il vaut 1000 fois mieux progresser en Excel

mais ce n'est que mon avis

Oui, je comprends, on a chacun nos intérêts en fonction de nos aspirations et besoins, mais en l'occurrence je me permets d'insister si quelqu'un peut revoir ce code afin qu'il fonctionne !

Merci !!

personne ??

Bonjour,

ceci devrait faire l'affaire

Function fullname(cell)
    Dim cell_fullname As Range

    fullname = Empty
    Set cell_fullname = cell.Offset(, 1).EntireColumn.Find(cell.Value, LookAt:=xlPart)
    If Not cell_fullname Is Nothing Then fullname = cell_fullname.Value
End Function

merci mais je ne comprends pas comment faire fonctionner ce code.

Comment est intégré le fait que ma liste d'abbréviations et de noms correspondants sont dans les colonnes A et B ?

Pourrais-tu prendre le fichier que j'avais joint et y intégrer ce code avec un exemple stp ?

Merci !!

Avec juste la colonne des noms complets (exemple1)

Function fullname(cell As Range)
    Dim cell_fullname As Range

    fullname = Empty
    Set cell_fullname = ActiveSheet.Columns("B").Find(cell.Value, LookAt:=xlPart)
    If Not cell_fullname Is Nothing Then fullname = cell_fullname.Value

End Function

ou si te veux te servir d'une table d'équivalence (exemple 2) :

Function fullname(cell As Range)
    Dim cell_fullname As Range
    Dim i as integer

    fullname = Empty
    i = Application.Match(cell.Value, ActiveSheet.UsedRange.Columns("A"), 0)
    fullname = ActiveSheet.Cells(i, "B").Value

End Function

Merci ça marche super !

Et la 2ème solution me convient mieux car j'aurai des abbréviations de 3 lettres qui peuvent être différentes des 3 premières lettres du nom complet.

Et quand je remplace Activesheet par ActiveWorkbook.Worksheets("Sheet1") je peux faire le test sur une autre feuille donc c'est parfait !

Merci encore pour l'aide précieuse !!

Rechercher des sujets similaires à "creer fonction index equiv"