Recherche d'une cellule dans un autre tableau par rapport à deux conditions


#1

Bonjour,

Je suis totalement incapable de me sortir de ce bourbier.
Je dois créer une formule qui me permet de renvoyer la valeur d’une cellule en fonction de deux conditions dans un autre tableau.
Quand j’entre la date dans le deuxième tableau, j’aimerais que le transporteur s’ajoute automatiquement, en tenant également compte de la destination.

Merci d’avance!Probleme.xlsx (10,2 Ko)


#2

Bonjour @Tom,

Voici une proposition:

Dans la Feuil2, j’ai créé une liste sans doublons triée pour les dates, car je suppose qu’il y aura bien d’autres dates dans la Feuil1, j’en ais mis quelques une supplémentaires pour mes essais.

Formule matricielle a valider avec ctrl + maj + entrée

=SIERREUR(INDEX(Dates;EQUIV(PETITE.VALEUR(SI((NB.SI(A$1:A1;Dates)=0)*(Dates<>"");NB.SI(Dates;"<"&Dates));1);SI(Dates<>"";NB.SI(Dates;"<"&Dates));0));"")

Tirer vers le bas autant que nécessaire.

Voir aussi dans le “Gestionnaire de noms”

Dates =DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1)

Cette liste me permet d’utiliser une liste déroulante sans doublons dans la Feuil1 en “F1”

Dates_S_D =DECALER(Feuil2!$A$2;;;NBVAL(Feuil2!$A:$A)-1

Puis en “E3” de la Feuil1 la liste des lignes “Destination”

Formule matricielle a valider avec ctrl + maj + entrée

=SI(SIERREUR(INDEX(B:B;PETITE.VALEUR(SI(Dates=$F$1;LIGNE(Dates));LIGNE(D1)));"")=0;"";SIERREUR(INDEX(B:B;PETITE.VALEUR(SI(Dates=$F$1;LIGNE(Dates));LIGNE(D1)));""))

Formule a tirer vers le bas et vers la droite pour les lignes “Transporteur”.

Ci-joint ton fichier en retour ICI==> Tom V1.xlsx (13,8 Ko)

Cordialement.


#3

Super, Merci beaucoup pour votre aide!


#4

Je suis totalement incapable de tranposer la formule dans mon vrai document, d’autant plus que je dois fonctionner avec deux documents excel. Peut-être saurez vous m’aider si je vous partage les deux documents réels.

Voilà les deux fichiers complets.

La banque d’information étant '‘Horaire 2017’'Modèle instruction.xlsx (19,9 Ko)

Et le fichier à remplir ‘‘Modèle instruction’’

Les deux documents ne peuvent être joints étant donnés qu’ils appartiennent à des départements différents.


#5

Horaire 2017.xlsm (121,6 Ko)


#6

Re @Tom,

Je regarderais demain, car je dois m’absenter une partie de la soirée.

Cdlt.


#7

Bonjour @Tom,

J’ai bien avancé sur ton fichier, mais il n’est pas totalement fini et je dois encore m’absenter pour le reste de la journée.
Donc un peu de patience, je finirais probablement demain dans la journée.

Cordialement.


#8

Wow super, je n’y ai pas accès avant mercredi alors ne te sens pas pressé! Merci infiniment de ton aide, c’est plus qu’apprécié…


#9

Bonjour @Tom,

Je vais tenter de t’expliquer ce que j’ai fait.

Déjà je n’ais pas compris ce que les autres tableaux a partir de la ligne 24 faisait là ?
Donc j’ai passé outre ! Tu me diras.

Dans l’idéal il faut que les 2 fichiers soient réunis dans un seul Dossier que tu pourras nommer comme tu veux, moi je l’ais nommé “Tom 27 08 2017

Capture

Les 2 fichiers doivent-être strictement nommés “Horaire 2017” & “Instruction

Pour traiter les infos du fichier “Horaire 2017 dans le fichier Instruction” et vu le nombre de lignes je suis passé par du VBA.

Voici le code de la macro associée au bouton “Go” de la feuille “Instruction

Sub Importe()

Application.ScreenUpdating = False

On Error GoTo MsgErreurs

    'Importation des données du fichier Horaire 2017.xlsm dans le fichier Instruction.xlsm
    Sheets("Importe").Select
    Windows("Horaire 2017.xlsm").Activate
    Sheets("Horaire 2017").Select
    Columns("A:G").Select
    Selection.Copy
    Range("A1").Select
    Windows("Instruction.xlsm").Activate
    Range("A1").Select
    ActiveSheet.Paste
    Rows("1:1").Select
    Application.CutCopyMode = False
    Range("A1").Select
    
'Création dans le "Gestionnaire de noms" de la liste des dates
Range("B1").Select
    ActiveWorkbook.Names.Add Name:="DATE_DE_DÉPART", RefersToR1C1:= _
        "=OFFSET(Importe!R2C2,,,COUNTA(Importe!C2)-1)"
        
'Copie de la formule de B12 jusqu'à la dernière ligne vide si il y a une valeur dans la colonne "A"
Sheets("Instruction").Select
Range("B12").Select
    ActiveCell.FormulaArray = _
        "=IF(IFERROR(INDEX(Importe!C3,SMALL(IF(DATE_DE_DÉPART=R5C4,ROW(DATE_DE_DÉPART)),ROW(R[-11]C[-1]))),"""")=0,"""",IFERROR(INDEX(Importe!C3,SMALL(IF(DATE_DE_DÉPART=R5C4,ROW(DATE_DE_DÉPART)),ROW(R[-11]C[-1]))),""""))"
 Selection.AutoFill Destination:=Range("B12:B" & Range("A65536").End(xlUp).Row)

'Copie de la formule de H12 jusqu'à la dernière ligne vide si il y a une valeur dans la colonne "A"
Sheets("Instruction").Select
Range("H12").Select
    ActiveCell.FormulaArray = _
        "=IF(IFERROR(INDEX(Importe!C4,SMALL(IF(DATE_DE_DÉPART=R5C4,ROW(DATE_DE_DÉPART)),ROW(R[-11]C[-1]))),"""")=0,"""",IFERROR(INDEX(Importe!C4,SMALL(IF(DATE_DE_DÉPART=R5C4,ROW(DATE_DE_DÉPART)),ROW(R[-11]C[-1]))),""""))"
 Selection.AutoFill Destination:=Range("H12:H" & Range("A65536").End(xlUp).Row)
 
Exit Sub

MsgErreurs:
MsgBox "Le fichier Horaire 2017" & Fichier & " n'est pas ouvert"
Sheets("Instruction").Select

End Sub

Fonctionnement de la macro:

Dans le fichier “Instruction” il faut que la feuille “Importe” existe, donc il ne faut pas la supprimer.

IMPORTANT: il faut d’abord ouvrir le fichier “Horaire 2017”, puis le fichier “Instruction” et cliquer sur le bouton “Go

Que se passe t-il ? et bien si les 2 fichiers sont ouverts, l’action sur “Go” va copier la feuille “Horaire 2017” dans la feuille “Importe” du fichier “Instruction”, puis va créer dans le “Gestionnaire de noms” la liste des dates de la feuille "Importe"en fonction de la date en “D5”, et si il y a des valeurs dans la colonne “A” a partir de “A12”, on écrit dans “B12” et “H12” jusqu’à la dernière ligne non vide de la colonne “A” les 2 formules suivantes:

=SI(SIERREUR(INDEX(Importe!$C:$C;PETITE.VALEUR(SI(DATE_DE_DÉPART=$D$5;LIGNE(DATE_DE_DÉPART));LIGNE(A1)));"")=0;"";SIERREUR(INDEX(Importe!$C:$C;PETITE.VALEUR(SI(DATE_DE_DÉPART=$D$5;LIGNE(DATE_DE_DÉPART));LIGNE(A1)));""))

=SI(SIERREUR(INDEX(Importe!$D:$D;PETITE.VALEUR(SI(DATE_DE_DÉPART=$D$5;LIGNE(DATE_DE_DÉPART));LIGNE(G1)));"")=0;"";SIERREUR(INDEX(Importe!$D:$D;PETITE.VALEUR(SI(DATE_DE_DÉPART=$D$5;LIGNE(DATE_DE_DÉPART));LIGNE(G1)));""))

Nous obtenons alors la liste des “Destinations” et la liste des “Transporteurs”.

Si le fichier “Horaire 2017” n’a pas été ouvert alors on affiche un message “Le fichier Horaire 2017 n’est pas ouvert”.

Tu trouveras ci-joint les 2 fichiers:

Fichier “Horaire 2017ICI==> Horaire 2017.xlsm (126,8 Ko)
Fichier “InstructionICI==> Instruction.xlsm (29,0 Ko)

Pour rappel: Mettre les 2 fichiers dans un seul Dossier

Voila, regarde tous ça et dit moi !

Cordialement.