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

Définition de nom sélectif

20 réponses
Avatar
rthompson
Bonjour à toutes et tous

Descriptif court du problème

Peut-on définir une plage par un nom suivant un tri
C'est-à-dire que dans une colonne A j'ai une série de noms
Dans une autre colonne B j'ai une catégorie (par exemple offer, order,
sale, paid, etc)
Y a-t-il moyen que la plage définie en colonne A ne prenne en compte que
ceux ou il y "offer" dans B


Descriptif long (même très long........)

Après avoir passé plusieurs mois à créer (grâce à vous) un tableau pour
suivi de vente,
j'ai décidé changer mon approche
En effet le nombre de feuilles et le transfère de lignes de feuilles en
feuille devient lourd

OUI JE SAIS
Avant de créer un fichier, que ce soit en Excel ou en Powerpoint,
il faut passer du temps à bien PREPARER son projet
Et à comprendre ce que l'on cherche à obtenir
Et les conséquences de ce qu'on va produire
Mais que ceux qui ne se sont jamais lancé sans trop réflechir me lance la
première pierre
:-)))) ou ;-(((( je ne sais pas

Revenons à nos moutons, comme disait Saint Exepury
Même si il ne faut pas toujours croire ce qu'ils disent, comme disait le
berger au ventriloque

Je travail avec des listbox pour sélectionner l'info requise
Par exemple sur la feuille Offre j'ai toute une série d'offres (une par
ligne)
Sur ma feuille consult-Offres je sélectionne une offre dans ma listbox
dont le Format-Control refère à un nom défini
par une formule du type
=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)

L'info de cet offre est mis en forme sur ma feuille ce qui la rends
compréhensible
Si l'offre est accepté, par macro (via bouton) je transfère cet info vers la
feuille Ordres
Et ainsi de suite lors de chaque étape de la procédure

Cela fonctionne mais suite à des changements, je dois insérer des nouvelles
étapes dans la procédure

Donc ce que j'envisage est ceci;

Je me demandais si je ne pouvais pas garder toute l'info sur une même
feuille
Toute en gardant le même format (une offre sur toute la ligne)
mais en ajoutant une colonne ou je pourrais insérer un code pour indiquer
l'étape de l'offre

Cela je pourrais le faire (je crois) grâce à tout ce que vous m'avez enfoncé
dans le crâne

Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont à
l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"

Ce que j'aspire à réaliser est une feuille ou je pourrais visionner toutes
mes Offres, ou mes Ventes, ou mes payés

MAIS un TCD ne convient pas puisque je dois pouvoir changer l'info et
l'étape à tout moment
C'est-à-dire que je sélectionne une offre, et que quand elle est affichée je
puisse y faire des changements


Je ne sais pas si je suis assez clair

Mais j'espère pouvoir compter sur vous vos questions éventuelles
et surtout sur vos réponses

Un grand merci à vous

Rex



que ceux

10 réponses

1 2
Avatar
Misange
Salut grand Rex
j'avais un pb à peu près similaire que j'ai résolu de la façon suivante :
j'alimente mon tableau principal et j'ai une tite macro qui
1) trie le tableau par offre (dans ton cas)
2) définit une série de noms (tu peux en mettre autant que tu veux ! qui
font référence aux valeurs des colonnes B, C, D, E ... qui ont la même
valeur pour offre
Ca me permet d'avoir des tableaux d'analyse de la table principale
construits une fois pour toute (si seulement !) avec ces noms. Ces
tableaux se mettent ainsi à jour tout seul (juste en cliquant sur le
bouton de mise à jour des noms définis).

voici le binz à adapter (attention aux coupures de lignes intempestives)
dans mon cas, ce sont les données de la conlonne C qui sont l'équivalent
de tes "offres".


Sub Nommer()
' Enleve les Noms courants (au cas où les Plages rétrécissent)
For i = ActiveWorkbook.Names.Count To 1 Step -1
ActiveWorkbook.Names(i).Delete
Next i


' on trie les données
Range("A1:O3000").Sort Key1:=Range("C2"), Order1:=xlAscending,
Key2:=Range _
("F2"), Order2:=xlAscending, Key3:=Range("G2"), Order3:=xlAscending, _
Header:=xlGuess


Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range([C2], [C65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
Next c

For Each c In mondico.items
ActiveWorkbook.Names.Add Name:="truc" & c, _
RefersTo:="=" & [J2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
ActiveWorkbook.Names.Add Name:="machin" & c, _
RefersTo:="=" & [l2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
Next c

End Sub


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonjour à toutes et tous

Descriptif court du problème

Peut-on définir une plage par un nom suivant un tri
C'est-à-dire que dans une colonne A j'ai une série de noms
Dans une autre colonne B j'ai une catégorie (par exemple offer, order,
sale, paid, etc)
Y a-t-il moyen que la plage définie en colonne A ne prenne en compte que
ceux ou il y "offer" dans B


Descriptif long (même très long........)

Après avoir passé plusieurs mois à créer (grâce à vous) un tableau pour
suivi de vente,
j'ai décidé changer mon approche
En effet le nombre de feuilles et le transfère de lignes de feuilles en
feuille devient lourd

OUI JE SAIS
Avant de créer un fichier, que ce soit en Excel ou en Powerpoint,
il faut passer du temps à bien PREPARER son projet
Et à comprendre ce que l'on cherche à obtenir
Et les conséquences de ce qu'on va produire
Mais que ceux qui ne se sont jamais lancé sans trop réflechir me lance la
première pierre
:-)))) ou ;-(((( je ne sais pas

Revenons à nos moutons, comme disait Saint Exepury
Même si il ne faut pas toujours croire ce qu'ils disent, comme disait le
berger au ventriloque

Je travail avec des listbox pour sélectionner l'info requise
Par exemple sur la feuille Offre j'ai toute une série d'offres (une par
ligne)
Sur ma feuille consult-Offres je sélectionne une offre dans ma listbox
dont le Format-Control refère à un nom défini
par une formule du type
=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)

L'info de cet offre est mis en forme sur ma feuille ce qui la rends
compréhensible
Si l'offre est accepté, par macro (via bouton) je transfère cet info vers la
feuille Ordres
Et ainsi de suite lors de chaque étape de la procédure

Cela fonctionne mais suite à des changements, je dois insérer des nouvelles
étapes dans la procédure

Donc ce que j'envisage est ceci;

Je me demandais si je ne pouvais pas garder toute l'info sur une même
feuille
Toute en gardant le même format (une offre sur toute la ligne)
mais en ajoutant une colonne ou je pourrais insérer un code pour indiquer
l'étape de l'offre

Cela je pourrais le faire (je crois) grâce à tout ce que vous m'avez enfoncé
dans le crâne

Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont à
l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"

Ce que j'aspire à réaliser est une feuille ou je pourrais visionner toutes
mes Offres, ou mes Ventes, ou mes payés

MAIS un TCD ne convient pas puisque je dois pouvoir changer l'info et
l'étape à tout moment
C'est-à-dire que je sélectionne une offre, et que quand elle est affichée je
puisse y faire des changements


Je ne sais pas si je suis assez clair

Mais j'espère pouvoir compter sur vous vos questions éventuelles
et surtout sur vos réponses

Un grand merci à vous

Rex



que ceux




Avatar
Trirème
Bonjour Rex

Revenons à nos moutons, comme disait Saint Exepury
Je ne connais pas ce type, par contre je connais son cousin, Saint Éxupéry...

... Maiééêêêss ;-)


Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont à
l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"
Je te propose une boucle qui parcourt et compare chaque cellule de la sélection courante

(à adapter avec ta colonne C) avec une valeur (à choisir) puis constitue un nom par unions
successives.
L'exemple crée 2 noms, l'un dans la colonne de la sélection, l'autre, pour les mêmes
lignes mais dans une colonne décalée.

Dim c As Range
Dim MonRange As Range ' Sous-sélection de la colonne courante
Dim MonRangeAutreColonne As Range ' Sous-sélection décalée de la colonne courante
Dim Decalage As Integer
Dim Etape As String

' Avant d'exécuter le code la sélection courante est supposée être une colonne
Decalage = 1 ' A adapter
Etape = "Sale" ' A adapter
For Each c In Selection ' Selection courante à adapter
If c = Etape Then
If MonRange Is Nothing Then
Set MonRange = c
Set MonRangeAutreColonne = c.Offset(, Decalage)
Else
Set MonRange = Union(MonRange, c)
Set MonRangeAutreColonne = Union(MonRangeAutreColonne, c.Offset(, Decalage))
End If
End If
Next
On Error Resume Next ' Gérer le cas d'une plage vide
ActiveWorkbook.Names.Add Name:="MonNom", RefersToR1C1:=MonRange
ActiveWorkbook.Names.Add Name:="MonAutreColonne", RefersToR1C1:=MonRangeAutreColonne

Cordialement,
Trirème

Avatar
rthompson
Saint Exepury spécialiste en Excel
Saint Exupéry surtout connu parce qu'il avait un petit bracelet ;-))

Mais oui tu as raison
Et moi pôvre petit anglissshee je me suis lourdement trompeté


Mais faisons fi de tes remarques injurieuse sur mon érudition mondialement
reconnue
et revenons à notre sujet (j'ose plus parler de moutons)

Je vais passer un peu de temps sur les propositions que toi et notre Misange
préférée avez émis

et je vous tiens au courant soit dans le courant de l'près-midi, soit demain
matin

Merci à toi

Et à bientôt

Rex ;-))) ))) toujours ce double menton


"Trirème" a écrit dans le message de news:

Bonjour Rex

Revenons à nos moutons, comme disait Saint Exepury
Je ne connais pas ce type, par contre je connais son cousin, Saint

Éxupéry...
... Maiééêêêss ;-)


Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont
à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"
Je te propose une boucle qui parcourt et compare chaque cellule de la

sélection courante (à adapter avec ta colonne C) avec une valeur (à
choisir) puis constitue un nom par unions successives.
L'exemple crée 2 noms, l'un dans la colonne de la sélection, l'autre, pour
les mêmes lignes mais dans une colonne décalée.

Dim c As Range
Dim MonRange As Range ' Sous-sélection de la colonne
courante
Dim MonRangeAutreColonne As Range ' Sous-sélection décalée de la colonne
courante
Dim Decalage As Integer
Dim Etape As String

' Avant d'exécuter le code la sélection courante est supposée être une
colonne
Decalage = 1 ' A adapter
Etape = "Sale" ' A adapter
For Each c In Selection ' Selection courante à adapter
If c = Etape Then
If MonRange Is Nothing Then
Set MonRange = c
Set MonRangeAutreColonne = c.Offset(, Decalage)
Else
Set MonRange = Union(MonRange, c)
Set MonRangeAutreColonne = Union(MonRangeAutreColonne,
c.Offset(, Decalage))
End If
End If
Next
On Error Resume Next ' Gérer le cas d'une plage vide
ActiveWorkbook.Names.Add Name:="MonNom", RefersToR1C1:=MonRange
ActiveWorkbook.Names.Add Name:="MonAutreColonne",
RefersToR1C1:=MonRangeAutreColonne

Cordialement,
Trirème



Avatar
rthompson
Bonjour

Comme je viens de le dire à Trirème

Je jette un coup d'oeil
J'essaie de comprendre vos propositions
Et je vous recontacte plus tard

De toute façon un grand merci à vous deux

Et n'oubliez pas

Si vous êtes dans les environs d'Houffalize en fin de mois
Je vous attends à table

Rex :-))) )))


"Misange" a écrit dans le message de news:
%
Salut grand Rex
j'avais un pb à peu près similaire que j'ai résolu de la façon suivante :
j'alimente mon tableau principal et j'ai une tite macro qui
1) trie le tableau par offre (dans ton cas)
2) définit une série de noms (tu peux en mettre autant que tu veux ! qui
font référence aux valeurs des colonnes B, C, D, E ... qui ont la même
valeur pour offre
Ca me permet d'avoir des tableaux d'analyse de la table principale
construits une fois pour toute (si seulement !) avec ces noms. Ces
tableaux se mettent ainsi à jour tout seul (juste en cliquant sur le
bouton de mise à jour des noms définis).

voici le binz à adapter (attention aux coupures de lignes intempestives)
dans mon cas, ce sont les données de la conlonne C qui sont l'équivalent
de tes "offres".


Sub Nommer()
' Enleve les Noms courants (au cas où les Plages rétrécissent)
For i = ActiveWorkbook.Names.Count To 1 Step -1
ActiveWorkbook.Names(i).Delete
Next i


' on trie les données
Range("A1:O3000").Sort Key1:=Range("C2"), Order1:=xlAscending,
Key2:=Range _
("F2"), Order2:=xlAscending, Key3:=Range("G2"), Order3:=xlAscending, _
Header:=xlGuess


Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range([C2], [C65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
Next c

For Each c In mondico.items
ActiveWorkbook.Names.Add Name:="truc" & c, _
RefersTo:="=" & [J2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
ActiveWorkbook.Names.Add Name:="machin" & c, _
RefersTo:="=" & [l2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
Next c

End Sub


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonjour à toutes et tous

Descriptif court du problème

Peut-on définir une plage par un nom suivant un tri
C'est-à-dire que dans une colonne A j'ai une série de noms
Dans une autre colonne B j'ai une catégorie (par exemple offer, order,
sale, paid, etc)
Y a-t-il moyen que la plage définie en colonne A ne prenne en compte que
ceux ou il y "offer" dans B


Descriptif long (même très long........)

Après avoir passé plusieurs mois à créer (grâce à vous) un tableau pour
suivi de vente,
j'ai décidé changer mon approche
En effet le nombre de feuilles et le transfère de lignes de feuilles en
feuille devient lourd

OUI JE SAIS
Avant de créer un fichier, que ce soit en Excel ou en Powerpoint,
il faut passer du temps à bien PREPARER son projet
Et à comprendre ce que l'on cherche à obtenir
Et les conséquences de ce qu'on va produire
Mais que ceux qui ne se sont jamais lancé sans trop réflechir me lance la
première pierre
:-)))) ou ;-(((( je ne sais pas

Revenons à nos moutons, comme disait Saint Exepury
Même si il ne faut pas toujours croire ce qu'ils disent, comme disait le
berger au ventriloque

Je travail avec des listbox pour sélectionner l'info requise
Par exemple sur la feuille Offre j'ai toute une série d'offres (une par
ligne)
Sur ma feuille consult-Offres je sélectionne une offre dans ma listbox
dont le Format-Control refère à un nom défini
par une formule du type
=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)

L'info de cet offre est mis en forme sur ma feuille ce qui la rends
compréhensible
Si l'offre est accepté, par macro (via bouton) je transfère cet info vers
la feuille Ordres
Et ainsi de suite lors de chaque étape de la procédure

Cela fonctionne mais suite à des changements, je dois insérer des
nouvelles étapes dans la procédure

Donc ce que j'envisage est ceci;

Je me demandais si je ne pouvais pas garder toute l'info sur une même
feuille
Toute en gardant le même format (une offre sur toute la ligne)
mais en ajoutant une colonne ou je pourrais insérer un code pour indiquer
l'étape de l'offre

Cela je pourrais le faire (je crois) grâce à tout ce que vous m'avez
enfoncé dans le crâne

Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont
à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"

Ce que j'aspire à réaliser est une feuille ou je pourrais visionner
toutes mes Offres, ou mes Ventes, ou mes payés

MAIS un TCD ne convient pas puisque je dois pouvoir changer l'info et
l'étape à tout moment
C'est-à-dire que je sélectionne une offre, et que quand elle est affichée
je puisse y faire des changements


Je ne sais pas si je suis assez clair

Mais j'espère pouvoir compter sur vous vos questions éventuelles
et surtout sur vos réponses

Un grand merci à vous

Rex



que ceux




Avatar
rthompson
Bonjour

Et désolé ;-(((( ((((

Mais je ne comprends pas

Ni ta solution, ni celle de Trirème
A mon avis je suis dans une phase de "No comprendo" aigue ces temps ci

Faut-ty que je sois biesse

Alors je vous (toi et les ceussse qui veulent) mets un petit fichier type

Il est évident que mon fichier est nettement plus compliqué
mais si toi, ou quelqu'un d'autre, me guide sur celui-ci
je crois être assez fort pour adapter

Enfin, je crois ;-)))



A bientôt et un grand merci


Rex

Et voici le fichier http://cjoint.com/?ihp0OiWnhX




"Misange" a écrit dans le message de news:
%
Salut grand Rex
j'avais un pb à peu près similaire que j'ai résolu de la façon suivante :
j'alimente mon tableau principal et j'ai une tite macro qui
1) trie le tableau par offre (dans ton cas)
2) définit une série de noms (tu peux en mettre autant que tu veux ! qui
font référence aux valeurs des colonnes B, C, D, E ... qui ont la même
valeur pour offre
Ca me permet d'avoir des tableaux d'analyse de la table principale
construits une fois pour toute (si seulement !) avec ces noms. Ces
tableaux se mettent ainsi à jour tout seul (juste en cliquant sur le
bouton de mise à jour des noms définis).

voici le binz à adapter (attention aux coupures de lignes intempestives)
dans mon cas, ce sont les données de la conlonne C qui sont l'équivalent
de tes "offres".


Sub Nommer()
' Enleve les Noms courants (au cas où les Plages rétrécissent)
For i = ActiveWorkbook.Names.Count To 1 Step -1
ActiveWorkbook.Names(i).Delete
Next i


' on trie les données
Range("A1:O3000").Sort Key1:=Range("C2"), Order1:=xlAscending,
Key2:=Range _
("F2"), Order2:=xlAscending, Key3:=Range("G2"), Order3:=xlAscending, _
Header:=xlGuess


Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range([C2], [C65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
Next c

For Each c In mondico.items
ActiveWorkbook.Names.Add Name:="truc" & c, _
RefersTo:="=" & [J2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
ActiveWorkbook.Names.Add Name:="machin" & c, _
RefersTo:="=" & [l2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
Next c

End Sub


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonjour à toutes et tous

Descriptif court du problème

Peut-on définir une plage par un nom suivant un tri
C'est-à-dire que dans une colonne A j'ai une série de noms
Dans une autre colonne B j'ai une catégorie (par exemple offer, order,
sale, paid, etc)
Y a-t-il moyen que la plage définie en colonne A ne prenne en compte que
ceux ou il y "offer" dans B


Descriptif long (même très long........)

Après avoir passé plusieurs mois à créer (grâce à vous) un tableau pour
suivi de vente,
j'ai décidé changer mon approche
En effet le nombre de feuilles et le transfère de lignes de feuilles en
feuille devient lourd

OUI JE SAIS
Avant de créer un fichier, que ce soit en Excel ou en Powerpoint,
il faut passer du temps à bien PREPARER son projet
Et à comprendre ce que l'on cherche à obtenir
Et les conséquences de ce qu'on va produire
Mais que ceux qui ne se sont jamais lancé sans trop réflechir me lance la
première pierre
:-)))) ou ;-(((( je ne sais pas

Revenons à nos moutons, comme disait Saint Exepury
Même si il ne faut pas toujours croire ce qu'ils disent, comme disait le
berger au ventriloque

Je travail avec des listbox pour sélectionner l'info requise
Par exemple sur la feuille Offre j'ai toute une série d'offres (une par
ligne)
Sur ma feuille consult-Offres je sélectionne une offre dans ma listbox
dont le Format-Control refère à un nom défini
par une formule du type
=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)

L'info de cet offre est mis en forme sur ma feuille ce qui la rends
compréhensible
Si l'offre est accepté, par macro (via bouton) je transfère cet info vers
la feuille Ordres
Et ainsi de suite lors de chaque étape de la procédure

Cela fonctionne mais suite à des changements, je dois insérer des
nouvelles étapes dans la procédure

Donc ce que j'envisage est ceci;

Je me demandais si je ne pouvais pas garder toute l'info sur une même
feuille
Toute en gardant le même format (une offre sur toute la ligne)
mais en ajoutant une colonne ou je pourrais insérer un code pour indiquer
l'étape de l'offre

Cela je pourrais le faire (je crois) grâce à tout ce que vous m'avez
enfoncé dans le crâne

Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont
à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"

Ce que j'aspire à réaliser est une feuille ou je pourrais visionner
toutes mes Offres, ou mes Ventes, ou mes payés

MAIS un TCD ne convient pas puisque je dois pouvoir changer l'info et
l'étape à tout moment
C'est-à-dire que je sélectionne une offre, et que quand elle est affichée
je puisse y faire des changements


Je ne sais pas si je suis assez clair

Mais j'espère pouvoir compter sur vous vos questions éventuelles
et surtout sur vos réponses

Un grand merci à vous

Rex



que ceux




Avatar
rthompson
Bonjour à toi

Mais comme je viens de le signaler à Misange

Je ne parviens pas à suivre vos propositions

J'ai jamais compris ces trucs comme integrer et String

Parfois, avec beaucoup de chance et de chipot, j'arrive à faire des trucs
mais ici le cerveau refuse toute co-opération

Donc voici un petit fichier tronqué

Si tu as le temps et la gentillesse de me pousser dans le bon sens

Je te serais très reconnaissant


A bientôt


Rex ;-)))) )))

http://cjoint.com/?ihp0OiWnhX





"Trirème" a écrit dans le message de news:

Bonjour Rex

Revenons à nos moutons, comme disait Saint Exepury
Je ne connais pas ce type, par contre je connais son cousin, Saint

Éxupéry...
... Maiééêêêss ;-)


Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont
à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"
Je te propose une boucle qui parcourt et compare chaque cellule de la

sélection courante (à adapter avec ta colonne C) avec une valeur (à
choisir) puis constitue un nom par unions successives.
L'exemple crée 2 noms, l'un dans la colonne de la sélection, l'autre, pour
les mêmes lignes mais dans une colonne décalée.

Dim c As Range
Dim MonRange As Range ' Sous-sélection de la colonne
courante
Dim MonRangeAutreColonne As Range ' Sous-sélection décalée de la colonne
courante
Dim Decalage As Integer
Dim Etape As String

' Avant d'exécuter le code la sélection courante est supposée être une
colonne
Decalage = 1 ' A adapter
Etape = "Sale" ' A adapter
For Each c In Selection ' Selection courante à adapter
If c = Etape Then
If MonRange Is Nothing Then
Set MonRange = c
Set MonRangeAutreColonne = c.Offset(, Decalage)
Else
Set MonRange = Union(MonRange, c)
Set MonRangeAutreColonne = Union(MonRangeAutreColonne,
c.Offset(, Decalage))
End If
End If
Next
On Error Resume Next ' Gérer le cas d'une plage vide
ActiveWorkbook.Names.Add Name:="MonNom", RefersToR1C1:=MonRange
ActiveWorkbook.Names.Add Name:="MonAutreColonne",
RefersToR1C1:=MonRangeAutreColonne

Cordialement,
Trirème



Avatar
Trirème
Bonsoir Grand Bavard

Je te propose le fichier suivant http://cjoint.com/?iicjUaMJq8
Il n'est pas basé sur des listbox mais sur des listes de validation.
En I4 tu choisiras un statut parmi la liste de validation.
En I6 tu choisiras une offre parmi la liste correspondant au statut choisi. Cette 2ème
liste est créée de manière dynamique par une procédure événementielle.

J'ai ajouté 4 noms dans le classeur, dont un nom dynamique (DECALER).
Cette procédure événementielle parait lourde mais j'ai essayé de la rendre indépendante de
la position des données dans 'Datas'.
Les formules paraissent lourdes également pour la même raison.

Si tu veux l'adapter à ton classeur, il suffit d'y créer les quatre noms, de copier le
code événementiel dans l'onglet 'Consultation' (clic droit, visualiser le code) et
d'ajuster les noms dans la partie initialisation

Cordialement,
Trirème

Bonjour à toi

Mais comme je viens de le signaler à Misange

Je ne parviens pas à suivre vos propositions

J'ai jamais compris ces trucs comme integrer et String

Parfois, avec beaucoup de chance et de chipot, j'arrive à faire des trucs
mais ici le cerveau refuse toute co-opération

Donc voici un petit fichier tronqué

Si tu as le temps et la gentillesse de me pousser dans le bon sens

Je te serais très reconnaissant


A bientôt


Rex ;-)))) )))

http://cjoint.com/?ihp0OiWnhX





"Trirème" a écrit dans le message de news:

Bonjour Rex

Revenons à nos moutons, comme disait Saint Exepury
Je ne connais pas ce type, par contre je connais son cousin, Saint

Éxupéry...
... Maiééêêêss ;-)


Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont
à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"
Je te propose une boucle qui parcourt et compare chaque cellule de la

sélection courante (à adapter avec ta colonne C) avec une valeur (à
choisir) puis constitue un nom par unions successives.
L'exemple crée 2 noms, l'un dans la colonne de la sélection, l'autre, pour
les mêmes lignes mais dans une colonne décalée.

Dim c As Range
Dim MonRange As Range ' Sous-sélection de la colonne
courante
Dim MonRangeAutreColonne As Range ' Sous-sélection décalée de la colonne
courante
Dim Decalage As Integer
Dim Etape As String

' Avant d'exécuter le code la sélection courante est supposée être une
colonne
Decalage = 1 ' A adapter
Etape = "Sale" ' A adapter
For Each c In Selection ' Selection courante à adapter
If c = Etape Then
If MonRange Is Nothing Then
Set MonRange = c
Set MonRangeAutreColonne = c.Offset(, Decalage)
Else
Set MonRange = Union(MonRange, c)
Set MonRangeAutreColonne = Union(MonRangeAutreColonne,
c.Offset(, Decalage))
End If
End If
Next
On Error Resume Next ' Gérer le cas d'une plage vide
ActiveWorkbook.Names.Add Name:="MonNom", RefersToR1C1:=MonRange
ActiveWorkbook.Names.Add Name:="MonAutreColonne",
RefersToR1C1:=MonRangeAutreColonne

Cordialement,
Trirème







Avatar
rthompson
Grand bavard?????????

Moi qui ne dis jamais quoi que ce soit
Moi qui gardes mes demandes et interventions dans ce groupe excessivement
courtes
Moi qui n'écris jamais pour ne rien dire
Moi qui ne passe pas son temps à écrire de longues phrases pour dire ce
qu'une personne
normale écrirait en deux mots
Moi qui ne réponds jamais , au grand jamais, hors propos
Moi qui ne fait jamais de commentaires au sujet des malpolis
Moi qui ne rempli ces espaces qu'avec de l'information et des requêtes
serieuses
sans jamais au grand jamais y ajouter un commentaire humoristique,
satyrique, cynique ou autre
Moi qui n'embête pas les "amis" avec de long message dont le contenu est
plus qu'innutile à la résolution des problèmes proposés


MOI ????? BAVARD ???? GRAND BAVARD ??????????

Allons donc, mais qu'est-ce qui peut bien te faire dire cela?????????

Maintenant que j'ai répondu à cette insulte ;-))))
Je veux bien consentir, mais rien que pour satisfaire ton égocentrisme
démesuré
à regarder ton fichier

But seriously

DEUX HEURES du mat!!!!!! et tu pense à moi?????
Ton épouse n'est pas jalouse???

J'y jette mon oeil et je tiens au courant

A bientôt et

SURTOUT

un grand merci

Et puis t'as vu ma dernière réponse à cousinhub

Extrait

Réaction du boss

"Je vais finir par admettre que de passer un certain temps journalier
dans les groupes doit être considéré comme une activité professionnellement
luccrative"

Voilà un commentaire qui devrait faire plaisir à plus un d'entres-vous

A plus tard

Rex

"Trirème" a écrit dans le message de news:

Bonsoir Grand Bavard

Je te propose le fichier suivant http://cjoint.com/?iicjUaMJq8
Il n'est pas basé sur des listbox mais sur des listes de validation.
En I4 tu choisiras un statut parmi la liste de validation.
En I6 tu choisiras une offre parmi la liste correspondant au statut
choisi. Cette 2ème liste est créée de manière dynamique par une procédure
événementielle.

J'ai ajouté 4 noms dans le classeur, dont un nom dynamique (DECALER).
Cette procédure événementielle parait lourde mais j'ai essayé de la rendre
indépendante de la position des données dans 'Datas'.
Les formules paraissent lourdes également pour la même raison.

Si tu veux l'adapter à ton classeur, il suffit d'y créer les quatre noms,
de copier le code événementiel dans l'onglet 'Consultation' (clic droit,
visualiser le code) et d'ajuster les noms dans la partie initialisation

Cordialement,
Trirème

Bonjour à toi

Mais comme je viens de le signaler à Misange

Je ne parviens pas à suivre vos propositions

J'ai jamais compris ces trucs comme integrer et String

Parfois, avec beaucoup de chance et de chipot, j'arrive à faire des trucs
mais ici le cerveau refuse toute co-opération

Donc voici un petit fichier tronqué

Si tu as le temps et la gentillesse de me pousser dans le bon sens

Je te serais très reconnaissant


A bientôt


Rex ;-)))) )))

http://cjoint.com/?ihp0OiWnhX





"Trirème" a écrit dans le message de news:

Bonjour Rex

Revenons à nos moutons, comme disait Saint Exepury
Je ne connais pas ce type, par contre je connais son cousin, Saint

Éxupéry...
... Maiééêêêss ;-)


Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui
sont à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"
Je te propose une boucle qui parcourt et compare chaque cellule de la

sélection courante (à adapter avec ta colonne C) avec une valeur (à
choisir) puis constitue un nom par unions successives.
L'exemple crée 2 noms, l'un dans la colonne de la sélection, l'autre,
pour les mêmes lignes mais dans une colonne décalée.

Dim c As Range
Dim MonRange As Range ' Sous-sélection de la colonne
courante
Dim MonRangeAutreColonne As Range ' Sous-sélection décalée de la
colonne courante
Dim Decalage As Integer
Dim Etape As String

' Avant d'exécuter le code la sélection courante est supposée être une
colonne
Decalage = 1 ' A adapter
Etape = "Sale" ' A adapter
For Each c In Selection ' Selection courante à adapter
If c = Etape Then
If MonRange Is Nothing Then
Set MonRange = c
Set MonRangeAutreColonne = c.Offset(, Decalage)
Else
Set MonRange = Union(MonRange, c)
Set MonRangeAutreColonne = Union(MonRangeAutreColonne,
c.Offset(, Decalage))
End If
End If
Next
On Error Resume Next ' Gérer le cas d'une plage vide
ActiveWorkbook.Names.Add Name:="MonNom", RefersToR1C1:=MonRange
ActiveWorkbook.Names.Add Name:="MonAutreColonne",
RefersToR1C1:=MonRangeAutreColonne

Cordialement,
Trirème








Avatar
rthompson
Bonjour

Ben à première vue tu as tout compris
Tout résolu

Il ne me reste plus qu'à adapter tout cela sur mon fichier et on verra

En tous les cas un super grand merci à toi

A bientôt

Rex

PS
Et si tu es du côté d'houffalize fin Aout, fais moi signe


Rex


"Trirème" a écrit dans le message de news:

Bonsoir Grand Bavard

Je te propose le fichier suivant http://cjoint.com/?iicjUaMJq8
Il n'est pas basé sur des listbox mais sur des listes de validation.
En I4 tu choisiras un statut parmi la liste de validation.
En I6 tu choisiras une offre parmi la liste correspondant au statut
choisi. Cette 2ème liste est créée de manière dynamique par une procédure
événementielle.

J'ai ajouté 4 noms dans le classeur, dont un nom dynamique (DECALER).
Cette procédure événementielle parait lourde mais j'ai essayé de la rendre
indépendante de la position des données dans 'Datas'.
Les formules paraissent lourdes également pour la même raison.

Si tu veux l'adapter à ton classeur, il suffit d'y créer les quatre noms,
de copier le code événementiel dans l'onglet 'Consultation' (clic droit,
visualiser le code) et d'ajuster les noms dans la partie initialisation

Cordialement,
Trirème

Bonjour à toi

Mais comme je viens de le signaler à Misange

Je ne parviens pas à suivre vos propositions

J'ai jamais compris ces trucs comme integrer et String

Parfois, avec beaucoup de chance et de chipot, j'arrive à faire des trucs
mais ici le cerveau refuse toute co-opération

Donc voici un petit fichier tronqué

Si tu as le temps et la gentillesse de me pousser dans le bon sens

Je te serais très reconnaissant


A bientôt


Rex ;-)))) )))

http://cjoint.com/?ihp0OiWnhX





"Trirème" a écrit dans le message de news:

Bonjour Rex

Revenons à nos moutons, comme disait Saint Exepury
Je ne connais pas ce type, par contre je connais son cousin, Saint

Éxupéry...
... Maiééêêêss ;-)


Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui
sont à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"
Je te propose une boucle qui parcourt et compare chaque cellule de la

sélection courante (à adapter avec ta colonne C) avec une valeur (à
choisir) puis constitue un nom par unions successives.
L'exemple crée 2 noms, l'un dans la colonne de la sélection, l'autre,
pour les mêmes lignes mais dans une colonne décalée.

Dim c As Range
Dim MonRange As Range ' Sous-sélection de la colonne
courante
Dim MonRangeAutreColonne As Range ' Sous-sélection décalée de la
colonne courante
Dim Decalage As Integer
Dim Etape As String

' Avant d'exécuter le code la sélection courante est supposée être une
colonne
Decalage = 1 ' A adapter
Etape = "Sale" ' A adapter
For Each c In Selection ' Selection courante à adapter
If c = Etape Then
If MonRange Is Nothing Then
Set MonRange = c
Set MonRangeAutreColonne = c.Offset(, Decalage)
Else
Set MonRange = Union(MonRange, c)
Set MonRangeAutreColonne = Union(MonRangeAutreColonne,
c.Offset(, Decalage))
End If
End If
Next
On Error Resume Next ' Gérer le cas d'une plage vide
ActiveWorkbook.Names.Add Name:="MonNom", RefersToR1C1:=MonRange
ActiveWorkbook.Names.Add Name:="MonAutreColonne",
RefersToR1C1:=MonRangeAutreColonne

Cordialement,
Trirème








Avatar
rthompson
Bonjour Misange

Juste pour te tenir au courant

La solution proposé par Trirème est superbe, ça vaut le détour

Ce qui ne veut pas dire que ta proposition n'est pas elle aussi excellente
Mais la sienne me permet d'essayer de comprndre et d'utiliser des listebox
en série

Et comme tu es notre ange gardien je tiens à te signaler que
suite à une requète tardive (finie aux petites heures) et aux réactions de
nos amis
j'ai pu présenter un rapport FORTEMENT apprécié et qui a fait dire à mon
boss


"Je vais finir par admettre que de passer un certain temps journalier
dans les groupes doit être considéré comme une activité professionnellement
luccrative"

Voilà un commentaire qui devrait faire plaisir à plus d'un d'entres-vous


A bientôt

Merci pour tout le boulot que tu fais ici et sur Excelabo

A bientôt

Rex




"Misange" a écrit dans le message de news:
%
Salut grand Rex
j'avais un pb à peu près similaire que j'ai résolu de la façon suivante :
j'alimente mon tableau principal et j'ai une tite macro qui
1) trie le tableau par offre (dans ton cas)
2) définit une série de noms (tu peux en mettre autant que tu veux ! qui
font référence aux valeurs des colonnes B, C, D, E ... qui ont la même
valeur pour offre
Ca me permet d'avoir des tableaux d'analyse de la table principale
construits une fois pour toute (si seulement !) avec ces noms. Ces
tableaux se mettent ainsi à jour tout seul (juste en cliquant sur le
bouton de mise à jour des noms définis).

voici le binz à adapter (attention aux coupures de lignes intempestives)
dans mon cas, ce sont les données de la conlonne C qui sont l'équivalent
de tes "offres".


Sub Nommer()
' Enleve les Noms courants (au cas où les Plages rétrécissent)
For i = ActiveWorkbook.Names.Count To 1 Step -1
ActiveWorkbook.Names(i).Delete
Next i


' on trie les données
Range("A1:O3000").Sort Key1:=Range("C2"), Order1:=xlAscending,
Key2:=Range _
("F2"), Order2:=xlAscending, Key3:=Range("G2"), Order3:=xlAscending, _
Header:=xlGuess


Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range([C2], [C65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
Next c

For Each c In mondico.items
ActiveWorkbook.Names.Add Name:="truc" & c, _
RefersTo:="=" & [J2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
ActiveWorkbook.Names.Add Name:="machin" & c, _
RefersTo:="=" & [l2].Offset(Application.Match(c, [C:C], 0) - 2,
0).Resize(Application.CountIf([C:C], c), 1).Address
Next c

End Sub


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonjour à toutes et tous

Descriptif court du problème

Peut-on définir une plage par un nom suivant un tri
C'est-à-dire que dans une colonne A j'ai une série de noms
Dans une autre colonne B j'ai une catégorie (par exemple offer, order,
sale, paid, etc)
Y a-t-il moyen que la plage définie en colonne A ne prenne en compte que
ceux ou il y "offer" dans B


Descriptif long (même très long........)

Après avoir passé plusieurs mois à créer (grâce à vous) un tableau pour
suivi de vente,
j'ai décidé changer mon approche
En effet le nombre de feuilles et le transfère de lignes de feuilles en
feuille devient lourd

OUI JE SAIS
Avant de créer un fichier, que ce soit en Excel ou en Powerpoint,
il faut passer du temps à bien PREPARER son projet
Et à comprendre ce que l'on cherche à obtenir
Et les conséquences de ce qu'on va produire
Mais que ceux qui ne se sont jamais lancé sans trop réflechir me lance la
première pierre
:-)))) ou ;-(((( je ne sais pas

Revenons à nos moutons, comme disait Saint Exepury
Même si il ne faut pas toujours croire ce qu'ils disent, comme disait le
berger au ventriloque

Je travail avec des listbox pour sélectionner l'info requise
Par exemple sur la feuille Offre j'ai toute une série d'offres (une par
ligne)
Sur ma feuille consult-Offres je sélectionne une offre dans ma listbox
dont le Format-Control refère à un nom défini
par une formule du type
=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)

L'info de cet offre est mis en forme sur ma feuille ce qui la rends
compréhensible
Si l'offre est accepté, par macro (via bouton) je transfère cet info vers
la feuille Ordres
Et ainsi de suite lors de chaque étape de la procédure

Cela fonctionne mais suite à des changements, je dois insérer des
nouvelles étapes dans la procédure

Donc ce que j'envisage est ceci;

Je me demandais si je ne pouvais pas garder toute l'info sur une même
feuille
Toute en gardant le même format (une offre sur toute la ligne)
mais en ajoutant une colonne ou je pourrais insérer un code pour indiquer
l'étape de l'offre

Cela je pourrais le faire (je crois) grâce à tout ce que vous m'avez
enfoncé dans le crâne

Mais ensuite je voudrais pouvoir appeller par exemple tout ceux qui sont
à l'étape Sale

Donc je voudrais définir un nom dont la plage serait par exemple

=OFFSET(Offers!$C$2;2;0;COUNTA(Offers!$C:$C)-1;1)
MAIS seulement si la colonne CC contient le terme "Sale"

Ce que j'aspire à réaliser est une feuille ou je pourrais visionner
toutes mes Offres, ou mes Ventes, ou mes payés

MAIS un TCD ne convient pas puisque je dois pouvoir changer l'info et
l'étape à tout moment
C'est-à-dire que je sélectionne une offre, et que quand elle est affichée
je puisse y faire des changements


Je ne sais pas si je suis assez clair

Mais j'espère pouvoir compter sur vous vos questions éventuelles
et surtout sur vos réponses

Un grand merci à vous

Rex



que ceux




1 2