Problème de sélection de plage de données

sky_bilout

XLDnaute Nouveau
Bonjour à tous!
J'ai des petits soucis pour définir une plage de données avec des cellules non voisines. Je voulais tout simplement dans ma formule séparer les cellules d'un point virgule mais du coup à l'intérieur de ma formule, Excel crois que je passe au paramètre suivant et tombe en erreur.
Explication: en réalité je veux utliser la fonction bdlire qui est comme suit:
=bdlire(plage_de_donnée; champs; critères)

Ma plage de données A1:B6 du feuillet "SOURCE":
Champs1 - Champs2
a - 1
b - 2
c - 3
d - 4
e - 5

A partir de cette liste je voudrais remplir la liste suivante A1:B2 du feuillet "RESULTAT":

Champs1 - Champs2
b - ???

j'ai donc fait dans la case "???":
=bdlire(SOURCE!A1:B6; SOURCE!B1; RESULTAT!A1:A2)

et donc à la place de ???? apparaît 2, jusqu'ici pas de soucis!!

j'en arrive au problème: en fait je veux le résultat sur plusieurs lignes:
Champs1 - Champs2
a - ???
c - ???
e - ???

Pour la première ligne >> toujours aucun souci puisque la plage de données est Feuill2!A1:A2 donnée pour le paramètre "critère" (désolé pour la confusion, à ne pas confondre avec le premier paramètre qui s'appelle "plage de données"...)

En revanche, pour saisir le paramètre "critère" des 2 lignes suivantes, j'ai voulu mettre:
=bdlire(SOURCE!A1:B6; SOURCE!B2; RESULTAT!A1;A3)
=bdlire(SOURCE!A1:B6; SOURCE!B2; RESULTAT!A1;A4)

parcequ'à chaque fois je ne dois sélectionner pour le paramètre "champs" de bdlire que le nom de la colonne et la valeur que je veux lui donner(soit a soit c soit e)

quelqu'un peut me dire commet dans la formule lui donner ses 2 cellules le nom du champs et sa valeur, autrement que par le ";"?

Merci beaucoup!!
 

PMO2

XLDnaute Accro
Re : Problème de sélection de plage de données

Bonjour,

Il semblerait que cette fonction ne fonctionne pas sur des critères en ligne avec un seul nom de champ en en-tête
comme vous le spécifiez dans votre message. En revanche cela fonctionne si on met les critères en colonne chacun
avec un en-tête (nom du champ). Mais je ne suis pas spécialiste de cette formule et, peut être, la solution existe.

Je vous propose l'emploi d'une fonction personnalisée qui comporte 4 arguments
DataBase : correspond à l'entièreté de votre base de données (titres des champs inclus)
NomChampEquivalence : adresse du champ dans lequel on doit trouver une équivalence
NomChampReponse : adresse du champ dans lequel on désire trouver la cible à afficher
Critere : critere de recherche dans le ChampEquivalence pour trouver la cible dans le ChampReponse

Il faudra inclure dans l'usage de cette fonction les $ pour obtenir des références absolues selon le cas.

Code à copier dans un module standard

Code:
Function BDLIRE_pmo( _
    DataBase As Range, _
    NomChampEquivalence As Range, _
    NomChampReponse As Range, _
    Critere As Range) As Variant
Dim var
Dim i&
Dim j&
Dim ChampDBCol&
Dim ChampCritCol&
var = DataBase
For j& = 1 To UBound(var, 2)
    If NomChampEquivalence = var(1, j&) Then
      ChampDBCol& = j&
    ElseIf NomChampReponse = var(1, j&) Then
      ChampCritCol& = j&
    End If
Next j&
For i& = 1 To UBound(var, 1)
  If var(i&, ChampDBCol&) = Critere Then
    BDLIRE_pmo = var(i&, ChampCritCol&)
  End If
Next i&
End Function

Voir les exemples d'utilisation dans la feuille "test" du classeur joint.

Bon courage.

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
312 238
Messages
2 086 491
Membres
103 234
dernier inscrit
matteo75654548