RechercheV sur 2 critères avec recherche selon nom d'une colonne

juju44

XLDnaute Nouveau
Bonjour à tous,

Voici mon problème : je cherche a récupérer une valeur selon 2 critères ("année/mois" et "zone géographique"). J'arrive à le faire en utilisant la fonction Index(), mais je ne suis pas tout à fait satisfait puisqu'en premier argument de cette fonction je dois spécifier la colonne qui m'intéresse, or je souhaiterais que cela soit "automatisé" selon le nom de la colonne, et non pas son numéro.

Un fichier vaut mieux qu'un long discours...

Je vous remercie d'avance.
 

Pièces jointes

  • historique2.xls
    207.5 KB · Affichages: 79
  • historique2.xls
    207.5 KB · Affichages: 78
  • historique2.xls
    207.5 KB · Affichages: 83

Thomasson

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

Bonjour juju,

Je viens de t'ecrire une fonction rapide pour remplir le tableau du bas dans l'omglet "rapport".
Je l'ai testee, elle marche.

Code:
Sub rapport_test()

Dim annee As String
Dim mois As String
Dim date_select As String
Dim zone As String
Dim volume As String


For i = 21 To 40

    Sheets("rapport").Activate
        annee = Cells(i, 1).Value
        mois = Cells(i, 2).Value
        date_select = annee & mois
        zone_min = Cells(6, 2).Value
        zone = UCase(zone_min)
        
    Sheets("HIST_TOTAL").Activate
        
        For j = 2 To 1000
            If Cells(j, 2) = "" Then Exit For
            
            If Cells(j, 2) = date_select Then
                zone_tmp = Cells(j, 4).Value
                Cells(j, 4).Value = UCase(zone_tmp)
                If Cells(j, 4) = zone Then
                    volume = Cells(j, 6).Value
                    Cells(j, 4).Value = zone_tmp
                    Exit For
                End If
                Cells(j, 4).Value = zone_tmp
            End If
        Next j
                  
    Sheets("rapport").Activate
    Cells(i, 3).Value = volume
    
Next i

End Sub

Par contre il me reste une question pour le remplissage du nombre de personnes en haut : j'ai bien compris que tu souhaite sortir le volume pour le mois et la zone voulue, mais ta condition de date va t'elle être changée a chaque fois a la main en L4C2 ??

Cdlt,
Thomasson
 

Jocelyn

XLDnaute Barbatruc
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

bonjour le Forum,
Bonjour juju44,

un essai en fichier si j'ai bien compris la demande

EDIT : Bonjour Thomasson
 

Pièces jointes

  • historique2.xls
    220.5 KB · Affichages: 71
  • historique2.xls
    220.5 KB · Affichages: 77
  • historique2.xls
    220.5 KB · Affichages: 73
Dernière édition:

juju44

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

Merci Jocelyn et Thomasson.

Je ne souhaite pas utiliser de macro pour cette partie, mais merci tout de même. Et je compte rajouter par la suite un combobox pour le choix des dates.

En ce qui concerne ta solution Jocelyn, peux-tu m'expliquer comment cela fonctionne ? Notamment la fonction décaler et choisir.

Dans l'absolu, ce que je souhaiterai, c'est que si je remplace dans mon tableau sur la feuille rapport, le libellé "Hommes" par le libellé "femmes"par exemple (ou par n'importe quel autre nom de colonne de la feuille "hist_total"), la valeur se mette à jour automatiquement. Or je vois que dans la formule proposée, apparait le libellé "hommes".

Merci encore.
 
Dernière édition:

Jocelyn

XLDnaute Barbatruc
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

re,

Je te remet un fichier qui de permet de choisir en B12 et C12 par liste de validation une des 5 valeurs ,hommes, femmes, jeunes, adultes et séniors, alors testes et si cela correspond a ton besoin je t'explique la formule choisir.

A te lire
 

Pièces jointes

  • historique2V1.xls
    222.5 KB · Affichages: 62

juju44

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

Merci Jocelyn,

Ta solution répond en partie à mon besoin, cependant comme je dois fournir plusieurs tableaux différents (selon le sexe, puis selon l'age), je ne pense pas avoir besoin d'une liste déroulante à ce niveau. Mais je vais utiliser ta formule qui doit facilement s'adapter à mes besoins.

Une question tout de même :

Code:
=INDEX(DECALER(homme;;CHOISIR(EQUIV(B$12;HIST_TOTAL!$F$1:$J$1;0);CHOISIR(LIGNE()-12;0;5;6);CHOISIR(LIGNE()-12;1;8;9);CHOISIR(LIGNE()-12;2;11;12);CHOISIR(LIGNE()-12;3;14;15);CHOISIR(LIGNE()-12;4;17;18)));EQUIV($B$4&$B$5&$B$6;HIST_TOTAL!$B$2:$B$441&HIST_TOTAL!$E$2:$E$441&HIST_TOTAL!$D$2:$D$441;0))

que représente le terme "homme" dans la formule ?

et comment sont remplies tes listes ?

Merci encore
 

Jocelyn

XLDnaute Barbatruc
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

re,

Alors ce n'est pas mon fort mais je vais essayer de t'expliquer clairement le fonctionnement de cette formule
Code:
DECALER(homme;;CHOISIR(EQUIV(B$12;HIST_TOTAL!$F$1:$J$1;0);CHOISIR(LIGNE()-12;0;5;6);CHOISIR(LIGNE()-12;1;8;9);CHOISIR(LIGNE()-12;2;11;12);CHOISIR(LIGNE()-12;3;14;15);CHOISIR(LIGNE()-12;4;17;18)))

homme correspond à une plage nommée défini de cette facon =DECALER(HIST_TOTAL!$F$2;;;NBVAL(HIST_TOTAL!$F:$F)-1) cette façon de définir une plage la rend dynamique si tu ajoutes des donnée dans la colonne F de la feuille HIST_TOTAL, la plage s'agrandira toute seule. cette plage représente donc la colonne F soit celle intitulée hommes.

maintenant suivant la valeur de la cellule B12 on ne veut pas forcément trouver des information dans cette colonne.

on peut la décaler

la fonction decaler generique : DECALER(reférence de la cellule ou plage a décaler;nombre de ligne décalage;nombre de colonne décalage;hauteur a prendre en compte (utiliser par exemple dans la façon dont j'ai nommé la plage homme);largeur à prendre en compte (si les donnée sont en ligne))

ici le besoin sera de savoir de combien de colonne il faut décaler suivant la valeur de B12 pour cela on utilise la fonction choisir

la fonction choisir générique : CHOISIR(index du choix a faire (doit être le renvoi d'un chiffre entre 1 et 29);choix1;choix2;choix3;......jusqu'a 29)

nous avons besoin de 5 choix pour hommes, femmes, jeunes, adultes et séniors pour déterminer un nombre entre 1 et 5 on utilise EQUIV(B$12;HIST_TOTAL!$F$1:$J$1;0) qui donne la position de la valeur de B12 dans la plage HIST_TOTAL!$F$1:$J$1

pour l'instant nous avons donc :DECALER(homme;;CHOISIR(EQUIV(B$12;HIST_TOTAL!$F$1:$J$1;0)

par contre il y a ensuite 3 type de valeur suivant que l'on soit sur la ligne volume B13, poids B14 ou Evolution annuelle B15 donc la encore choisir , se qui donne si B12 = homme pour le volume il faut rester sur la plage homme par contre si nous somme sur la plage poids il faut aller 5 colonne plus loin et si 'l'on est sur la ligne évolution il faut aller 6 colonne plus loin.

sachant que le début de choisir doit être un chiffre et qu'ici il y aura 3 choix on met en place choisir de cette facon

avec ligne()-12 cette fonction placée en ligne 13 renvoie ligne()= 13 et -12 = 1

ce qui donne CHOISIR(LIGNE()-12;0;5;6)

et globalement :

DECALER(homme;;CHOISIR(EQUIV(B$12;HIST_TOTAL!$F$1:$J$1;0);CHOISIR(LIGNE()-12;0;5;6)

maintenant si b12= femme pour le volume il faut aller 1 colonne plus loin par contre si nous somme sur la plage poids il faut aller 8 colonne plus loin et si 'l'on est sur la ligne évolution il faut aller 9 colonne plus long.

resultat :

DECALER(homme;;CHOISIR(EQUIV(B$12;HIST_TOTAL!$F$1:$J$1;0);CHOISIR(LIGNE()-12;0;5;6);CHOISIR(LIGNE()-12;1;8;9)

on procéde de la même façon pour les 5 données hommes, femmes, jeunes, adultes et séniors

a la fin on a la formule total si equiv renvoie la valeur a lors il s'appliquera le choisir pour les femmes

a propo de la liste déroulante c'était juste pour que tu puisses faire des tests rapidement

J'espère avoir été clair sinon n'hésites pas

EDIT : bonjour Tdenfert
 
Dernière édition:

juju44

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

Merci pour ces explications très claires.

Si j'ai bien compris, il faut que je connaisse précisément l'emplacement des colonnes. Et admettons que j'en rajoute une au milieu des autres, les formules ne seront plus valables ?

Cependant, logiquement les colonnes devraient rester dans cette configuration.

Merci beaucoup !

Edit : je me rend compte que cette solution est assez fastidieuse...Quand on a quelques colonnes cela n'est pas trop gênant, comme dans l'échantillon de fichier que je vous ai envoyé, mais avec une quarantaine de colonnes...Il suffit de se tromper d'un chiffre pour que le résultat ne soit pas celui attendu, sans forcement qu'on puisse s'en rendre compte. Mais si c'est la seule solution.
 
Dernière édition:

juju44

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

j'ai essayé de me lancer dans quelque chose de différent :

je reprend ma formule de base avec la colonne explicitée en "dur", en utilisant par exemple F pour hommes :

Code:
=INDEX(HIST_TOTAL!F$2:F$441;EQUIV($B$4&$B$5&$B$6;HIST_TOTAL!$B$2:$B$441&HIST_TOTAL!$E$2:$E$441&HIST_TOTAL!$D$2:$D$441;0))

Dans mon esprit, l'idée est de remplacer dans cette formule la lettre F faisant référence à la colonne "hommes", par une formule me permettant de récupérer à partir de l'index de la colonne "hommes", le numéro de de la colonne.

pour obtenir l'index de la colonne "hommes" :
Code:
=EQUIV(B$12;HIST_TOTAL!$F$1:$BL$1;0)

pour obtenir la lettre de la colonne correspond à l'index trouvé :
Code:
=GAUCHE(ADRESSE(1;EQUIV(B$12;HIST_TOTAL!$A$1:$BL$1;0);4);NBCAR(ADRESSE(1;EQUIV(B$18;HIST_TOTAL!$A$1:$BL$1;0);4))-1)

et au final en remplaçant dans la formule d'origine à l'aide de la fonction INDIRECT():
Code:
=INDEX(INDIRECT("HIST_TOTAL!"&GAUCHE(ADRESSE(1;EQUIV(B$12;HIST_TOTAL!$A$1:$BL$1;0);4);NBCAR(ADRESSE(1;EQUIV(B$18;HIST_TOTAL!$A$1:$BL$1;0);4))-1)&"$2:"&GAUCHE(ADRESSE(1;EQUIV(B$12;HIST_TOTAL!$A$1:$BL$1;0);4);NBCAR(ADRESSE(1;EQUIV(B$18;HIST_TOTAL!$A$1:$BL$1;0);4))-1)&"$441");EQUIV($B$4&$B$5&$B$6;HIST_TOTAL!$B$2:$B$441&HIST_TOTAL!$E$2:$E$441&HIST_TOTAL!$D$2:$D$441;0))

Je pense que cette solution est plus souple.
 

Jocelyn

XLDnaute Barbatruc
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

re,

Merci pour ces explications très claires.

Si j'ai bien compris, il faut que je connaisse précisément l'emplacement des colonnes. Et admettons que j'en rajoute une au milieu des autres, les formules ne seront plus valables ?

Cependant, logiquement les colonnes devraient rester dans cette configuration.

Merci beaucoup !

Edit : je me rend compte que cette solution est assez fastidieuse...Quand on a quelques colonnes cela n'est pas trop gênant, comme dans l'échantillon de fichier que je vous ai envoyé, mais avec une quarantaine de colonnes...Il suffit de se tromper d'un chiffre pour que le résultat ne soit pas celui attendu, sans forcement qu'on puisse s'en rendre compte. Mais si c'est la seule solution.

pour éviter de compter les colonnes, j'ai mis en exemple dans le fichier uniquement sur B13, B14, B15 une formule ou tous les chiffre des fonctions choisir sont remplacés par des équiv qui règlent le soucis de connaitre a l'avance les colonnes, mais pour cela il faut changer les valeurs des cellules A13, A14, A15 comme dans l'exemple

cette solution permet en plus d'alléger la formule

regardes et dis nous

EDIT :

cette solution la aussi fonctionne même si persionnellement je ne la pense pas plus simple:) mais chacun voit les choses a sa façon :)
 

Pièces jointes

  • historique2V2.xls
    232 KB · Affichages: 80

juju44

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

Parfait Jocelyn !

Voila la solution qui me convient parfaitement !

Pour ce qui est des valeurs des cellules A13, A14, A15 je vais les dissimuler et écrire conserver des libellés plus explicites à coté, histoire d'avoir un tableau plus présentable.

Merci pour tout le mal que tu t'es donné, c'est très appréciable !
 

juju44

XLDnaute Nouveau
Re : RechercheV sur 2 critères avec recherche selon nom d'une colonne

Bonjour,

je revient vers mon problème d'origine.

Les temps de calculs étant, à la longue, beaucoup trop importants avec la solution proposée par Jocelyn, j'ai décidé de créer une "clé" en concaténant mes critères de recherche : "Mois/année_zonegéo".

Cette solution permet d'utiliser la fonction rechercheV() classique et moins gourmande.

Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 510
Membres
103 570
dernier inscrit
patrickb83p