Problème fonction index decaler

Y compris Power BI, Power Query et toute autre question en lien avec Excel
o
oantoine
Nouveau venu
Nouveau venu
Messages : 1
Inscrit le : 7 septembre 2018
Version d'Excel : office 365 fr

Message par oantoine » 7 septembre 2018, 13:43

Bonjour a tous,
j'ai besoin de votre aide pour une formule de mon fichier excel.
Dans ma feuille préparation de tournée sur la colonne D j'utilise une formule de recherche =SI(B5="";"";INDEX('Patient en attente'!$A:$D;EQUIV(B5;'Patient en attente'!$D:$D;0);1)) qui me donne les bons résultats (ici un nom) en fonction d'une adresse situé colonne B et en fonction d'un tableau sur la feuille patient en attente. Mon problème est que pour une adresse je peux avoir plusieurs nom or la formule me donne toujours le même nom. J'ai tenté la formule décaler mais je n'arrive pas a l’intégrer. Auriez vous une idée ?
Je joint mon fichier pour que ce soit plus facile de comprendre mes tableaux et mon problème.
Merci d'avance à vous tous pour votre aide
Antoine
Patients en attente 2.xlsm
(64.06 Kio) Téléchargé 9 fois
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'656
Appréciations reçues : 251
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 7 septembre 2018, 14:27

bonjour

je te propose de revoir le principe, dans l'autre sens :
- un onglet de patients (nom prénom en colonne A, coordonnées dans les colonnes suivantes)
- une tournée, avec nom prénom en colonne A (à saisir à la main, avec une liste déroulante si possible basée sur colA de Patients)
dans la tournée, toutes les infos d'adresse sont récupérées par des RECHERCHEV. Dans le cas où 2 personnes ont mêmes nom et prénom, tu devras mettre "Durand Pierre" et "Durand Pierre 2" . Il FAUT unicité dans nom prénom.

note : une table c''est une ligne et une seule par donnée, pas 2 comme tu as fait dans Préparation

attention danger grave : le RGPD. Voir ton conseiller juridique.
Modifié en dernier par jmd le 8 septembre 2018, 12:06, modifié 1 fois.
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'194
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 8 septembre 2018, 11:52

Bonjour,

Habituellement on part d'un nom, autant que possible unique ( :wink: ) pour trouver une adresse. ;;)

Toi tu veux faire l'inverse : partir d'une adresse, qui n'est pas unique, et donc pourra fournir plusieurs noms, pour en déterminer un, sans autre critère de choix ! :mrgreen: C'est plus sportif ! :lol: Mais je ne supputerais pas beaucoup sur tes chances d'aboutir ainsi.

Cordialement.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'306
Appréciations reçues : 372
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 8 septembre 2018, 12:19

Bonjour,

par formule ça risque d'être très compliqué.
Je pense que le plus simple est d'établir ta liste des patients avec une macro, en partant de ta liste en R.

Je rejoins l'autre remarque : une seule ligne par visite. Avec le Temps de route =0 si pas de changement d'adresse.
Là tu te compliques la vie.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 7'075
Appréciations reçues : 698
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 9 septembre 2018, 01:56

Bonjour Antoine, le forum,

:bv:

je te retourne ton fichier modifié :
Patients en attente 2.xlsm
(67.77 Kio) Téléchargé 1 fois
* à l'ouverture du fichier, tu es sur la 2ème feuille "Préparation tournée"

* la cellule active est D7 ; fais Ctrl n ; ... oui, c'est normal : l'adresse contient le nom d'un illustre inconnu.  ::( :cry:

* va sur D9 ; fais Ctrl n ; oui, ça aussi, c'est normal : comme tu as qu'un seul patient qui est à cette adresse, ben ça le note, tout simplement.  :)  (y'a pas d'lézard, et surtout, y'a aucune ambiguïté possible !  ;;))

* va sur D11 ; fais Ctrl n ; aïe ! là, ça s'complique ! ben oui, mais comment faire autrement ? comme t'as plus d'un patient à cette adresse, faut bien qu'tu fasses un choix ! alors, quel est le n° d'l'heureux gagnant ? tu peux saisir le n° sur un chiffre ou deux ; la présentation avec 2 chiffres, c'est uniquement pour qu'la liste soit bien alignée si y'a plus d'9 copatients à la même adresse (du style « famille Radford », ou « les 101 dalmatiens ») ; tu peux changer d'avis et appuyer sur Echap ➯ valeur 0 ➯ pas de nom ; idem si tu saisis 0, ou un nombre absent de la liste, ou du texte (tu m'diras « quelle idée bizarre ! », mais sait-on jamais ?).

alors, qu'en penses-tu ? j'espère qu'ça te convient, car j'ai pas mieux à proposer ! c'est à prendre ou à laisser !  :P :lol:
et ne m'demande pas qu'ça fasse un choix automatique à ta place : j'sais pas faire de code VBA télépathe.  :roll:

Alt F11 pour voir le code VBA, puis revenir sur Excel

dhany  Image
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'306
Appréciations reçues : 372
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 9 septembre 2018, 08:32

Bonjour,

moi je comprend que s'il a noté x patients à l'adresse y, c'est qu'il veut voir ces x patients au cours de la même visite.
Il s'agit d'EHPAD.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 7'075
Appréciations reçues : 698
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 9 septembre 2018, 11:32

Bonjour eriiic,

moi j'avais pensé qu'y'a plusieurs patients à la même adresse (car dans le même immeuble), et qu'le docteur voulait voir qu'un seul d'entre eux, et optimiser ses déplacements !  :P :lol:  (mais j'crois bien qu'j'ai mal compris !  :lole:)

alors si c'est bien comme tu dis, ça simplifie drôlement !  :good:  :sp:   :D

* y'a plus besoin d'faire un choix ➯ utilisation plus simple
* y'a plus besoin de splitter les noms pour en proposer la liste
* code VBA beaucoup simplifié (dont moins de variables)

voici donc la 2ème version :
Patients en attente 2.xlsm
(66.74 Kio) Téléchargé 2 fois
qui contient ce code VBA :
Option Explicit: Option Compare Text

Sub GetName()
  If ActiveSheet.Name <> "Préparation tournée" Then Exit Sub
  Dim adr$, lg1&: lg1 = ActiveCell.Row
  adr = Trim$(Cells(lg1, 2)): If adr = "" Then Exit Sub
  Dim nom$, chn$, dlig&, lg2&, n%: nom = "?"
  With Worksheets("Patient en attente")
    dlig = .Cells(Rows.Count, 4).End(xlUp).Row
    For lg2 = 2 To dlig
      If Trim$(.Cells(lg2, 4)) = adr Then
        chn = chn & .Cells(lg2, 1) & ", ": n = n + 1
      End If
    Next lg2
  End With
  If n > 0 Then nom = Left$(chn, Len(chn) - 2)
  Cells(lg1, 4) = nom
End Sub
utilisation :

* en D7 : faire Ctrl n? (= adresse inconnue, car non trouvée en 1ère feuille, colonne D)

* en D9 : faire Ctrl nAUGEREAU DENIS (y'a qu'un seul patient à cette adresse, donc 1 seul nom)

* en D11 : faire Ctrl nCHALVERAT RAYMOND, BRICHET RAYMONDE, CHAMPEROUX HUBERT, ..., DRIARD JACQUES (y'a plusieurs patients, mais on peut pas voir tous les noms dans une seule cellule, et c'est pas facile de voir tous les noms dans la barre de formule ! même avec Ctrl Maj u)

@Antoine

attention : y'a 2 versions différentes du fichier, avec une utilisation différente, donc lis aussi mon post précédent :

viewtopic.php?p=686982#p686982

(mais j'crois qu'tu vas probablement préférer le 2ème fichier au 1er)

dhany
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'306
Appréciations reçues : 372
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 9 septembre 2018, 13:11

J'ai l'impression que tu ne tiens pas compte de l'ordre de sa tournée qu'il a mis en R.
Mais bon, ça serait bien qu'il explique complètement le fonctionnement prévu.
Tout cela n'est que suppositions...
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 7'075
Appréciations reçues : 698
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 9 septembre 2018, 15:59

@eriiic
tu a écrit :J'ai l'impression que tu ne tiens pas compte de l'ordre de sa tournée qu'il a mis en R.
si, si, ça tient compte de l'ordre de la tournée en colonne R, car regarde ces cellules de la colonne B :

en B3 : adresse fixe pour "Domicile" de D3 (= son point de départ)

en B5 : =SI(R4="";"";R4)

en B7 : =SI(R5="";"";R5)

en B9 : =SI(R6="";"";R6)

en B11 : =SI(R7="";"";R7)

en B13 : =SI(R8="";"";R8)

en B15 : =SI(R9="";"";R9)

...

en B35 : =SI(R19="";"";R19)

c'est même pour ne pas écraser ces formules que j'ai mis mon adresse fictive en R5, reprise en B7 ; donc ensuite, comme le code VBA met en colonne D les noms qui correspondent aux adresses de la colonne B, ça fait que par transitivité, c'est selon la colonne R.

et en colonne R, c'est classé dans l'ordre de la tournée, car le Docteur Antoine met les infos dans l'ordre des temps de trajet.

(c'que j'appelle transitivité, c'est que si A = B et B = C, alors A = C ; mais mes cours de maths sont bien loin, alors c'est p't'être un autre nom)

d'toutes façons, maint'nant, c'est mieux d'attendre l'avis d'Antoine  : si nécessaire, il pourra apporter tout complément d'info utile.  :wink:

(j'espère quand même que malgré ses nombreuses visites aux patients, le toubib va pas oublier d'revenir sur son sujet !  :P ::D)

dhany
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'306
Appréciations reçues : 372
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 9 septembre 2018, 18:32

Je peux me tromper mais l'adresse R4 peut correspondre à 5 patients, R5 à 3, etc.
Soit 8 visites d'une certaine durée plus 2 déplacements et tu n'as utilisés que 2 lignes jusque là. Ca ne peut pas être mis par une formule comme ça...
Enfin c'est comme ça que je vois le truc. Attendons qu'il rentre de tournée.
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message