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 :

Comparaison matrice avec liste de valeurs


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 20
    Points
    20
    Par défaut Comparaison matrice avec liste de valeurs
    Bonjour,

    je m'arrache les cheveux et comme je n'en ai déjà plus beaucoup, je reviens vers vous avant d'être chauve

    J'ai une feuille avec une liste d'enregistrements de contrôles, du type :
    Date - Semaine - Personne - Zone - Test 1 - Test 2 - etc.

    Sachant que les personnes appartiennent à un grp de personnes internes ou externes (feuille Donnees)
    J'ai une seule liste nommée, celle des dates (LiDates).

    Sur ma feuille Résultats, je dois trouver, pour chaque test, le premier ctrl par semaine, par zone, et par groupe de personnes (internes/externes), pour les 4 dernières semaines de données disponibles (hormis celle en cours).

    Je trouve actuellement le premier ctrl pour un test, par zone et pour les semaines déterminées. Et je n'aurais pas eu de soucis si je cherchais une personne en particulier.

    Là où je coince depuis hier soir, c'est pour le groupe de personnes internes ou externes ...
    Je dois intégrer dans ma formule une 'comparaison' avec une liste de 2 ou 3 valeurs suivant le groupe que je vise. Et euh, bah je sèche. Et c'est peut-être (sans doute) bête comme chou, mais là, je ne vois plus clair !

    En gros, je dois intégrer là dedans :
    =SIERREUR((INDEX((Liste!A:Z);(PETITE.VALEUR(SI((ANNEE(LiDates)=ANNEE(MAX(SI(LiDates<(AUJOURDHUI()-(JOURSEM(AUJOURDHUI();2)-1));LiDates;0))))*(DECALER(LiDates;;1)=CNUM(STXT(B7;5;2)))*(DECALER(LiDates;;3)=A4)*(LIGNE(LiDates)<>0);(ANNEE(LiDates)=ANNEE(MAX(SI(LiDates<(AUJOURDHUI()-(JOURSEM(AUJOURDHUI();2)-1));LiDates;0))))*(DECALER(LiDates;;1)=CNUM(STXT(B7;5;2)))*(DECALER(LiDates;;3)=A4)*(LIGNE(LiDates));"");1));6));"")
    une condition supplémentaire : que chaque élément de DECALER(LiDates;;2), les personnes, appartienne à Donnees!A2:A5 ou Donnees!B2:B4 suivant le groupe choisi.

    Je vous mets le fichier simplifié avec quelques couleurs pour retrouver les données correspondantes aux résultats dans la liste de données.

    Merci d'avance pour vos réponses et/ou pistes de réponses.

    Fred

    HS: et je prends mon sac à dos pour aller marcher 15-20km, cela devrait me changer les idées !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    bon, après 20km de marche, une bonne bière et une bonne nuit de sommeil, besoin de simplifier :
    Comment je compare ma colonne 'personnes' (DECALER(LiDates);;2) avec mes valeurs 'Pers Int 1, Pers Int 2', etc. ?

    Réponse simple, à intégrer dans le SI : (DECALER(LiDates);;2)={"Pers Int 1"."Pers Int 2"."Pers Int 3"} pour les personnes du groupe 'Internes'

    C 'est bien joli, mais si on a le plaisir d'engager Pers Int 4, je dois modifier toutes mes formules ...

    Tant que j'en étais à simplifier, dans la partie 'valeur si vrai' du SI, je remettais une partie des critères, ce qui était totalement inutile, puisque pour PETITE.VALEUR, je n'ai besoin que de (LIGNE(LiDates)).
    Ce qui donne :
    =SIERREUR((INDEX((Liste!A:Z);(PETITE.VALEUR(SI((ANNEE(LiDates)=ANNEE(MAX(SI(LiDates<(AUJOURDHUI()-(JOURSEM(AUJOURDHUI();2)-1));LiDates;0))))*(DECALER(LiDates;;1)=CNUM(STXT(B7;5;2)))*(DECALER(LiDates;;3)=A4)*(DECALER(LiDates;;2)={"Pers Int 1"."Pers Int 2"."Pers Int 3"})*(LIGNE(LiDates)<>0);(LIGNE(LiDates));"");1));6));"")
    Déjà plus simple.

    Pour le fichier joint, il y avait une erreur #NOM? pour les semaines du tableau de résultats (fct perso que j'avais enlevé pour remettre le fichier en xslx)... J'ai donc mis les semaines en 'dur' dans le fichier. Je remets le fichier.

    Donc reste à trouver comment remplacer la liste de valeurs entre {} par une liste dynamique ... ou trouver autre chose. Les idées sont les bienvenues.

    Bon samedi à tous.

    Fred
    Fichiers attachés Fichiers attachés

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 771
    Points : 28 631
    Points
    28 631
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu essayé avec la formule SOMMEPROD ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Bonjour Philippe,

    j'avais commencé par là, avant de changer d'avis, parce que je voulais le premier des résultats, et non une somme de résultats, donc ça me paraissait plus ‘logique’ d'utiliser autre chose. J'ai refais un SOMMEPROD rapide, je coince aussi.

    En fait, là où je me plante, c’est que je considère les deux groupes de personnes interne/externe et leurs valeurs (Pers Int 1, Pers Int 2,etc.) dans la feuille donnes comme des matrices à intégrer dans ma formule matricielle ...
    Hors, c'est mis dans le titre, ce sont des listes, et donc des arrays tel que {"Pers Int 1"."Pers Int 2"."Pers Int 3"}, ce que j'utilise dans mon 2è post.

    Maintenant, comment faire de mes plages de groupes internes et externes, qui se trouvent sur la feuille Donnees, des arrays dynamiques pour la formule ?

    Et bien un peu de code mon bon monsieur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function ArrLiInt() As Variant
    Dim RnInt As Range, i As Integer, Tabl As Variant
     
    Set RnInt = Sheets("Donnees").Range("A2:A" & Sheets("Donnees").Cells(Rows.Count, "A").End(xlUp).Row)
     
    ReDim Tabl(1 To RnInt.Count)
    For i = 1 To UBound(Tabl)
        Tabl(i) = RnInt(i).Value
    Next i
    ArrLiInt = Tabl
     
    End Function
    Ce qui me retourne {"Pers Int 1"."Pers Int 2"."Pers Int 3"} dans le calcul de la formule.
    Je refais la même chose pour les externes.

    J'utilise comme critère (DECALER(LiDates;;2)=ArrLiInt()) dans ma formule matricielle, et cela fonctionne.

    Il me reste a tester cela sur mon fichier de production, éventuellement revoir le code, pour ne faire qu'une fonction, au lieu de 2, avec un argument qui serait le groupe dont on veut les personnes, à voir.

    Bonne journée tout le monde.

    Fred

Discussions similaires

  1. [WB18] Table Hiérarchique avec liste de valeurs
    Par debo41 dans le forum WebDev
    Réponses: 5
    Dernier message: 25/04/2013, 14h16
  2. Réponses: 1
    Dernier message: 03/02/2010, 08h59
  3. problème avec liste de valeur
    Par Golgotha dans le forum SQL
    Réponses: 12
    Dernier message: 16/01/2009, 08h40
  4. paramètre avec liste de valeurs
    Par aguignier dans le forum iReport
    Réponses: 2
    Dernier message: 25/03/2008, 15h08
  5. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12

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