IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[DAO] RECHERCHEV sur classeur fermé et variable [FAQ]


Sujet :

Contribuez

  1. #1
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut [DAO] RECHERCHEV sur classeur fermé et variable
    Suite à deux questions, j'ai adapté les sources DAO précédentes pour pouvoir réaliser des RECHERCHEV sur des classeurs fermés dont les chemin/feuille/plage sont variables (chaine de caractères).

    http://www.developpez.net/forums/sho...d.php?t=420763
    http://www.developpez.net/forums/sho...d.php?t=420611

    Ajouter impérativement au classeur la référence DAO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Option Explicit
     
    Public Function XRECHERCHEV(ByVal valRecherchee As Variant, _
                                ByVal TabMatrice As Variant, _
                                ByVal colonneIndex As Integer)
     
     
    If TypeName(TabMatrice) = "Range" Then
        XRECHERCHEV = Application.WorksheetFunction.VLookup(valRecherchee, _
                                                            TabMatrice, _
                                                            colonneIndex, _
                                                            True)
    Else
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Dim sRange As String
        Dim sSheet As String
        Dim sWbook As String
        Dim sFPath As String
        Dim sSQL   As String
     
        sRange = Replace(Split(TabMatrice, "!")(1), "$", vbNullString)
        sSheet = Split(Split(TabMatrice, "]")(1), "'")(0)
        sWbook = Split(Split(TabMatrice, "[")(1), "]")(0)
        sFPath = Mid(Split(TabMatrice, "[")(0), 2)
     
        valRecherchee = "'" & Replace(valRecherchee, "'", "''") & "'"
     
        sSQL = "SELECT [F" & colonneIndex & "] " & _
               "FROM [" & sSheet & "$" & sRange & "] " & _
               "WHERE [F1] = " & valRecherchee
     
     
        Set db = DAO.OpenDatabase(sFPath & sWbook, False, False, "Excel 8.0;HDR=NO;")
        Set rs = db.OpenRecordset(sSQL, DAO.dbOpenSnapshot)
     
        If rs.EOF And rs.BOF Then
            XRECHERCHEV = "no match"
        Else
            XRECHERCHEV = rs.Fields(0)
        End If
        Set rs = Nothing
        Set db = Nothing
    End If
     
    End Function
    exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =XRECHERCHEV(A2;"'C:\Perso\[" & D2 & "]_Synthèse'!$A$2:$F$35";6)

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    voici la même fonction qui ne nécessite pas l'ajout de référence ... c'est sans doute plus simple à implémenter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Public Function XRECHERCHEV(ByVal valRecherchee As Variant, _
                                ByVal TabMatrice As Variant, _
                                ByVal colonneIndex As Integer)
     
     
    If TypeName(TabMatrice) = "Range" Then
        XRECHERCHEV = Application.WorksheetFunction.VLookup(valRecherchee, _
                                                            TabMatrice, _
                                                            colonneIndex, _
                                                            True)
    Else
        Dim oDAO As Object
        Dim db As Object 'DAO.Database
        Dim rs As Object 'DAO.Recordset
        Dim sRange As String
        Dim sSheet As String
        Dim sWbook As String
        Dim sFPath As String
        Dim sSQL   As String
     
        sRange = Replace(Split(TabMatrice, "!")(1), "$", vbNullString)
        sSheet = Split(Split(TabMatrice, "]")(1), "'")(0)
        sWbook = Split(Split(TabMatrice, "[")(1), "]")(0)
        sFPath = Mid(Split(TabMatrice, "[")(0), 2)
     
        valRecherchee = "'" & Replace(valRecherchee, "'", "''") & "'"
     
        sSQL = "SELECT [F" & colonneIndex & "] " & _
               "FROM [" & sSheet & "$" & sRange & "] " & _
               "WHERE [F1] = " & valRecherchee
     
     
        Set oDAO = CreateObject("DAO.DBEngine.36")
        Set db = oDAO.Workspaces(0).OpenDatabase(sFPath & sWbook, False, False, "Excel 8.0;HDR=NO;")
        Set rs = db.OpenRecordset(sSQL)
     
        If rs.EOF And rs.BOF Then
            XRECHERCHEV = "no match"
        Else
            XRECHERCHEV = rs.Fields(0)
        End If
        Set oDAO = Nothing
        Set rs = Nothing
        Set db = Nothing
    End If
     
    End Function

  3. #3
    Membre averti Avatar de jawed
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 499
    Points : 304
    Points
    304
    Par défaut
    Bonsoir cafeine
    Merci pour cette fonction ca merite des
    j'ai pas ma base excel sous mes yeux mais pour etre sur votre fonction traite-elle les valeur exacte et proche de la valeur recherché ??
    Nb:je n'ai pas d'experience en VBA
    cordialement

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello Jawed,

    contrairement à l'authentique RECHERCHEV(), la fonction ne gère par les valeurs proches. Si tu peux traduire ce que tu entends par proche en SQL, c'est possible.

Discussions similaires

  1. [XL-2007] RechercheV, classeur fermé et variable
    Par Judayan dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/04/2013, 10h02
  2. [XL-2007] RechercheV sur classeur fermé - Problème de variable
    Par desv001a dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/03/2013, 13h16
  3. Recherchev sur classeur fermé dont les feuilles et plages sont variables
    Par JonathanF dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/02/2013, 14h18
  4. [XL-2003] RECHERCHEV sur classeur fermé et variable
    Par Remsdu dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/10/2009, 18h29
  5. recherchev sur classeur fermé
    Par Eufalacok dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/08/2008, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo