Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Liste triée sans vide ni doublon.

8 réponses
Avatar
Patrick BASTARD
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la colonne C, 1
colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3, E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de validation triée,
sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle existe !
(formule ou VBA).


--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

8 réponses

Avatar
JB
Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheValeurs Nom

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la colon ne C, 1
colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3, E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de validation tri ée,
sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les différ ents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle existe !
(formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.


Avatar
Patrick BASTARD
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à obtenir les numéros
de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE(INDIRECT("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUMERO;NUMERO;0));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la liste
"Charlie, Dupont, Martin, ..." pour générer une validation en A1. Le but :
extraire les machines d'un détenteur non pas en entrant son nom, mais en
choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l'édition d'une
fiche d'inventaire pour chaque item de la liste située en A1.


--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.


Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheValeursNom

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3, E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle existe !
(formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.




Avatar
JB
Avec fonction perso.

http://cjoint.com/?itmlbwaTSt

Function SansDoublonsTriéLig(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = Application.Transpose(champ)
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTriéLig = Application.Transpose(a)
End Function

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub


JB
On 19 août, 11:26, "Patrick BASTARD"
wrote:
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à obte nir les numéros
de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE(IN DIRECT­("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEUR¡;NUME RO);COLONNE­(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUMERO;NU MERO;0­));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la liste
"Charlie, Dupont, Martin, ..." pour générer une validation en A1. Le but :
extraire les machines d'un détenteur non pas en entrant son nom, mais en
choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l'éditi on d'une
fiche d'inventaire pour chaque item de la liste située en A1.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheV...

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3, E3:F3,.. .)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les diff érents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle existe !
(formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -




Avatar
Patrick BASTARD
Bonjour, *Jacques*

Mille mercis.
Pile poil ce que je cherchais.
Impressionnant !!!

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Avec fonction perso.

http://cjoint.com/?itmlbwaTSt

Function SansDoublonsTriéLig(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = Application.Transpose(champ)
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTriéLig = Application.Transpose(a)
End Function

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub


JB
On 19 août, 11:26, "Patrick BASTARD"
wrote:
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à obtenir les
numéros de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE(INDIRECT­("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE­(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUMERO;NUMERO;0­));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la liste
"Charlie, Dupont, Martin, ..." pour générer une validation en A1. Le
but : extraire les machines d'un détenteur non pas en entrant son
nom, mais en choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l'édition
d'une fiche d'inventaire pour chaque item de la liste située en A1.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheV...

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3,
E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les
différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle
existe ! (formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.-
Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -






Avatar
JB
Une petite modif si nom vide dans le champ

http://cjoint.com/?itnriNFnuk

JB


On 19 août, 12:26, "Patrick BASTARD"
wrote:
Bonjour, *Jacques*

Mille mercis.
Pile poil ce que je cherchais.
Impressionnant !!!

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Avec fonction perso.

http://cjoint.com/?itmlbwaTSt

Function SansDoublonsTriéLig(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = Application.Transpose(champ)
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTriéLig = Application.Transpose(a)
End Function

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
On 19 août, 11:26, "Patrick BASTARD"
wrote:
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à o btenir les
numéros de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE (INDIRECT­­("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEUR=A 1;NUMERO);COLONN­E­(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUMERO ;NUMERO;0­­));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la liste
"Charlie, Dupont, Martin, ..." pour générer une validation en A1. Le
but : extraire les machines d'un détenteur non pas en entrant son
nom, mais en choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l'éd ition
d'une fiche d'inventaire pour chaque item de la liste située en A1.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheV. ..

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3,
E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les
différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle
existe ! (formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.-
Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -



- Afficher le texte des messages précédents -






Avatar
Patrick BASTARD
Bonjour, *Jacques*

Merci pour ce complément.
J'avais pour ma part résolu le cas des cellules vides au niveau de la
validation :
ÞCALER(PremDet;1;;NB.SI(ListeDetenteurs;"<>#N/A")-1)
PremDet = 1° ligne de la matrice, ListeDetenteurs= matrice
en voyant que les cellules vides renvoyaient en 1° position la valeur 0.

Je reviens vers toi pour te demander, si ce n'est pas abuser, de m'expliquer
le code de cette macro (aucune urgence, mais j'aime bien comprendre, et
impossible de l'exécuter en pas à pas détaillé pour voir l'évolution des
variables) :

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Une petite modif si nom vide dans le champ

http://cjoint.com/?itnriNFnuk

JB


On 19 août, 12:26, "Patrick BASTARD"
wrote:
Bonjour, *Jacques*

Mille mercis.
Pile poil ce que je cherchais.
Impressionnant !!!

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Avec fonction perso.

http://cjoint.com/?itmlbwaTSt

Function SansDoublonsTriéLig(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = Application.Transpose(champ)
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTriéLig = Application.Transpose(a)
End Function

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
On 19 août, 11:26, "Patrick BASTARD"
wrote:
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à obtenir
les
numéros de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE(INDIRECT­­("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONN­E­(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUMERO;NUMERO;0­­));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la
liste "Charlie, Dupont, Martin, ..." pour générer une validation
en A1. Le
but : extraire les machines d'un détenteur non pas en entrant son
nom, mais en choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l'édition
d'une fiche d'inventaire pour chaque item de la liste située en A1.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheV...

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3,
E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les
différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle
existe ! (formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.-
Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte
des messages précédents -



- Afficher le texte des messages précédents -








Avatar
JB
http://boisgontierjacques.free.fr/pages_site/TriQuickSort.htm

JB

On 19 août, 16:05, "Patrick BASTARD"
wrote:
Bonjour, *Jacques*

Merci pour ce complément.
J'avais pour ma part résolu le cas des cellules vides au niveau de la
validation :
ÞCALER(PremDet;1;;NB.SI(ListeDetenteurs;"<>#N/A")-1)
PremDet = 1° ligne de la matrice, ListeDetenteurs= matrice
en voyant que les cellules vides renvoyaient en 1° position la valeur 0.

Je reviens vers toi pour te demander, si ce n'est pas abuser, de m'expliq uer
le code de cette macro (aucune urgence, mais j'aime bien comprendre, et
impossible de l'exécuter en pas à pas détaillé pour voir l'évol ution des
variables) :

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Une petite modif si nom vide dans le champ

http://cjoint.com/?itnriNFnuk

JB

On 19 août, 12:26, "Patrick BASTARD"
wrote:
Bonjour, *Jacques*

Mille mercis.
Pile poil ce que je cherchais.
Impressionnant !!!

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Avec fonction perso.

http://cjoint.com/?itmlbwaTSt

Function SansDoublonsTriéLig(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = Application.Transpose(champ)
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTriéLig = Application.Transpose(a)
End Function

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
On 19 août, 11:26, "Patrick BASTARD"
wrote:
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à obtenir
les
numéros de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLON NE(INDIRECT­­­("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEU R¡;NUMERO);COLON­N­E­(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUME RO;NUMERO;0­­­));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la
liste "Charlie, Dupont, Martin, ..." pour générer une validation
en A1. Le
but : extraire les machines d'un détenteur non pas en entrant son
nom, mais en choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l' édition
d'une fiche d'inventaire pour chaque item de la liste située en A1.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#Recherche V...

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3,
E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les
différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle
existe ! (formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.-
Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte
des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -



- Afficher le texte des messages précédents -








Avatar
Patrick BASTARD
Merci, *Jacques*

Je vais maintenant cueillir des mûres, histoire de m'aérer les neurones -ils
en ont bien besoin- et, ensuite, étudier cette méthode.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



http://boisgontierjacques.free.fr/pages_site/TriQuickSort.htm

JB

On 19 août, 16:05, "Patrick BASTARD"
wrote:
Bonjour, *Jacques*

Merci pour ce complément.
J'avais pour ma part résolu le cas des cellules vides au niveau de la
validation :
ÞCALER(PremDet;1;;NB.SI(ListeDetenteurs;"<>#N/A")-1)
PremDet = 1° ligne de la matrice, ListeDetenteurs= matrice
en voyant que les cellules vides renvoyaient en 1° position la
valeur 0.

Je reviens vers toi pour te demander, si ce n'est pas abuser, de
m'expliquer le code de cette macro (aucune urgence, mais j'aime bien
comprendre, et impossible de l'exécuter en pas à pas détaillé pour
voir l'évolution des variables) :

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Une petite modif si nom vide dans le champ

http://cjoint.com/?itnriNFnuk

JB

On 19 août, 12:26, "Patrick BASTARD"
wrote:
Bonjour, *Jacques*

Mille mercis.
Pile poil ce que je cherchais.
Impressionnant !!!

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Avec fonction perso.

http://cjoint.com/?itmlbwaTSt

Function SansDoublonsTriéLig(champ As Range)
Set MonDico = CreateObject("Scripting.Dictionary")
temp = Application.Transpose(champ)
For i = 1 To UBound(temp, 1)
If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1),
temp(i, 1)
Next i
a = MonDico.items
j = UBound(a)
Call tri(a, 0, j)
SansDoublonsTriéLig = Application.Transpose(a)
End Function

Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
On 19 août, 11:26, "Patrick BASTARD"
wrote:
Bonjour, *JB*

Merci pour ton exemple.

J'ai dû mal m'exprimer.
J'avais déjà réussi, grâce à un autre de tes exemples, à obtenir
les
numéros de machine d'un détenteur en A1 :
=TRANSPOSE(SI(ESTNUM(PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLONNE(INDIRECT­­­("1:"&COLONNES(DETENTEUR)))));PETITE.VALEUR(SI(DETENTEUR¡;NUMERO);COLON­N­E­(INDIRECT("1:"&COLONNES(DETENTEUR))));0))
Et je prends note de ta proposition qui est plus courte :
=TRANSPOSE(INDEX(NUMERO;PETITE.VALEUR(SI(DETENTEUR¡;EQUIV(NUMERO;NUMERO;0­­­));COLONNE(INDIRECT("1:"&COLONNES(NUMERO))))))

Maintenant, je cherche, en reprenant ton exemple, à obtenir la
liste "Charlie, Dupont, Martin, ..." pour générer une validation
en A1. Le
but : extraire les machines d'un détenteur non pas en entrant son
nom, mais en choisissant celui-ci dans une liste déroulante.
L'objectif à terme étant de pouvoir, par macro, générer l'édition
d'une fiche d'inventaire pour chaque item de la liste située en
A1.

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Bonjour,

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#RechercheV...

JB

On 19 août, 01:46, "Patrick BASTARD"
wrote:
Bonjour à toutes et tous.

Mes données sur une feuille "Machine" en ligne 3 à partir de la
colonne C, 1 colonne sur 2 (Zone nommée "Détenteur").
En fait, ces données sont centrées sur 2 colonnes (C3:D3,
E3:F3,...)
Ce sont des noms non triés alpha, qui peuvent se répéter.
Comment, sur la feuille "Inventaire", obtenir une liste de
validation triée, sans vide ni doublon ?

J'ai passé une bonne partie de l'après-midi à triturer les
différents
exemples de JB, sans y parvenir.

D'avance, merci à qui pourra me donner la solution - si elle
existe ! (formule ou VBA).

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.-
Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte
des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte
des messages précédents -



- Afficher le texte des messages précédents -