Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA, Formule Vlookup + texte

  • Initiateur de la discussion Initiateur de la discussion Vyserk
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

V

Vyserk

Guest
Bonjour à tous !
Dans le cadre de mon travail, je dois faire une petite formule sous VBA. Malheureusement, ma formule ne fonctionne pas correctement (elle plante à la 1ère ligne et donne #Valeur! comme si elle n'arrivait pas à lire les valeurs).
Le but de cette formule est de donner le nom d'une personne à partir d'un partir d'un tableau de correspondance. Il y a 2 données d'entrées pour la formule et sur ces 2 données, il y est effectué des recherchev. Malheureusement, les valeurs des cellules n'étant pas forcément exacte, je suis obligé d'utilisé des "*"&_&"*" pour faire retrouver la correspondance. Chaque donnée peut donner 3 résultats différents, soit il n'y a rien dedans et j'obtiens le premier mot de la colonne de mon tableau de correspondance, soit il y a quelques choses dedans mais pas de correspondance (donc erreur) ou soit il y a quelques choses et cela correspond.

Je suis désespéré car j'ai utilisé toutes les variantes possibles de formules que je connais pour que cela fonctionne... Pourriez-vous m'aider ?
Cordialement,
V

Function Qualiticien(cel_PC, cel_SAM)

If IsError(Application.VLookup("" * "" & (cel_PC.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("D1:E100"), 2, False)) = True Then 'détecte si la recherchev sur le PC donne une erreur
'La recherchev sur le PC donne une erreur
If IsError(Application.VLookup("" * "" & (cel_SAM.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("B1:E100"), 4, False)) = True Then 'détecte si la recherchev sur le SAM donne une erreur
Qualiticien = "Pas de correspondance"
Else
'la recherchev sur le SAM ne donne pas une erreur
If Application.VLookup("" * "" & (cel_SAM.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("B1:E100"), 4, False) = "qualiticien" Then 'détecte si la recherchev sur le SAM donne qualiticien
'la recherchev sur le SAM donne qualiticien
Qualiticien = "Pas de correspondance"
Else
'la recherchev sur le SAM ne donne pas qualiticien
Qualiticien = Application.VLookup("" * "" & (cel_SAM.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("B1:E100"), 4, False)
End If
End If
'la recherchev sur le PC ne donne pas une erreur
If Application.VLookup("" * "" & (cel_PC.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("D1:E100"), 2, False) = "Qualiticien" Then 'détecte si la recherchev sur le PC donne qualiticien
'la recherchev sur le PC donne qualiticien
If IsError(Application.VLookup("" * "" & (cel_SAM.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("B1:E100"), 4, False)) = True Then 'détecte si la recherchev sur le SAM donne une erreur
Qualiticien = "Pas de correspondance"
Else
'la recherchev sur le SAM ne donne pas une erreur
Qualiticien = Application.VLookup("" * "" & (cel_SAM.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("B1:E100"), 4, False)
End If
Else
'la recherchev sur le PC est différent de qualiticien
Qualiticien = Application.VLookup("" * "" & (cel_PC.Value) & "" * "", Sheets("Correspondances SAM-Qual").Range("D1:E100"), 2, False)
End If
End If
End Function
 
Re : VBA, Formule Vlookup + texte

Bonjour Vyserk et bienvenue 🙂,
Sans garantie, car un fichier d'essai nous permettrait de tester et de mieux comprendre 🙁...
Code:
Function Qualiticien(cel_PC As Range, cel_SAM As Range) As String
Dim C1 As Range, C2 As Range
Set C1 = Sheets("Correspondances SAM-Qual").Range("D1:D100").Find(cel_PC.Value, lookat:=xlPart)
Set C2 = Sheets("Correspondances SAM-Qual").Range("B1:B100").Find(cel_SAM.Value, lookat:=xlPart)
If C1 Is Nothing Or C2 Is Nothing Then Qualiticien = "Pas de correspondance": Exit Function
If LCase(C1.Offset(0, 1)) = "qualiticien" And LCase(C2.Offset(0, 3)) = "qualiticien" Then
Qualiticien = "Qualiticien"
Else
Qualiticien = "Pas de correspondance"
End If
End Function
Bonne soirée 😎
 
Re : VBA, Formule Vlookup + texte

Bonjour,
j'ai essayé votre formule. Malheureusement, cette dernière n'a pas fonctionné, elle me fait exactement le même type d'erreur que ma formule (#VALEUR dès la première ligne).
Cela peut être du au fait que toutes les valeurs recherchées sont du texte.
Je vous joins un petit exemple de mon document.
La 1ère feuille est le tableau de correspondance.
La 2ème feuille est le tableau que nous utilisons pour gérer les projets (il y a aussi la formule que l'on cherche à remplacer, vous comprendrez que j'ai censuré certaines informations non essentiel).
La 3ème feuille est comment on désire que la nouvelle formule fonctionne. Je pourrais l'écrire en formule Excel classique mais cela serait illisible et la maintenance serait assez compliquée.
Merci beaucoup d'avance pour votre aide !
V.
 

Pièces jointes

Re : VBA, Formule Vlookup + texte

Le problème, c'est que je ne peux pas diffusé plus (j'en diffuse déjà beaucoup !).
Dans le tableau, il n'y a que les données nous intéressant. Je m'explique.
Dans la colonne qualiticien (2ème feuille), il y est écrit une formule qui fait une recherchev sur les colonnes "Purchasing Commodity" et "SAM". Une correspondance est recherché sur ces PC et SAM pour trouver le qualiticien correspondant dans le tableau de correspondance (1ère feuille).
Pour l'instant, cette formule est assez batarde et constitué de bric et de broc...
L'idée est de la formaliser en une formule VBA simple qui peut gérer les 9 cas possibles (3ème feuille du fichier) en fonction des résultats des recherchev (trouve le qualiticien car correspondance, sort une erreur car pas de correspondance, sort "Qualiticien" (1er résultat de la colonne des correspondance) quand rien d'écrit dans la case source. J'ai schématisé avec un logigramme sur la 3ème feuille comment on voulait que cette formule VBA fonctionne.
Je ne vois pas comment vous expliquer plus ce que l'on cherche. Posez moi directement vos questions si vous le désirez si vous n'avez pas compris.
 
Re : VBA, Formule Vlookup + texte

Re 🙂,
Ben noter dans les feuilles les colonnes où l'on cherche, et ce que l'on cherche, et expliciter ton tableau récapitulatif 🙄...
A + 😎
 
Re : VBA, Formule Vlookup + texte

Voilà une version plus complète de ce que je cherche à faire. Après, je ne peux rien dire de plus sans dévoiler des informations importantes. :s
Tout y est expliqué, tout le reste n'est que de simples recherchev.
 

Pièces jointes

Re : VBA, Formule Vlookup + texte

Re 🙂,
Pas complêtement sûr 🙄...
A tester
Code:
Function Qualiticien(cel_PC As Range, cel_SAM As Range) As String
Dim C1 As Range, C2 As Range
Set C1 = Sheets("Correspondances SAM-Qual").Range("D1:D100").Find(cel_PC.Value, lookat:=xlPart)
Set C2 = Sheets("Correspondances SAM-Qual").Range("B1:B100").Find(cel_SAM.Value, lookat:=xlPart)
If C1 Is Nothing And C2 Is Nothing Then Qualiticien = "Pas de correspondance": Exit Function
If C1 Is Nothing Or C2 Is Nothing Then
If C1 Is Nothing Then Qualiticien = C2.Offset(0, 3) Else Qualiticien = C1.Offset(0, 1)
Exit Function
End If
If C1.Offset(0, 1) <> "" Then
Qualiticien = C1.Offset(0, 1)
Else
Qualiticien = "Qualiticien"
End If
End Function
Bonne suite 😎
 
Re : VBA, Formule Vlookup + texte

Merci pour ton aide 😉
J'ai fais un mix des 2 méthodes car ta formule ne fonctionnait pas parfaitement comme nous le voulions.

La voici :

Code:
Function Qualiticien(cel_PC As Range, cel_SAM As Range) As String
Dim C1 As Range, C2 As Range
Set C1 = Sheets("Correspondances SAM-Qual").Range("D1:D100").Find(cel_PC.Value, lookat:=xlPart)
Set C2 = Sheets("Correspondances SAM-Qual").Range("B1:B100").Find(cel_SAM.Value, lookat:=xlPart)
If cel_PC = vide Then 'détecte si la case PC est vide
'La case PC donne un résultat vide
    If cel_SAM = vide Then 'détecte si la case SAM est vide
    'La case SAM donne un résultat vide
        Qualiticien = "Qualiticien"
    Else
    'la case SAM n'est pas vide
        If C2 Is Nothing Then 'détecte si la recherche sur le SAM ne trouve pas de correspondance
        'la recherche sur le SAM ne donne pas de correspondance
            Qualiticien = "Pas de correspondance"
        Else
        'la recherche sur le SAM trouve une correspondance
            Qualiticien = C2.Offset(0, 3)
        End If
    End If
Else
'La case PC ne donne pas un résultat vide
    If C1 Is Nothing Then  'détecte si la recherche sur le PC trouve une correspondance
    'la recherche sur le PC ne trouve pas de correspondance
        If cel_SAM = vide Then 'détecte si la case SAM est vide
        'La case SAM est vide
            Qualiticien = "Pas de correspondance"
        Else
        'La case SAM n'est pas vide
            If C2 Is Nothing Then 'détecte si la recherche sur le SAM trouve une correspondance
            'La recherche sur le SAM ne trouve pas de correspondance
                Qualiticien = "Pas de correspondance"
            Else
            'La recherche sur le SAM trouve une correspondance
                Qualiticien = C2.Offset(0, 3)
            End If
        End If
    Else
    'la recherchev sur le PC  est différent de qualiticien
        Qualiticien = C1.Offset(0, 1)
    End If
End If

En tout cas, un grand merci à toi 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
173
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…