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

Tri d'une colonne à partir du premier caractère écrit en majuscule

11 réponses
Avatar
PC
Bonjour,

J'ai un tableau avec une colonne 'Nom' et une colonne 'Adresse' (n° et
nom de rue).

J'ai besoin de trier le tableau par rues, c'est à dire que tous les
numéros d'une même rue se succèdent.

Par exemple, initialement, si je trie sur la colonne 'Adresse' j'obtiens
:

Larochas Georges 1 r Provence
Melin Colette 1 r Provence
Berthet Robert 1 r Provence
Magistry Denise 1 r Rapiettes
Ravaud Madeleine 1 r Résistants
Fernandez Louis 1 r Roland Garros
Talbot André 1 r Sablière
Savigneau Joseph 1 r St Gervais
Fruchard Marcel 1 r Tiffauges
Duverger Odette 10 all Cerisaie
Brouard Paulette 10 all Gartempe
Alcade André 10 all Louise Labé
Brouard Albert 10 all Parc
Fargeau René 105 r des Joncs
Durand Henri 2 r Provence
Gremaury Jean 2 r Provence
Julot Edna 3 r Rapiettes


Or, je voudrais obtenir


Larochas Georges 1 r Provence
Melin Colette 1 r Provence
Berthet Robert 1 r Provence
Durand Henri 2 r Provence
Gremaury Jean 2 r Provence
Magistry Denise 1 r Rapiettes
Julot Edna 3 r Rapiettes
Ravaud Madeleine 1 r Résistants
Fernandez Louis 1 r Roland Garros
Talbot André 1 r Sablière
Savigneau Joseph 1 r St Gervais
Fruchard Marcel 1 r Tiffauges
Duverger Odette 10 all Cerisaie
Brouard Paulette 10 all Gartempe
Alcade André 10 all Louise Labé
Brouard Albert 10 all Parc
Fargeau René 105 r des Joncs


Je pense que le tri de la colonne devrait s'opérer non sur le premier
caractère, un chiffre, mais plutôt sur la chaîne qui débute par la
première majuscule.

J'ignore comment faire, alors si qq1 peut m'aider, qu'il en soit
d'avance remercié ! :-)

Pierre

10 réponses

1 2
Avatar
MichD
Bonjour,

Tu ajoutes une colonne,
Tu y insères une formule de ce type : =STXT(B2;1;CHERCHE(" ";B2))*1
que tu recopies sur la colonne.
Tu sélectionnes tout ton tableau et tu tries sur la colonne ajoutée.
Tu peux masquer cette colonne si tu le désires.



MichD
------------------------------------------
"PC" a écrit dans le message de groupe de discussion :

Bonjour,

J'ai un tableau avec une colonne 'Nom' et une colonne 'Adresse' (n° et
nom de rue).

J'ai besoin de trier le tableau par rues, c'est à dire que tous les
numéros d'une même rue se succèdent.

Par exemple, initialement, si je trie sur la colonne 'Adresse' j'obtiens
:

Larochas Georges 1 r Provence
Melin Colette 1 r Provence
Berthet Robert 1 r Provence
Magistry Denise 1 r Rapiettes
Ravaud Madeleine 1 r Résistants
Fernandez Louis 1 r Roland Garros
Talbot André 1 r Sablière
Savigneau Joseph 1 r St Gervais
Fruchard Marcel 1 r Tiffauges
Duverger Odette 10 all Cerisaie
Brouard Paulette 10 all Gartempe
Alcade André 10 all Louise Labé
Brouard Albert 10 all Parc
Fargeau René 105 r des Joncs
Durand Henri 2 r Provence
Gremaury Jean 2 r Provence
Julot Edna 3 r Rapiettes


Or, je voudrais obtenir


Larochas Georges 1 r Provence
Melin Colette 1 r Provence
Berthet Robert 1 r Provence
Durand Henri 2 r Provence
Gremaury Jean 2 r Provence
Magistry Denise 1 r Rapiettes
Julot Edna 3 r Rapiettes
Ravaud Madeleine 1 r Résistants
Fernandez Louis 1 r Roland Garros
Talbot André 1 r Sablière
Savigneau Joseph 1 r St Gervais
Fruchard Marcel 1 r Tiffauges
Duverger Odette 10 all Cerisaie
Brouard Paulette 10 all Gartempe
Alcade André 10 all Louise Labé
Brouard Albert 10 all Parc
Fargeau René 105 r des Joncs


Je pense que le tri de la colonne devrait s'opérer non sur le premier
caractère, un chiffre, mais plutôt sur la chaîne qui débute par la
première majuscule.

J'ignore comment faire, alors si qq1 peut m'aider, qu'il en soit
d'avance remercié ! :-)

Pierre
Avatar
PC
Merci beaucoup mais... premièrement je n'arrive pas à faire la manoeuvre
indiauée car je débute quasi (mais en persévérant qques heures je ne
désespère pas !), et deuxièmement j'ai un doute :

Est-ce que cette formule n'agit pas en trouvant le caractère juste après
la deuxième espace ? Si c'est le cas (?), ça ne marchera
qu'imparfaitement.

Par exemple le "2 r de Roman" sera trié à partir de "de Roman" et sera
rangé avec les rues commençant par 'D' au lieu de l'être à partir de
"Roman", alors que le "2 r Roman" sera trié à partir de "Roman".

Problème également pour l'apostrophe (par exemple "2 r Holmes" et "2 r
d'Holmes", cette deuxième adresse étant alors rangée elle aussi avec les
rues commençant par 'D').

Mon idée de débuter le tri par la première majuscule serait alors mieux
indiquée ?
Avatar
MichD
Énonce clairement ce que tu as dans chacune des colonnes

A1 -> Larochas Georges

B1 -> 1 r Provence






MichD
------------------------------------------
"PC" a écrit dans le message de groupe de discussion :

Merci beaucoup mais... premièrement je n'arrive pas à faire la manoeuvre
indiauée car je débute quasi (mais en persévérant qques heures je ne
désespère pas !), et deuxièmement j'ai un doute :

Est-ce que cette formule n'agit pas en trouvant le caractère juste après
la deuxième espace ? Si c'est le cas (?), ça ne marchera
qu'imparfaitement.

Par exemple le "2 r de Roman" sera trié à partir de "de Roman" et sera
rangé avec les rues commençant par 'D' au lieu de l'être à partir de
"Roman", alors que le "2 r Roman" sera trié à partir de "Roman".

Problème également pour l'apostrophe (par exemple "2 r Holmes" et "2 r
d'Holmes", cette deuxième adresse étant alors rangée elle aussi avec les
rues commençant par 'D').

Mon idée de débuter le tri par la première majuscule serait alors mieux
indiquée ?
Avatar
PC
Au départ j'ai les colonnes comme indiqué dans le premier post.

Puis quand je rentre la formule dans la colonne C (sur une cellule pour
commencer) j'obtiens #VALEUR!...



In article <j62l09$bbq$,
"MichD" wrote:

Énonce clairement ce que tu as dans chacune des colonnes

A1 -> Larochas Georges

B1 -> 1 r Provence

Avatar
PC
Ça y est, j'ai réussi à appliquer ta formule (oublie mon message
précédent).

Elle améliore les choses, mais ce n'est pas ce qu'il me faut. Je
m'explique :

ta formule permet de modifier le classement des adresses avec n° de rues
; par exemple

1 all Aristide Caillaud
1 r des Joncs
10 chem Parc à Fourrages
10 r Alsace Lorraine
101 bd Pont Achard
102 bd Rocs
103 bis r Haut des Sables
2 all Aristide Caillaud


va devenir

1 all Aristide Caillaud
1 r des Joncs
2 all Aristide Caillaud
10 chem Parc à Fourrages
10 r Alsace Lorraine
101 bd Pont Achard
102 bd Rocs
103 bis r Haut des Sables


on obtient donc un tri opéré via les n° de rues seuls, mais moi je veux
obtenir


10 r Alsace Lorraine
1 all Aristide Caillaud
2 all Aristide Caillaud
103 bis r Haut des Sables
1 r des Joncs
10 chem Parc à Fourrages
101 bd Pont Achard
102 bd Rocs


où les rues sont regroupées.

D'où mon idée de faire le tri à partir de la première majuscule (ce qui
permet d'éviter les problèmes d'apostrophe, d'articles ("r de Roman" ou
"r Roman" et ceux engendrés par les "bis" ou "ter"...).
Avatar
Maude Este
Bonsour®

"PC" a écrit
D'où mon idée de faire le tri à partir de la première majuscule (ce qui
permet d'éviter les problèmes d'apostrophe, d'articles ("r de Roman" ou
"r Roman" et ceux engendrés par les "bis" ou "ter"...).

:-((
cette recherche de majuscule est un procédé itératif , difficilement
transposable sous forme de formule ...

utiliser une fonction personnalisée :

Function PosMaj(target As String) As Integer
'trouve la position d'une majuscule dans un string
For x = 1 To Len(target)
If Mid(target, x, 1) Like "[A-Z]" Then
PosMaj = x
Exit For
End If
Next
End Function

;o))) mise en oeuvre :
http://www.cijoint.fr/cjlink.php?file=cj201109/cijBEajrw7.xls
Avatar
PC
Merci beaucoup Maude, ça fonctionne !

Petit mystère pour moi, je suis obligé pour cela d'utiliser votre propre
tableau exemple et d'y coller une par une mes colonnes personnelles.

En effet, si j'essaie d'utiliser votre formule dans mon propre tableau,
j'obtiens un #NOM? dans la colonne posmaj. Idem lorsque je colle
l'intégralité de votre tableau dans un tableau créé ex nihilo. Pourtant
la formule est bien présente dans la liste des formules et la syntaxe
est bien la même dans mes cellules.

Comprends pas !!

(Mais déjà là, avec mon tableau bien trié, j'évite un sacré nombre
d'heures de boulot grâce à vous...)

Pierre


In article <j6421t$dbh$,
"Maude Este" wrote:

Bonsour®

"PC" a écrit
D'où mon idée de faire le tri à partir de la première majuscule (ce qui
permet d'éviter les problèmes d'apostrophe, d'articles ("r de Roman" ou
"r Roman" et ceux engendrés par les "bis" ou "ter"...).

:-((
cette recherche de majuscule est un procédé itératif , difficilement
transposable sous forme de formule ...

utiliser une fonction personnalisée :

Function PosMaj(target As String) As Integer
'trouve la position d'une majuscule dans un string
For x = 1 To Len(target)
If Mid(target, x, 1) Like "[A-Z]" Then
PosMaj = x
Exit For
End If
Next
End Function

;o))) mise en oeuvre :
http://www.cijoint.fr/cjlink.php?file=cj201109/cijBEajrw7.xls
Avatar
Maude Este
"PC" a écrit
Petit mystère pour moi, je suis obligé pour cela d'utiliser votre propre
tableau exemple et d'y coller une par une mes colonnes personnelles.

Pourtant
la formule est bien présente dans la liste des formules et la syntaxe
est bien la même dans mes cellules.

Comprends pas !!


Il vous faut creer un classeur regroupant les macros-personnelles
que vous souhaitez mettre à disposition de tout vos classeurs...
http://www.commentcamarche.net/faq/28980-creation-classeur-de-macros-personnalisees-2007

alternative ajoutez cette fonction personnalisée (posMaj)
uniquement à chaque classeur le nécessitant

dans les deux cas il faut accéder à l'éditeur VBA (VBE) alt-F11
Avatar
MichD
Bonjour,

La fonction de Maude doit être écrite dans un MODULE STANDARD. Comme tu as copié la fonction dans un autre type de module,
cela explique pourquoi la cellule te renvoie une valeur d'erreur #Nom. Excel ne reconnait pas la fonction... Il ne la trouve
pas.
Dans la fenêtre de l'éditeur de code (Alt + F11)
Barre des menus / Insertion / Module
et tu copies le code :
'----------------------------------------
Function PosMaj(target As String) As Integer
'trouve la position d'une majuscule dans un string
For x = 1 To Len(target)
If Mid(target, x, 1) Like "[A-Z]" Then
PosMaj = x
Exit For
End If
Next
End Function
'----------------------------------------

Et dans ton application, si tu n'utilises pas la même plage de cellules que Maude, tu dois adapter.


MichD
------------------------------------------
Avatar
PC
Merci beaucoup, vraiment, à vous deux ; je n'arrivais pas à m'en sortir
sur ce point !
1 2