XL 2019 Garder la numérotation des index après classement

Heodrene

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,

J'ai un tableau de suivi dont la colonne A me sert à créer automatiquement un numéro d'index par rapport à la tâche à suivre.
J'ai créé une colonne Rang qui génère un numéro de série unique à partir de la date d'ouverture de la tâche et du numéro de la ligne associée à la tâche dans le tableau.

Mon problème est que ce numéro d'index ne reste pas attachée à sa tâche après un classement par ordre alphabétique par exemple.
Je connais la source du problème : dans ma formule de la colonne Rang le numéro de ligne n'est pas figée (après un classement, c'est le numéro de ligne courante qui est pris en compte).

Question : Comment puis-je faire pour que le numéro d'index créé reste attaché à la tâche ?

Merci de votre aide,

Heodrene
 

Pièces jointes

  • Index rang.xlsx
    22.5 KB · Affichages: 12

jmfmarques

XLDnaute Accro
Bonjour
Je n'ouvre jamais les classeurs tiers et n'ai pas ouvert le tien
On peut facilement deviner que ces indexes sont le résultat de formules Excel.
Donner à la propriété Value d'une plage... la propriété Value, figera en tant que constantes les résultats de formules dans cette plage

exemple :
VB:
Range("A1:A20").Value = Range("A1:A20").Value
A exécuter AVANT le tri (bien évidemment)
Le beurre et l'argent du beurre n'existant pas ensemble, il te faudra probablement penser à un autre mécanisme d'attribution d'indexes pour les nouveaux articles.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Heodrene,
Votre rang est fonction du numéro de ligne, donc en cas de tri le rang change.
L'index est fonction du rang, donc en cas de tri l'index change.
La solution serait que le rang soit indépendant du numéro de ligne. Mais je ne sais pas si c'est possible.
Ou vous calculez un index fonction de la colonne ouvert sans passer par le rang.
 

Heodrene

XLDnaute Occasionnel
Supporter XLD
Bonjour
Je n'ouvre jamais les classeurs tiers et n'ai pas ouvert le tien
On peut facilement deviner que ces indexes sont le résultat de formules Excel.
Donner à la propriété Value d'une plage... la propriété Value, figera en tant que constantes les résultats de formules dans cette plage

exemple :
VB:
Range("A1:A20").Value = Range("A1:A20").Value
A exécuter AVANT le tri (bien évidemment)
Le beurre et l'argent du beurre n'existant pas ensemble, il te faudra probablement penser à un autre mécanisme d'attribution d'indexes pour les nouveaux articles.

Merci @jmfmarques, c'est parfait !
J'ai intégré ce morceau de code dans un évènement Worksheet pour m'assurer qu'il s'applique à chaque ajout d'index et ca semble fonctionner.
 

Heodrene

XLDnaute Occasionnel
Supporter XLD
Bonsoir Heodrene,
Votre rang est fonction du numéro de ligne, donc en cas de tri le rang change.
L'index est fonction du rang, donc en cas de tri l'index change.
La solution serait que le rang soit indépendant du numéro de ligne. Mais je ne sais pas si c'est possible.
Ou vous calculez un index fonction de la colonne ouvert sans passer par le rang.

C'était en effet mon diagnostic que tu as bien mieux formulé que moi :)
Merci pour ta contribution.
 

Heodrene

XLDnaute Occasionnel
Supporter XLD
S'agissant d'un tableau, les cellules sont adressées avec le nom de l'entête.
La formule :
Code:
=SI([@Ouvert]="";"";[@Ouvert]+LIGNE($A2)/10000000)

Signifie :
  • Si la cellule "Ouvert" de la ligne courante est vide alors ne faire aucun calcul
  • Sinon prendre la valeur de la cellule "Ouvert" de la ligne courante et ajouter le quotient du numéro de ligne courante par 10000000. Et ce pour obtenir une décimale unique pour différencier des entiers identiques
La solution proposée est une piste que j'avais exploré mais je voudrais que cette colonne soit alimentée automatiquement.
Si c'est le faire manuellement, autant renseigner l'index à la main directement… ;)
 

R@chid

XLDnaute Barbatruc
Bonsoir @ tous,
tu peux ton premier tableau comme formulaire, et faire les tris sur le tableau générer par PowerQuery dans le deuxième onglet.
A adapter au besoin pour l'affichage et les MFCs.


Cordialement
 

Pièces jointes

  • Heodrene_V1.xlsm
    36.7 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re le fil,
Peux être une solution en PJ.
J'ai rajouté une colonne N°.
Un appui sur N° en A1 insère le N° de ligne en "dur". La formule de Rang utilise cette valeur, donc plus de souci.
reste à savoir si cette solution vous va. D'autre part je ne sais pas si la colonne Index a encore une utilité.
La macro utilisée est très simple :
VB:
Sub InsereNo()
    DerLig = Application.WorksheetFunction.CountA(Range("A1:A10000"))
    Range("A" & DerLig + 1) = 1 + Application.Max(Range("A2:A" & DerLig))
End Sub
 

Pièces jointes

  • Index rang (2).xlsm
    34.2 KB · Affichages: 7

Heodrene

XLDnaute Occasionnel
Supporter XLD
Merci à tous pour vos aides, voici un code qui répond à mon besoin :
  • Incrémentation automatique de la colonne Index
  • S'assure que la nouvelle ligne renseignée fasse bien partie du tableau sinon aucune incrémentation possible
  • L'incrémentation se déclenche dès qu'une cellule à partir de la colonne B est sélectionnée
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim LastLig As Long
    Dim LastCol As String
    Dim ActiveTable As ListObject
        
    On Error Resume Next
    Set ActiveTable = ActiveCell.ListObject
    On Error GoTo 0
    
    With ThisWorkbook.Sheets("Actions Log")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        LastCol = Split(Cells(1, .Cells(1, .Columns.Count).End(xlToLeft).Column).Address, "$")(1)

        If ActiveTable Is Nothing Then
            Exit Sub
            Else
            If Not Application.Intersect(Target, Range("B:" & LastCol)) Is Nothing Then
                If IsEmpty(Range("A" & Target.Row)) Then
                    Range("A" & Target.Row) = Application.Max(Range("A2:A" & LastLig)) + 1
                    .ListObjects("_Tab_ActionsLog").ListRows.Add
                End If
            End If
        End If
    End With
End Sub
 

Discussions similaires

Réponses
6
Affichages
256

Statistiques des forums

Discussions
311 711
Messages
2 081 783
Membres
101 817
dernier inscrit
carvajal