IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Récupération 2 valeurs (au MAX) selon plusieurs critères [XL-2016]


Sujet :

Excel

  1. #1
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut Récupération 2 valeurs (au MAX) selon plusieurs critères
    Hello FORUM,
    Une petite question pour mon gros problème. Quoique.

    Mon point de départ : j'ai une feuille sur laquelle j'ai un calendrier mensuel reprenant les absences des agents. Certains colonnes ont des MFC (Jours WE, Jours Ponts, Jours Fériés, Jours Clôture). Cela fonctionne bien.
    Nom : Image 3.png
Affichages : 186
Taille : 12,4 Ko

    J'ai une seconde feuille sur laquelle j'ai les données brutes d'absences sur 4 colonnes :
    • Agent
    • Jour d'absence
    • Période d'absence : AM ou PM
    • Type d'absence

    Nom : Image 6.png
Affichages : 184
Taille : 4,9 Ko

    Vous me voyez venir avec mes gros sabots. Le but est de rapatrier les données selon :
    • Si rien n'est mentionné, la case reste vide
    • Si une absence est renseignée seulement AM, alors j'ai le type d'absence avec un "/" après
    • Si une absence est renseignée seulement PM, alors j'ai le type d'absence avec un "/" avant
    • Si l'absence du AM et du PM sont identiques, alors une seule données reprise
    • Si l'absence du AM et du PM sont différentes, alors les deux sont reprises séparées par un "/"

    Nom : Image 7.png
Affichages : 206
Taille : 12,7 Ko

    J'ai commencé MAIS LE CHEMIN N'EST PEUT-ETRE PAS LE BON.

    Exemple : Si absence uniquement le matin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=SI(ET(ESTNA(RECHERCHEV(G2&H2&"AM";SI({1.0};A2:A7&B2:B7&C2:C7;D2:D7);2;FAUX))=FAUX;ESTNA(RECHERCHEV(G2&H2&"PM";SI({1.0};A2:A7&B2:B7&C2:C7;D2:D7);2;FAUX))=VRAI);RECHERCHEV(G2&H2&"AM";SI({1.0};A2:A7&B2:B7&C2:C7;D2:D7);2;FAUX)&"/";"")}
    Je pense que je vais vite me trouver face à un mur. Donc, si vous avez des idées, elles sont les bienvenues...

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,
    Voici une formule qui marche mais tellement gourmande en ressource qu'il vaut mieux vite l'abandonner au profit du Vba, valable uniquement pour le plaisir de s'amuser un peu.
    Formule en B6, à valider avec CTRL + SHIFT + ENTREE , et à tirer vers la droite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(SI(ET(SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))>0;SIERREUR(EQUIV($A6&B$3;INDIRECT("Feuil2!A"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))+1&":A1000")&INDIRECT("Feuil2!B"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))+1&":B1000");0)+SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));0)>0);SI(INDIRECT("Feuil2!D"&SIERREUR(EQUIV($A6&B$3;INDIRECT("Feuil2!A"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))+1&":A1000")&INDIRECT("Feuil2!B"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))+1&":B1000");0)+SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));0))<>INDIRECT("Feuil2!D"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0)));INDIRECT("Feuil2!D"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0)))&"/"&INDIRECT("Feuil2!D"&SIERREUR(EQUIV($A6&B$3;INDIRECT("Feuil2!A"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))+1&":A1000")&INDIRECT("Feuil2!B"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))+1&":B1000");0)+SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));0));INDIRECT("Feuil2!D"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0))));SI(INDIRECT("Feuil2!C"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0)))="AM";INDIRECT("Feuil2!D"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0)))&"/";"/"& INDIRECT("Feuil2!D"&SI(ESTNA(EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0));"";EQUIV($A6&B$3;Feuil2!$A:$A&Feuil2!$B:$B;0)))));"")
    Avec le fichier
    Pièce jointe 452308

    Cdlt

  3. #3
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Salut, ARTURO83 !
    Un grand merci pour cette proposition. Je plusse !
    On en arrive à la même conclusion : VBA.

  4. #4
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    J'ai considéré que dans le calendrier mensuel de la première feuille, les lignes 2, 3 et 4 contiennent toutes les trois des dates avec des formats différents (jjj , j , mmm). Si ce n'est pas le cas, les formules écrites seraient à modifier en conséquence. J'ai d'autre part déclaré la plage d'absences de la feuille 2 comme un tableau structuré nommé t_absences.

    En se plaçant dans la cellule B6, définir le nom repere (ou autre bien sûr) par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EQUIV(Feuil1!$A6&Feuil1!B$3;t_absences[QUI]&t_absences[DATE];0)
    Dans toute cellule du calendrier, repere indique la ligne du tableau t_absences où se trouvent éventuellement la période et le motif de l'absence de l'agent donné pour le jour donné.

    Ecrire alors dans le calendrier mensuel en B6 la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CHOISIR(NB.SI.ENS(t_absences[QUI];$A6;t_absences[DATE];B$3)+1;"";SI(INDEX(t_absences[QUAND];repere)="AM";INDEX(t_absences[QUOI];repere)&"/";"/"&INDEX(t_absences[QUOI];repere));SI(INDEX(t_absences[QUOI];repere)=INDEX(t_absences[QUOI];repere+1);INDEX(t_absences[QUOI];repere);INDEX(t_absences[QUOI];repere)&"/"&INDEX(t_absences[QUOI];repere+1)))
    Copier cette formule et la coller dans les autres cellules du calendrier mensuel.
    Cordialement
    Claude

  5. #5
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Alors là, papouclo !
    De toute beauté !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Valeur Max avec plusieurs critères
    Par Niko77 dans le forum Excel
    Réponses: 5
    Dernier message: 04/04/2017, 14h24
  2. Réponses: 3
    Dernier message: 14/11/2016, 15h14
  3. Réponses: 4
    Dernier message: 26/06/2015, 17h23
  4. Réponses: 2
    Dernier message: 17/02/2014, 09h23
  5. [Toutes versions] [Fomule]additionner valeurs selon plusieurs critères
    Par DonKnacki dans le forum Excel
    Réponses: 4
    Dernier message: 26/06/2012, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo