VBA dimension de la variable fonction Vlookup

Sylvain -  
Msylvain Messages postés 11 Statut Membre -
Bonjour à tous,

Mon problème est le suivant:
J'utilise la fonction Vlookup pour rechercher une donnée dans un tableau, jusque là tout va très bien la valeur que je souhaite obtenir est la bonne. (appelons la : "val")
Là où ça ne va plus c'est quand je souhaite réutiliser val que j'ai obtenu par la recherche du Vlookup. Val devrait être un integer ou un single. Mais quand l'execution du programme ce fait et qu'il arrive au calcul ou val intervient alors le programme plante et un message d'erreur survient en disant : incompatibilité de type.
Et je ne sais pas comment je peux faire résoudre ce problème.

En espérant que vous puissiez me venir en aide.

Sylvain

6 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    Dans un premier temps, prend bien note que la syntaxe [ val ]
    n'est pas permis sous VBA puisqu'il s'agit d'un mot réservé.

    Val est une instruction du VBA :

    L'aide de VBA nous indique que :
    Val, fonction
    Renvoie le nombre contenu dans une chaîne de caractère sous la forme d'une valeur numérique d'un type approprié.

    De plus, le résultat de l'instruction VLookUp n'est pas forcément
    valide, il te faudra tester le résultat et le convertir au besoin.

    Les instructions comme [ CDbl, CSng ] te permetrons de convertir
    le résultat trouvé en "Double" ou en "Single".

    Ne jamais considéré un résultat de lecture comme étant un type
    défini. Le contenu de [ ActiveCell.Value ] ne peut jamais être
    deviné. Bien que Excel permette de formatter les cellules, leurs
    contenus en est inconnu à la base.

    Ne jamis oublier que le contenant et le contenu sont deux éléments
    distinct de l'équation. En programmation, il est souhaitable de
    considéré la lecture d'un contenant comme étant de Type Variant.

    C'est au programmeur de valider les résultats obtenus.

    Ex.:
    Option Explicit 
    
    Sub Test() 
    
        Dim Valeur As Variant 
         
        Valeur = Val(ActiveCell.Value) 
        Valeur = CDbl(ActiveCell.Value) 
        Valeur = CSng(ActiveCell.Value) 
         
    End Sub 
    ' 
    


    Comme toujours, ce texte constitue mon opignon personnel.

    Il existe plusieurs façon de penser, donc plusieurs façons
    de programmer.

    Cdt

    Lupin
    1
  2. Msylvain Messages postés 11 Statut Membre
     
    Tout d'abord merci de ton aide.

    Je suis d'accord pour le val je l'ai nommé ainsi seulement pour m'exprimer clairement et effectivement il se peut que j'ai mal choisit =).
    Pour ce qui est de sa dimension j'ai effectivement constaté que c'était un variant dans ce cas dois-je utiliser le bout de code que tu as écris tel quel pour transformer cette variable qui est pour le moment un variant en single, ou y a t'il autre chose à ajouter?

    cdt

    Sylvain
    0
  3. Utilisateur anonyme
     
    re:

    Dans un premier temps, il te faut valider si tu obtiens un résultat.

    Le réultat de VLookUP est-il vide ?

    Quelque chose du genre :

    Option Explicit  
    
    Sub Test()  
    
        Dim Reponse As Variant  
        Dim Resultat As Single  
          
        Reponse = ActiveCell.Value ' VLookUp ... 
          
        If (Reponse <> "") Then  
            On Error Resume Next  
            Resultat = CSng(ActiveCell.Value)  
            If (Err) Then  
                MsgBox "Valeur incorecte"  
            Else  
                MsgBox "Traitement désiré..."  
            End If  
        End If  
             
    End Sub  
    '  
    


    Cdt

    Lupin
    0
  4. Msylvain Messages postés 11 Statut Membre
     
    Option Explicit
    Sub test()
    
        Dim nom As String
        Dim x As Single
        Dim test1 As Variant
        Dim test2 As Variant
    
        nom = InputBox("écrire le nom souhaité")
        Sheets("table").Select
        test1 = Application.VLookup(nom, Range("A2:E4"), 3, False)
        test2 = Application.VLookup(nom, Range("A2:E4"), 4, False)
        
        x = test1 * test2
    
    End Sub
    


    Voici le code que j'ai et ce que je veux exactement c'est transformé mes deux variable test1 et test2 en single pour pouvoir faire les calculs que je souhaite par la suite.

    Je continue d'essayer avec ce que vous m'avez transmis précédement mais si avec ce bout de code vous réussissez à trouver une solution plus simple je suis prenneur =)

    Merci,

    Sylvain
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    re :

    Voilà un exemple testé !

    Sub Test()
    
        Dim Nom As String
        Dim x As Single
        Dim test1 As Variant
        Dim test2 As Variant
    
        Nom = InputBox("écrire le nom souhaité")
        Sheets("table").Select
        test1 = Application.VLookup(Nom, Range("A2:E4"), 3, False)
        test1 = CStr(test1)
        
        If Not (test1 = "Erreur 2042") Then
            test1 = CSng(test1)
            test2 = Application.VLookup(Nom, Range("A2:E4"), 4, False)
            test2 = CStr(test2)
            If Not (test2 = "Erreur 2042") Then
                test2 = CSng(test2)
                x = test1 * test2
            Else
                MsgBox "Seconde recherche absente"
            End If
        Else
            MsgBox "Première recherche absente"
        End If
    
    End Sub
    '
    


    Cdt

    Lupin
    0
  7. Msylvain Messages postés 11 Statut Membre
     
    Re,

    Tout d'abord merci beaucoup pour ton aide.
    Le problème n'est plus le même à l'aide de cette macros mais il persiste toujours j'ai mon tableau avec des valeurs mais malgrès ça la macros me dit à chaque fois "Première recherche absente".
    Pas grave j'ai obté pour l'alternative suivante :
    J'effectue la recherche que je souhaitais faire avec la macros sur ma feuille excel j'en récupère le résultat puis je réalise ensuite les calculs souhaités grâce aux résultats obtenus. Cela convient pour le moment ça fonctionne.

    Encore merci.

    cdt,

    Sylvain
    0