Formule choisir et plage nommée : =CHOISIR(index;plage_nommée)

Hello la team,

Savez-vous s'il est possible d'utiliser une plage nommée (sélection discontinue) dans la formule =CHOISIR ?

J'ai pris un exemple bateau ici

pascontent

Merci d'avance

19pascontent.xlsx (11.00 Ko)

Edit : il s'agit évidemment de C24 (et non C8) concernant l'index de la formule

Bonsoir tomato,

Il me parait plus simple de traiter le nombre de jours ouvrés de manière continue et vertical ce qui te permet de faire une simple RECHERCHEV pour trouver le nombre de jours ouvrés du mois désigné en C24.

Bonne continuation

Chris

21pascontent.xlsx (11.25 Ko)

Bonjour,

En conservant la position de vos listes, en renommant individuellement les listes de jours_ouvrés ("Jours_Ouvrés_1" et "Jours_Ouvrés_2")

formule:

=SIERREUR(INDEX($A$18:$B$23;EQUIV(TEXTE($C$24*29;"mmmm") & " " & $C$25;Jours_ouvrés_1;0);2);INDEX($D$18:$E$23;EQUIV(TEXTE($C$24*29;"mmmm") & " " & $C$25;Jours_ouvrés_2;0);2))
image

Cdlt

Bonjour à tous !

Une proposition (sans plage nommée) :

=INDEX(SI(EST.IMPAIR(C24);B18:B23;E18:E23);ENT((C24+1)/2))

Bonjour CHRIS1945, Arturo83 et JFL,

Tout d'abord merci de vous être intéressé à ce sujet.

En revanche ma demande concernait particulièrement l'utilisation simultanée de la formule =CHOISIR avec une plage nommée de cellules disjointes...

J'ai refait un fichier pour appuyer cette demande.

Au vu de mes connaissances parcellaires, j'ai pris aussi une déviation et utilise la formule =INDEX avec une plage nommée créée par VBA (je ne sais pas faire un array directement dans la formule du gestionnaire de nom ...). A propos j'en ai profité pour y glisser un total des jours ouvrés.

Option Explicit
Sub SetJoursOuvrés()

Dim nm As Name, temp

    '*** Suppression plage nommée "Liste_jours_ouvrés"
    For Each nm In ActiveWorkbook.Names
        On Error Resume Next
        If nm.Name = "Liste_jours_ouvrés" Then nm.Delete
        On Error GoTo 0
    Next nm

    '*** Ajout plage nommée "Liste_jours_ouvrés"
    temp = GetJoursOuvrés       'fonction perso
    With ActiveWorkbook.Names
        .Add Name:="Liste_jours_ouvrés", RefersTo:=temp
    End With

End Sub
Function GetJoursOuvrés()

Dim nm As Name, temp
Dim i&, total&

    '*** Liste Jours_ouvrés
    For Each nm In ActiveWorkbook.Names
        On Error Resume Next
        If nm.Name = "Jours_ouvrés" Then
        temp = nm.Value
            temp = Split(Mid(nm.Value, 2), ",")
            ReDim Preserve temp(0 To 12)
            For i = LBound(temp) To UBound(temp)
                temp(i) = Range(temp(i)).Value
                total = total + temp(i)
            Next i
            temp(12) = total
            GetJoursOuvrés = temp
        End If
        On Error GoTo 0
    Next nm

End Function

Si jamais vous avez des astuces pour compléter mes connaissances, je vous suis bien reconnaissant.

Je regrette de ne pouvoir utiliser la formule =CHOISIR qui m'apparaissait pourtant évidente ici...

content
12content.xlsm (22.51 Ko)

Autre proposition avec formule

Attention: les mois sont saisis sous la forme: jj/mm/aaaa

Formule utilisée en B25:

=INDIRECT(CAR(SOMMEPROD((Liste_Mois=DATE($B$23;B24;1) )*COLONNE(Liste_Mois))+65)&SOMMEPROD((Liste_Mois=DATE($B$23;B24;1))*LIGNE(Liste_Mois)))

Bonjour à tous de nouveau !

En revanche ma demande concernait particulièrement l'utilisation simultanée de la formule =CHOISIR avec une plage nommée de cellules disjointes...

Utiliser la fonction CHOISIR dans ce contexte ne peut que conduire à une erreur.

Le numéro d'index de la fonction renvoie la n-ième valeur de la liste et non la position dans une plage nommée unique.

Arturo83, je vois l'idée mais ca ne fonctionne que si la qte de jour ouvré est à côté de l'indicateur "mois"&"année" dans la plage nommée. En fait dans "la vraie vie", et pas cet exemple, il n'y a pas de référence "mois"&"année". C'est seulement l'ordre des cellules de la plage nommée qui tient lieu d'index...

JFL, effectivement. Et j'aurais pensé que de taper littéralement la liste de valeur (ou de référence) dans un nom du gestionnaire de nom aurait rendu possible une utilisation =CHOISIR(index;liste dans le gestionnaire de nom).

Je souhaitais aboutir à une formule la plus simple possible pour l'utilisateur final.

Pour ceux que ça intéresse voici une fonction personnalisée qui répond à ce cas précis :

Function JoursOuvrés(Optional mois% = 0) As Double
Application.Volatile
'*** Fonction personnalisée : nombre de jours ouvrés d'un mois donné par son index (0 = total)
Dim nm As Name, temp
Dim i%, total&

    For Each nm In ActiveWorkbook.Names
        If nm.Name = "Jours_ouvrés" Then
            temp = Split(Mid(nm.Value, 2), ",")
            ReDim Preserve temp(0 To 12)
            For i = UBound(temp) To LBound(temp) + 1 Step -1
                temp(i) = Range(temp(i - 1)).Value
                total = total + temp(i)
            Next i
            temp(0) = total
            JoursOuvrés = temp(mois)
        End If
    Next nm

End Function

Bonne journée à tous

Sujet clos

Bonsoir Tomato, le Fil,

Voir le fichier ci dessous nommé trèscontent.

A partir d'une plage nommée d'adresses de cellules disjointes et d'une valeur numérique correspondant à un mois de ressortir le résultat du tableau.

15trescontent.xlsx (11.72 Ko)

Bonsoir X Cellus, que voici là une rigolote mais non moins intéressante façon de voir !

Une portée limitée (même longueur de chaine de caractère pour la colonne et la ligne).

En tout cas j'aurais appris quelque-chose, many thanks

Bonjour à tous,

Sinon il y a aussi, avec CHOISIR, la manière suivante :

=CHOISIR(C24;B18;E18;B19;E19;B20;E20;B21;E21;B22;E22;B23;E23;B24;E24)

Bonne continuation

Chris

13pascontent2.xlsx (11.27 Ko)

Salut,

Belle astuce X Cellus !

Bonsoir X Cellus, que voici là une rigolote mais non moins intéressante façon de voir !

Une portée limitée (même longueur de chaine de caractère pour la colonne et la ligne).

En tout cas j'aurais appris quelque-chose, many thanks

Vu que les références sont sous forme de texte, on peut toujours rajouter un signe devant chaque adresse de cellule, par exemple un tiret, et cibler le Xième tiret (ou plutôt les caractères entre 2 tirets).

Alors il n'y a plus l'obligation d'avoir le même nombre de signes pour les colonnes et lignes.

En tout cas je suis étonné que CHOISIR ait du mal avec les plages et noms alors que les noms définis font partie des arguments possibles ;

https://support.microsoft.com/fr-fr/office/choisir-choisir-fonction-fc5c184f-cb62-4ec7-a46e-38653b98...

Bonjour à tous !

@Doux Rêveur : Hello !

En tout cas je suis étonné que CHOISIR ait du mal avec les plages et noms alors que les noms définis font partie des arguments possibles

La fonction CHOISIR n'éprouve aucune difficulté avec les plages et les noms. Mais il faut un usage en conformité avec sa syntaxe.

====> L'index renvoie à la plage (ou le nom) de la liste passée en argument. Et non dans la plage (ou le nom).

Salut JFL, il y a une nuance que j'ai du mal à saisir. J'ai testé dans tous les sens cette fonction et n'ai jamais réussi à la faire fonctionner avec un nom de plage alors que pour d'autres fonctions ça va très bien.

Bonjour à tous de nouveau !

Un petit exemple avec des plages nommées :

Ok merci, donc les plages nommées doivent contenir des cellules contiguës en fait.

Bonjour à tous de nouveau !

.... donc les plages nommées doivent contenir des cellules contiguës en fait.

Pas nécessairement. Voir l'exemple :

D'accord, la somme est possible mais l'utilisation que tomato voulait en avoir n'est pas possible, j'aurais cru que oui.

Bonjour à tous de nouveau !

...... l'utilisation que tomato voulait en avoir n'est pas possible, j'aurais cru que oui.

Absolument. La fonction CHOISIR n'est pas prévue pour cet usage. L'erreur en retour est donc logique.

Rechercher des sujets similaires à "formule choisir plage nommee index"