Classement automatique par catégorie en fonction cellule VBA

Bonjour à tous.

Je me permets de refaire appel à vous pour une petite aide.

Jusqu'ici, mon fichier fonctionne parfaitement (merci à ceux qui m'ont déjà aidé). Mais j'aimerais réaliser une petite modification.

J'ai crée quelques catégories (identifié, perdus, ...) et j'aimerais que lorsque j'ajoute un nouvelle ligne (via mon userform), elle se classe automatiquement dans la catégorie à laquelle elle appartient (en l’occurrence en colonne O). Et une fois dans la catégorie, pourquoi ne pas trier cette catégorie en fonction de la colonne B (court terme --> moyen terme --> long terme).

Par ailleurs, il se peut que je modifie (via une liste par exemple) ce qui est inscrit dans cette colonne O. J'aimerais naturellement que la ligne se classe dans la nouvelle catégorie qui lui est attribuée.

Enfin, lorsque je créer un nouveau périmètre, est-il possible d'avoir l'information sur le numéro de la ligne à laquelle il s'est ajouté ?

J'espère avoir été assez clair et précis.

Voilà, je vous remercie de vos conseils et de votre aide.

28classeur-1.zip (55.54 Ko)

Bonjour,

Je viens d'apporter des modifications à ton fichier.

J'ai supprimé le code qui fait les bordures et je l'ai remplacé par des mfc

J'ai ajouté un tri comme tu le demandais

J'ai utilisé un petit stratège pour repérer la nouvelle ligne. Ce n'est pas très élégant mais ça fonctionne. Je place une croix en colonne A au moment de l'écriture de la ligne. Puis je fais une recherche de la position de la croix et enfin je l'efface.

Enfin un message t'informe de la position de la nouvelle ligne entrée. Si tu préfères positionner le curseur sur la ligne plutôt que d'avoir un message, dis le.

Bonne suite à ton projet.

ddetp88

26cadastre.zip (50.46 Ko)

Merci beaucoup DDETP88,

Je vais répondre dans l'ordre

Les bordures remplacées par des MFC avec une ligne sur 2 en couleurs c'est absolument top.

Le tri marche très bien. Juste, j'aimerais avoir une ligne "titre", où il serait écrit : "identifié" et "perdu". Et chaque ligne se répartirait dans ces catégories (CF la pièce jointe)

Pour me dire à quelle ligne s'est ajouté le nouveau périmètre, ça fonctionne parfaitement bien. Peut-on le combiner au placement du curseur sur la ligne en question ?

PS. Je t'ai rajouté une partie du code que j'avais dans mon fichier officiel, pour que tu vois s'il n'y a pas d'interférence au cas ou

Merci de ton aide entre vosgien

17cadastre-v2.zip (50.82 Ko)

re

Pour le curseur sur la ligne pas de problème.

Pour le tri en gardant les titres je ne vois pas trop comment faire d'autant qu'il y a une fusion des cellules sur cette ligne.

Est ce que tu auras d'autres intitulés que identifié et perdu? C'est important de le savoir pour la recherche d'une solution.

Je vais y réfléchir et te tiens au courant.

ddetp de Raon

Oui j'en aurais 6 en tout. Après la mise en page peut changer (pas forcément fusionner toute la ligne par exemple).

Je pensais à quelque chose du genre : si en colonne P il est écrit "identifié", et qu'une ligne contient en colonne B "identifié", alors il faut la ranger en dessous de cette ligne.

Puis, prendre toutes les lignes situés entre" identifiés" et la catégorie suivante (peu importe son nom) pour faire le trie par échéance.

Le tout, sachant qu'en colonne B on a ainsi 2 possibilités :

  • l'intitulé de la catégorie "engagement", "sélection", "conventions", "discussions", "identifiés", "perdus"
  • l'échéance (CT, MT, LT)

Mais c'est peut-être totalement délirant.

Pas du tout délirant!

Ce regarde dans la soirée pour te faire ça.

Je savais que l'idée était pas mal

Je me penche sur la question, prends pas trop de temps pour moi hein

Juju de Cornimont

Juju,

Voilà, je viens de faire quelques modifications.

En voici la liste:

J'ai forcé la casse en majuscule pour certains controls (commune/pdq),

Plutôt que de masquer toutes les lignes et colonnes de la page de garde, j'ai mis en place un srollarea sur la plage A1:H42. Masque des entêtes,

J'ai remplacé une textbox par un combobox pour les grands titres afin d'éviter les erreurs de saisie. Tu peux en ajouter en colonne AA elles seront prises en considération dans le combobox. Pense à les créer manuellement à mesure dans le tableau.

Ce combobox est un controls "Obligatoire" J'ai modifié son tag.

Et dernier point, les données sont insérées et triées en fonction du grand titre

Teste et dis moi.

Bonne soirée à Cornimont

JPierre

Alors JP,

C'est vraiment génial. Tout à fait ce que je souhaitais faire.

Forcer les majuscules c'est une bonne idée Est-ce que c'est utile en quelque chose ou c'est un choix ?

Je ne comprends pas l'histoire du scrollarea. Mais ça a l'air de fonctionner

La combobox c'est nickel. Je ne connaissais pas le principe de faire une liste en AA

Et le tri c'est bien Juste, je crois que Moyen et Long terme on été inversé dans le tri mais je vais le changer moi même si j'y arrive.

Maintenant, et après je te laisse tranquille lol, Est-ce qu'il est possible, si je change le terme en colonne O (qu'un identifié passe en perdu), il se range dans la catégorie perdu ?

Merci 1000 fois pour ton aide. C'est très généreux de ta part.

Bonne soirée dans le 88

si tu changes sur la feuille en colonne O l'intitulé du grand titre, le tri ne se fera pas automatiquement. Il se fera bien évidement quand tu feras un nouveau périmètre avec le même grand titre.

C'est aussi possible de le faire!

Pour les majuscules aucune obligation. C'est plutôt qu'il est d'usage de mettre des majuscules aux villes.

Bonne fin de soirée

Oui voilà, c'est faire en sorte que si je change le "processus" d'une ligne existante, il se range automatiquement dans la catégorie correspondante. Penses-tu que cela soit faisable ?

Merci pour ton aide

Bonne soirée à toi.

J'essaie de voir çà dans la journée ou alors ce soir.

@+

Après ça, j'arrête

Merci 1000 fois

J'ai un petit soucis dans le code : erreur de compliation : sub ou function non définie.

For Each C In .Range("B" & DebPlage & ":B" & Ln)
        If C.MergeCells Then
            ' Fin de plage
            FinPlage = C.Row
            'Insertion d'une ligne
            Rows(FinPlage).Insert

            Call Ecriture
            Exit For

        End If
        If C.Row = Ln Then
            FinPlage = Ln + 1
            Call Ecriture
        End If
    Next C

Ca c'est réglé

Ensuite je ne vois pas quel partie du code sert à trier par échéance ^^

Et enfin, j'ai un soucis de mise en page.

Je te montre entre photographie :

capture

La mise en page ne se fait pas si j'ajoute un périmètre dans les premières catégories.

il faudrait que tu m'envoies ton fichier pour travailler directement dessus.

En MP (Message Personnel) je te donne une adresse mail.

Teste en attendant la dernière demande

Oui voilà, c'est faire en sorte que si je change le "processus" d'une ligne existante, il se range automatiquement dans la catégorie correspondante. Penses-tu que cela soit faisable ?

ddetp88

JPierre

La solution que tu me proposes est super Je vais essayer de l'adapter à mon tableau

Sinon, pour la mise en page j'ai réussi à régler le soucis, sauf en ce qui concerne l'ordre court>long>moyen que je n'arrive pas à remettre en court>moyen>long

Du coup, as tu besoins de mon fichier ?

Comment puis-je te remercier pour ton travail ?

Edit : Petit soucis. Lorsque je change le nom du processus dans la liste, rien ne se passe

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [O7:O1005]) Is Nothing Then
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set rf = Sheets("Recherche foncière")
    With rf
        Dim titre As String
        titre = ActiveCell.Value
        ' coupe la ligne
        Rows(ActiveCell.Row).Cut
    '------------ Recherche la ligne où insérer les données ----------
       debplage = Application.Match(titre, [B:B], 0) + 1
        'Dernière ligne du tableau
        Ln = .Range(" B" & Rows.Count).End(xlUp).Row

Re

C'est qu'une recherche se fait sur un mot qui n'est pas trouvé.

Le vba plante et la commande "Application.EnableEvents = False" étant à false, les événements sont désactivés. Ce qui explique que par la suite tu ne pouvais plus changer le tri des périmètres.

Quand tu as ce souci, pour faire simple, tu quittes excel et tu le redémarres. Tu retrouves le fonctionnement normal.

On verra par la suite pour la gestion d'erreur.

En attendant, j'ai ajouté des lignes pour que tu continues à tester.

ddetp

Alors j'ai réussi à créer mes 6 catégories. Les changements de l'une à l'autre se font bien.

Reste plus que :

  • Quelques erreurs qui peuvent apparaître (effectivement en fermant le fichier ça remarche, mais pas sur que les utilisateurs du fichier connaîtront cette technique).
  • Le trie des échéances à remettre dans le bon ordre
  • Quand je bouge un projet d'une catégorie à une autre, il ne se tri pas par timing mais se met automatiquement à la suite
  • L'écran et le curseur ne reste pas activé sur le projet en question (il ne le suit pas si tu vois ce que je veux dire)
  • J'ai copié coller la validation de donné jusqu'en ligne 65000. Est-ce la bonne méthode pour qu'un nouveau projet bénéficie de la liste de la validation des données ? Où y-a t-il une meilleure méthode ?

Merci encore et encore.

Juju,

J'ai juste un soucis pour mettre en place la liste de validation en colonne O de O6:O65000 par vba.

Process.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Si(O6<>"""";Processus;"""")"

Je l'ai remplacé par dans le thisworkbook

    Process.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Processus"

La condition pour avoir la liste des processus n'est pas valide. Tu l'obtiens directement de la ligne 6 à 65000. Je regarde cet après midi si j'ai un temps.

Peut-être un autre contributeur , c'est envisageable!

Sinon teste à nouveau et tiens moi au courant rapidement.

J'ai modifé le code et tout semble fonctionner.

Au plaisir de te rendre service.

ddetp

Coucou,

J'ai toujours un soucis quand je veux ajouter un nouveau périmètre

Dans mon ancien fichier, lorsque je rajoutais un périmètre, celui-ci prenait le style des "catégories" (IDENTIFIE, PERDU, ...)

Dans celui que tu viens de me faire parvenir, j'ai une erreur d’exécution '13'.

'------------ Recherche la ligne où insérer les données ----------
        DebPlage = Application.Match(titre, .[B:B], 0) + 1
'        'gestion des erreurs
'        If IsError(DebPlage) Then
'            MsgBox "Une erreur s'est produite." & vbCrLf & _
'            "Contrôlez vos titres et relancer la modification."
'            Application.EnableEvents = True
'            Exit Sub
'        End If

        'Dernière ligne du tableau
        Ln = .Range(" B" & Rows.Count).End(xlUp).Row

Quand tu dis

titre = Target

, ça veut dire que tu as renommé les "titres de catégories" ?

ddetp

Edit : tout le reste à l'air de fonctionner (à part le tri qui reste dans le même ordre )

Rechercher des sujets similaires à "classement automatique categorie fonction vba"