Recherche avec critères croisés

  • Initiateur de la discussion Initiateur de la discussion elisa71
  • 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 !

elisa71

XLDnaute Nouveau
Bonjour,

je travaille actuellement sur deux tableaux liés à des séjours.

le 1er (onglet n°1 du tableau en PJ): comprend les noms, la date de réalisation et le prix,
le 2 ème (onglet n°2 du tableau en PJ) comporte: le nom, le n° de séjour, la date de début du séjour et la date de fin du séjour.

Mon besoin est le suivant: il faut que je ramène le n° de séjour dans le 1er onglet. Pour trouver le n° de séjour, il faut : que le nom soit bien évidemment identique, mais également que la date de réalisation présente dans le 1er onglet soit comprise dans les dates de début et de fin de séjour dans le 2ème onglet (une même personne peut être venue plusieurs fois..il y a donc un n° de séjour différent pour chaque venue...).

RechercheV ne fonctionne pas..plusieurs critères..😕

J'ai mis un exemple simplifié en PJ pour étayer mes explications...

Par avance merci pour votre aide,
 

Pièces jointes

Re : Recherche avec critères croisés

Bonjour, en D2 de la première feuille, puis recopier vers le bas :
Code:
=INDEX('Nbr de séjours'!$B$1:$B$8;SOMMEPROD(('Nbr de séjours'!$A$2:$A$8='liste des actes'!A2)*('Nbr de séjours'!$C$2:$C$8<'liste des actes'!B2)*('Nbr de séjours'!$D$2:$D$8>'liste des actes'!B2)*LIGNE('Nbr de séjours'!$A$2:$A$8)))

Sommeprod permet de travailler avec plusieurs critères et renvoie 1 ou 0 ; en multipliant par le N° de ligne on obtient un N° de ligne (si la réponse est unique !!) donc on fait index B1: B8 !!

Cordialement
 
Dernière édition:
Re : Recherche avec critères croisés

Bonjour Elisa et bienvenue, bonjour Dugenou, bonjour le forum,

Une proposition VBA commentée :
Code:
Sub Macro2()
Dim l As Object 'déclare la variable l (onglet Liste des actes)
Dim n As Object 'déclare la variable n (onglet Nbr de séjours)
Dim dll As Integer 'déclare la variable dll (Dernière Ligne Liste des actes)
Dim dln As Integer 'déclare la variable dln (Dernière Ligne Nbr de séjours)
Dim pll As Range 'déclare la variable pll (PLage Liste des actes)
Dim pln As Range 'déclare la variable pln (PLage Nbr de séjours)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)

Set l = Sheets("liste des actes") 'définit l'onglet l
Set n = Sheets("Nbr de séjours") 'définit l'onglet n
dll = l.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A) de l'onglet l
Set pll = l.Range("A2:A" & dll) 'définit la plage pll
dln = n.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A) de l'onglet n
Set pln = n.Range("A2:A" & dln) 'définit la plage pln
For Each cel In pll 'boucle sur toutes les cellules cel de la plage pll
    Set r = pln.Find(cel.Value, , xlValues, xlWhole) 'définit la recherche r (recherche dans la plage pln la valeur entière de cel)
    If Not r Is Nothing Then 'condition 1 : si il existe au moins une occurrence trouvée
        pa = r.Address 'définit l'adresse de la première occurrence trouvée
        Do 'exécute
            'condition 2 : si la date est comprise entre les dates de l'occurrence trouvé
            If cel.Offset(0, 1).Value >= r.Offset(0, 2).Value And cel.Offset(0, 1).Value <= r.Offset(0, 3).Value Then
                cel.Offset(0, 3).Value = r.Offset(0, 1).Value 'récupère le numéro de séjour
            End If 'fin de la condition 2
            Set r = pln.FindNext(r) 'redéfinit la recherche r(occurrence suivante)
        Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en pa
    End If 'fin de la condition 1
Next cel 'prochaine cellule de la boucle
End Sub
Le fichier :
 

Pièces jointes

Re : Recherche avec critères croisés

Merci beaucoup pour cette réponse rapide.

J'ai fait le test et j'ai un décalage sur la 1er ligne. je devrais avoir le n° de séjour: 8000001..J'ai pensé à une inversion sur les signes > et < mais ça ne semble pas résoudre le pb....🙁


Merci beaucoup !!
 

Pièces jointes

Re : Recherche avec critères croisés

Bonsoir,
comme précisé après correction il faut commencer l'index en B1
donc remplacer :
=INDEX('Nbr de séjours'!$B$2:$B$8;SOMMEPROD(('Nbr de séjours'!$A$2:$A$8='liste des actes'!A2)*('Nbr de séjours'!$C$2:$C$8<'liste des actes'!B2)*('Nbr de séjours'!$D$2:$D$8>'liste des actes'!B2)*LIGNE('Nbr de séjours'!$A$2:$A$8)))

par
=INDEX('Nbr de séjours'!$B$1:$B$8;SOMMEPROD(('Nbr de séjours'!$A$2:$A$8='liste des actes'!A2)*('Nbr de séjours'!$C$2:$C$8<'liste des actes'!B2)*('Nbr de séjours'!$D$2:$D$8>'liste des actes'!B2)*LIGNE('Nbr de séjours'!$A$2:$A$8)))

PS Salut Robert !
 
- 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

Discussions similaires

Réponses
1
Affichages
183
Retour