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 ?
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.
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.
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.
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.
Bon finalement, je me suis précipité, la solution de @jmfmarques ne colle pas tout à fait.
Je comprends sa remarque après tests : une fois la macro exécutée, je perds pour les tâches à venir la formule calculant l'index.
Pouvez vous nous expliquer la formule bizarre de rang ?
Je suppute que vous utilisez le N° de ligne pour en faire un Rang unique ?
Si c'est le cas, rajoutez une colonne avec N°.
L’avantage c'est que cette colonne suivra le tri.
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…
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.
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
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