Tri et affichage

Bonjour,

j'avance sur mon projet.

Il s'agit d'afficher le résultat de 3 tris différents, bien évidement dans 3 phases différentes;

les données

  • 1 colonne liste d'associations avec une colonne complémentaire pour accoler les renseignements liés à cette association.
  • 1 colonne pour la ville de rattachement de l'Association avec une colonne complémentaire Code postal
  • 1 colonne "spécialité" de l'action de l 'Association avec une interrogation (certaines Associations ont plusieurs "spécialités"
Donc 5 colonnes au total

Les tris :

1 pour => la liste complète des associations ( comme le tableau d'origine ) un simple tri Alpha.

1 pour => par ville. Il y a plusieurs associations dans certaines ville et je ne voudrais voir apparaître qu'un fois la ville.

1 pour => par "spécialités" D° ci-dessus. il y a plusieurs Associations pour la même spécialités et je ne voudrais voir apparaître qu'une seule fois la spécialité

Dernière "exigence" mais là je pense que cela relève de la macro

Faire apparaître en 1ére colonne le tri "principal", à savoir(changer l'ordre des colonnes)

- pour le tri sur Association => en 1ére colonne : les associations , ensuite colonne descriptif/information, en 3éme la ville, ensuite le code postale et en dernière colonne la spécialité.

-Pour le tri sur la ville : en 1ére colonne => la Ville, ensuite le code postal, ensuite les associations, la colnne information.descriptif et en dernière colonne la spécialité

-pour le tri sur la spécialité. De même. 1ére colonne la spécialité et ensuite les autres colonnes => associations, descriptif/information .....

voilà, un vrai mouton à 5 pattes !

Salut cordage,

tu peux nous procurer une des pattes du mouton sous forme d'un fichier ?

A+

Pardon, oublié !

voici donc cette 5ème patte

Merci

Salut Cordage,

un double-clic sur "Associations", "Ville" ou "Spécialités" lance la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iCol%, sItemA$, sItemB$, sItemC$, sCol1$, sCol2$, sCol3$
'
If Not Intersect(Target, Range("B2:G2")) Is Nothing Then
    Cancel = True
    iCol = Target.Column
    sItemA = Cells(2, iCol)
    If sItemA = "Associations" Or sItemA = "Ville" Or sItemA = "Spécialités" Then
        sItemB = IIf(sItemA = "Associations", "Ville", "Associations")
        sItemC = IIf(sItemA = "Spécialités", "Ville", "Spécialités")
        sCol1 = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
        sCol2 = Split(Columns(Rows(2).Find(what:=sItemB, lookat:=xlWhole, LookIn:=xlValues).Column).Address(ColumnAbsolute:=False), ":")(1)
        sCol3 = Split(Columns(Rows(2).Find(what:=sItemC, lookat:=xlWhole, LookIn:=xlValues).Column).Address(ColumnAbsolute:=False), ":")(1)
        Range("A2:G" & Range("B" & Rows.Count).End(xlUp).Row).Sort _
            key1:=Range(sCol1 & 3), order1:=xlAscending, _
            key2:=Range(sCol2 & 3), order2:=xlAscending, _
            key3:=Range(sCol3 & 3), order3:=xlAscending, _
            Orientation:=xlTopToBottom, Header:=xlYes
        Range(sCol1 & ":" & sCol1).Resize(, IIf(sItemA = "Associations", 3, IIf(sItemA = "Ville", 2, 1))).Copy Destination:=Cells(1, Cells(2, Columns.Count).End(xlToLeft).Column + 1)
        Range(sCol2 & ":" & sCol2).Resize(, IIf(sItemB = "Associations", 3, IIf(sItemB = "Ville", 2, 1))).Copy Destination:=Cells(1, Cells(2, Columns.Count).End(xlToLeft).Column + 1)
        Range(sCol3 & ":" & sCol3).Resize(, IIf(sItemC = "Associations", 3, IIf(sItemC = "Ville", 2, 1))).Copy Destination:=Cells(1, Cells(2, Columns.Count).End(xlToLeft).Column + 1)
        Range("B:G").Delete shift:=xlToLeft
    End If
End If
'
End Sub

A+

9cordage.xlsm (22.88 Ko)

Bonjour,

je ne m'attendais pas à du tout cuit ! chapeau et grand merci;

sur le fichier excel que j'ai téléchargé et ouvert où il y a la macro.

J'ai activé la macro mais je n'ai pas de bouton ou lien pour lancer ?

En fait quand je tente de faire "exécuter" on me demande le nom de la macro ?

Salut Cordage,

c'est une macro événementielle que tu trouveras :

  • ALT-F11 pour entrer dans VBA ;
  • double-clic à gauche sur le nom de la feuille 'Base de données 1'

Pour "l'activer"... il faut double-cliquer... comme son nom l'indique !

A+

Tout ça je l'ai fait,

je dois rater quelque chose ?

Parce que une fois la "worksheet" ouverte donc, toute la macro => quand je fais "exécution" en haut dans la barre, on me demande le nom de la macro.

Comme c'est une événementielle, quel est l'évènement déclencheur ?

Salut Cordage,

C'est perturbant à ce point là ?

Il y a une flopée d'événements qu'Excel peut intercepter : clic, clic-droit, double-clic, changement de valeur dans une cellule, changement de feuille, etc...

L'événement déclencheur de la macro est l'événement lui-même !

Dans le code, le nom de la SUB est créé par VBA : Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Après, c'est au codeur à décider ce qu'il en fait.

Donc, pour régler ta demande, si tu double-cliques quelque part en [B2:G2]... If Not Intersect(Target, Range("B2:G2")) Is Nothing Then qui se trouve être la ligne des en-têtes de colonne et que l'en-tête = "Associations" ou "Ville" ou "Spécialités"... If sItemA = "Associations" Or sItemA = "Ville" Or sItemA = "Spécialités" Then, la macro se poursuit et trie tes colonnes comme tu l'as demandé.

CQFD

A+

Bien je ne sais pas pourquoi tout à l'heure j'ai fait la manip sur l'une des cellules (B2:G2) cela ne fonctionnait pas.

maintenant oui ! faut pas chercher pourquoi ?

bravo et merci, je n'aurais pas su faire.

Il y a maintenant quelques perfectionnements ( si c'est possible ?) à faire :

1-il faut que j'interdise le clic sur "descriptif et information de l'Association" et sur "lien de l'association"(que j'ai ajouté voir pourquoi ci-après)puisqu'il n'y a pas de tri à faire là-dessus (dépendant de associations)

2- dans cette colonne, (c'est excel) j'ai des renseignements à saisir qui pourraient prendre plus de place, et si j'augmente la hauteur cela va devenir infernal.

3- colonne "liens de l'association" j'ai dans certains cas à saisir plusieurs liens, et là actuellement veut pas être actif sur le 2éme lien saisi, ne réagit que sur 1 seul (il englobe les 2 liens)

4- dans les tris "villes" ou "spécialités", donc colonne de gauche, serait-il possible de ne pas répéter plusieurs fois la même "nature" exemple, il y a plusieurs Draguignan, ou en spécialités il y a plusieurs culturel;

Le 1er de la série renderait plus clair la lecture. ou faire une bordure horizontale à la séparation ou... je ne sais pas ce qu'Excel peut faire.

oui, je sais, cela devient le mouton à 9 pattes.

En fait tu fais au mieux et ce que tu peux.

C'est déjà fantastique ce que tu as fait. Encore un grand bravo

Salut Cordage,

Point 1 : sans objet puisque la macro ne réagit pas si les intitulés de colonne ne sont pas les bons ;

Point 2 : et donc ?

Point 3 : je regarde...

Point 4 : en ajoutant ceci...

        iRow1 = 2
        Range("B1").Interior.ColorIndex = 2
        Range("B2:G" & Range("B" & Rows.Count).End(xlUp).Row).Font.ColorIndex = 1
        For x = 3 To Range("B" & Rows.Count).End(xlUp).Row + 1
            If Range("B" & x).Value <> sItemA Or x = Range("B" & Rows.Count).End(xlUp).Row + 1 Then
                iRow2 = x - 1
                Range("B" & iRow1 & ":G" & iRow2).Interior.ColorIndex = IIf(Range("B" & iRow1 - 1).Interior.ColorIndex = 2, 15, 2)
                Range("B" & iRow1 & ":G" & iRow2).BorderAround Weight:=xlMedium
                If iRow2 > iRow1 Then Range("B" & iRow1 + 1 & ":B" & iRow2).Font.ColorIndex = Range("B" & iRow1).Interior.ColorIndex
                sItemA = Range("B" & x).Value
                iRow1 = x
            End If
        Next

A

2cordage.xlsm (24.47 Ko)

Ouaouh ! ouaou! superbe

Merci merci;

1- pour descendre le gris en intensité j'ai vu => ) .Interior.ColorIndex = 2, 15, 2)

le 2 pour le blanc, 15 pour le gris, mais je ne trouve pas un code pour 1 gris plus clair ?

2- au passage j'ai perdu les bordures trait simple verticales qui séparent la colonne "descriptif et information....et aussi celle entre ville et CP

et si possible pour les lignes horizontales => ligne grasse pour séparer les "regroupements" , lignes fines à l'intérieur du regroupement.

Pour le point 2 du message précédent.

Pour adjoindre un descriptif "rapide" de l'association (adresse, lieu de rencontre, descriptif des objectifs je n'ai trouvé que cette solution => ajouter cette colonne "Descriptif et information..." mais ce n'est pas l'idéal compte tenu que nous sommes:

  • a- sur Excel et ce n'est pas un traitement de texte
  • b- j'ai des descriptifs qui sont longs. Que je n'ai pas écrit en totalité, et pourtant pour être clair il le faudrait.

Donc le problème, si je mets une hauteur plus importante (rajout de lignes) cela va faire un tableau très "long" à parcourir, je pense aussi et toujours à sa visibilité sur le forum; et son éventuelle inter réactivité (?)

Y a t'il une meilleure solution ? peut-être comme une insertion de "commentaire" ? ou renvoyer sur 1 lien d'un descriptif plus complet mais toujours dépendant du tableau => en dehors de la zone du tableur ou sur une autre feuille .... comme je ne connais pas toutes les possibilités d'Excel.. . . . là nous sommes pas loin des 9 pattes.

(J'arrive à lire certaines parties du code macro, par contre pour d'autres je suis largué !) je me lancerai ensuite sur un autre tableau qui concerne les producteurs locaux (maraîchers, fleurs, ....) mais après que celui-ci sera parfait.

merci encore pour cet apport d'expertise, je suis ébahi !

Salut Cordage,

et difficile, avec ça...

                If iRow2 > iRow1 Then Range("B" & iRow1 + 1).Resize(iRow2 - iRow1, IIf(Range("B2").Value = "Ville", 2, 1)).Font.Color = Range("B" & iRow1).Interior.Color
                Range("B" & iRow1).Resize((iRow2 + 1) - iRow1, IIf(Range("B2").Value = "Ville", 2, 1)).Borders.LineStyle = xlLineStyleNone
                Range("B" & iRow1).Resize((iRow2 + 1) - iRow1, IIf(Range("B2").Value = "Ville", 2, 1)).BorderAround Weight:=xlThin
                Range("B" & iRow1 & ":G" & iRow2).BorderAround Weight:=xlMedium

A+

3cordage.xlsm (26.25 Ko)

Bonjour et merci avec un grand chapeau ! Tu as même devancé mes souhaits tu as pensé à gérer la couleur de la ligne des titres.

Pour la gestion du gris, hier j'y ai pensé de passé par RGB, mais je ne voulais pas pourrir le code, j'ai pas osé.

Maintenant j'ai du RGB partout je peux jouer des couleurs et affiner le bébé.

Franchement le tableau est super "propre" et même beau, très lisible.

Vraiment content.

Reste la gestion des 2 colonnes de texte ("descriptif..;" et "liens ....)

ya pas le feu au lac, si tu trouves une combine selon les idées que je t'es suggéré dans le précédent message.

A++ et encore merci

Salut Cordage,

mission accomplie... à 99%...

Il ne peut y avoir qu'un lien hypertexte par cellule. Ton souhait d'en aligner plusieurs et de pouvoir choisir celui qui ouvrira tel ou tel site n'est pas possible sauf petite manip' pas handicapante.

Pour le reste, mode d'emploi :

- pour le tri, tu connais : pas de changement.

Veille à l'orthographe de chaque mot, histoire de ne pas se mélanger les pinceaux : Vidaunan, planché... des bêtises, mais bon...

- chaque assoc' peut et devrait se résumer à une ligne d'infos en choisissant avec soin l'info principale du descriptif.

Pour ce faire, un clic en colonne "Descriptif" ou "Liens" élargit la ligne d'infos de l'assoc' de la manière suivante : la macro calcule le nombre de retour-chariot, en ajoute 2 et multiplie le tout par 25 (points) ce qui te donne un espace royal pour modifier et/ou compléter tes infos.

Pour accéder au texte, soit :

* tu places le curseur dans la barre de formule et, avec la flèche BAS, tu montes et descends dans le texte ;

* tu double-cliques dans la cellule et le curseur s'y place automatiquement : plus facile que dans la barre de formule !

* pour passer à la ligne dans le texte d'une cellule, faire ALT-ENTER !

* ENTER pour valider : la macro détecte alors le premier retour-chariot et n'affiche QUE le début du texte avant ce retour-chariot. Á toi de cibler ce descriptif principal !

  • la feuille 'Descriptifs' recueille le texte complet accompagné du nom de l'assoc', histoire de retrouver ses jeunes !
  • pour les liens WEB, c'est pareil !
* pour une même assoc', séparer chaque adresse WEB par ALT-ENTER.
  • la macro enregistrera les liens en leur enlevant justement ce caractère HYPERLINK, ce qui te permettra de cliquer à volonté sur ces cellules pour modification ultérieures ;
  • Pour accéder au WEB via ces adresses inertes :
* clic-DROIT sur la cellule contenant un lien : la macro restaure le caractère HYPERLINK, ouvre la page... et retire le caractère HYPERLINK dans la foulée ;

* si tu as plusieurs liens dans une même cellule, c'est le premier UNIQUEMENT qui sera activé automatiquement.

- la petite manip' dont je parlais : si tu veux ouvrir une autre page, double-clic dans la cellule-lien, sélectionner le lien désiré, le copier, retourner dans ton navigateur et coller cette adresse dans la barre de recherche.

Pas trouvé mieux !

Á tester...

A+

8cordagev2.xlsm (38.54 Ko)

Bonjour et re re merci pour ce gros travail plein de savoir faire !

chapeau

Il faut que je m' imprègne de toutes les instructions et commentaires pour bien assimiler ces nouvelles fonctionnalités

Ta mission est effectivement accomplie, je serais difficile dans le cas contraire.

J'ai maintenant un mouton à 11 pattes, c'est rare!

Merci encore

Dès que j'ai fini de tout mettre en place, je te fais signe.

Parce que la finalité de la mise en place c'est que la bestiole doit être "visible" sur le forum via (peut-etre ggogle drive ?)

Re,

Cela fonctionne super, c'est royal.

Par contre j'y pense maintenant j'espère que cela va pouvoir être "réactif" avec ce que l'on m'a précisé pour insérer dans mon forum via Google drive => qu'en penses tu ?

200229124807931992

Autre et dernier point ! qui ferait que nous allons nous diriger vers le mouton à 23 pattes;

Je vais tenter de m'expliquer :

nous avons une alternance de couleur entre les tris, par exemple sur une ville comme Draguignan, il y a 5 assos.

1-Lorsque l'on fait 1 clic sur le descriptif est-il possible que l'ensemble qui apparaît (la totalité du descriptif) puisse passer dans une couleur autre que l'alternance du bleu ou du blanc (ce sont les couleurs que j'ai modifiée dans le code) Choisir par exemple un RGB = (194, 247, 50). D° pour les liens web

A faire si pas trop de travail.

2- Lorsqu'il y a du code j'essaie toujours de placer des" commentaires" dans la macro pour me souvenir à quoi elle sert et dans le corps à certains passages spécifiques d'expliquer le pourquoi de l'écriture. (ceci parce que je ne suis pas un grand fortiche)

Pour les 3 "Private Sub Worksheet" que tu as ajouté pourrais tu me donner les "commentaires à placer en début de macro (après private Sub...)pour préciser son action :

  • Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  • Private Sub Worksheet_Change(ByVal Target As Range)
  • Private Sub Worksheet_SelectionChange(ByVal Target As Range)

J'ai vu que tu bosses la nuit ou du moins le matin très tôt, encore plus merci !!

Salut Cordage,

Concernant Google Drive, ne connaissant pas du tout l'oiseau, je ne pourrais pas t'aider.

Pour le reste, voir le fichier joint : les modifications se situent dans les SUB

  • Private Sub Worksheet_Change(ByVal Target As Range)
  • Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Tu as quand même des moutons bizarres chez toi...

A+

3cordagev2.xlsm (31.45 Ko)

je pense que là, tu peux crier haut et fort => "mission accomplie"

Vraiment chapeau.

Un plaisir d'être assisté de cette façon

Compréhension, efficacité, célérité et patience

Encore un grand merci.

Sur ce forum, faut-il "marquer" un sujet comme résolu et est-ce à moi de le faire ?

Tous mes plus vifs remerciements.

Salut Cordage,

étant l'éditeur de ce sujet, toi seul peut le clôturer via l'icône "V" dans la barre d'outils au-dessus de la fenêtre de message.

A+ pour d'autres aventures...

merci encore et à++

Rechercher des sujets similaires à "tri affichage"