VBA recherche tableau + attribution

Résolu
titw - Modifié par titw le 3/09/2013 à 14:04
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 3 sept. 2013 à 15:42
Bonjour,

Je ne mis connais pas bien en VBA mais j'ai absolument besoin de résoudre ce problème:

Sur une feuille de mon classeur se trouve un tableau de 4 colonnes. La deuxième colonne (B) comporte des libellés bancaires du type "REMISE CB 13/07/13".
Sur une autre feuille se trouve un tableau de 2 colonnes comportant en A une liste de mots clés ("PRELEVEMENT", "CB", "CHEQUE", ...) et en B un numéros de compte correspondant à chaque mot clé ("471000", "426000", ...)

L'objectif serait d'attribuer automatiquement dans la 5eme colonne du premier tableau, le numéro de compte correspondant au mot clé présent dans le libellé.

Je pensais m'en sortir avec une formule avec une multitude de SI imbriqués mais la liste de mots clés et de numéros de compte est complètée/modifiée régulièrement...

J'ai également essayé de passé par une fonction RECHERCHEV mais elle ne me semble pas assez souple pour mon problème.

J'ai farfouillé un petit peu sur le net pour essayer de coder la macro mais je ne m'en sors pas...
Donc si une âme charitable pouvait me donner quelques pistes/indications, ce serait vraiment génial! :)

Par avance, merci!

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
3 sept. 2013 à 14:35
Bonjour,

Je t'ai fait une petite fonction qui devrait correpondre à tes besoins.

[Code à placer de préférence dans un MODULE ]

Public Function MajCompte(Libelle As String, ListKeyWords As Range, ListeCompte As Range)
Dim Compte As String
'On parcourt la liste des mots clés pour trouver une correspondance
For Each cell In ListKeyWords
    'On teste le texte en MAJUSCULE pour éviter des erreurs
    If InStr(1, UCase(Libelle), UCase(cell.Value)) Then
        'Récupération du Compte (cellule se trouvant à la même ligne que le mot clé mais
        'dans la plage ListeCompte)
        Compte = ListeCompte.Rows(cell.Row)
        Exit For
    End If
Next
MajCompte = Compte
End Function



-> A utiliser comme une formule
Exemple ( formule à mettre dans la cellule F2 de ta feuille par exemple)
=MajCompte($B2;Feuil2!$B$1:$B$20;Feuil2!$C$1:$C$20)


La formule est ensuite à dupliquer sur toutes tes autres lignes ( faire glisser vers le bas pour qu'il incrémente automatiquement le numéro de ligne du premier argument.

* Le deuxième argument correspond à la plage de cellule contenant la liste de tes mots clés. Pour l'exemple j'ai mis : B1 à B20 dans la feuille 2

** Le troisième argument est quand à lui, la liste des comptes (ici j'ai pris de C1 à C20, toujours dans la feuille 2 )


ATTENTION :
Vu qu'à chaque ligne où tu appelleras cette fonction il relance la macro..si tu dois réaliser ceci sur un TRES GRAND tableau, il se pourrait que sa mette un peu de temps à tout rafraichir...
0
Je ne m'attendais pas à une réponse si précise et si rapide!
Merci beaucoup, tout fonctionne à merveille :)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
3 sept. 2013 à 15:42
:-)
0
Rejoignez-nous