Rénumérotation apres modification d'une valeur

Bonjour,

Dans le fichier joint, je souhaiterai que lorsque je change un numéro dans la colonne "Priorité", les autres se mettent à jour automatiquement.

Exemple :

Je change le n°3 en 1, le n°1 devient 2, le 2 devient 3

Je change le n°1 en 3, le n°2 devient 1, le numéro 3 devient 2

Est ce possible ?

Bonjour

Lance la macro quand tu te trouve sur une cellule de la colonne des priorités

essaye ceci :

Sub Prio()
MSG = InputBox("Changer la priorité :", "Priorité", ActiveCell)
If Not IsNumeric(MSG) Or MSG = "" Then Exit Sub
For i = 2 To Range("A65000").End(xlUp).Row
If Cells(i, 1) = CDbl(MSG) Then Cells(i, 1) = ActiveCell.Value
Next i
ActiveCell = MSG
End Sub

une autre approche :

Sub Prio()
Dim rg As Range

MSG = InputBox("Changer la priorité :", "Priorité", ActiveCell)
If Not IsNumeric(MSG) Or MSG = "" Then Exit Sub

Set rg = Range("A1:A" & Range("A65000").End(xlUp).Row).Find(MSG)
L = rg.Row
c = rg.Column

Cells(L, c) = ActiveCell
ActiveCell = MSG
End Sub

Merci de ton retour

il y a bien une renumérotation mais pas dans le bon ordre,

Au depart il y a

quand je change le 4 en 1 ca devrait faire

1

4

3

2

5

6

et ca donne en fait :

1

3

2

4

5

6

Ah c'est juste une question de tri ?? utilise un filtre tout simplement non ?

non non, c est bien lorsque je change un chiffre que tous les autres doivent etre modifier en consequence.

Ta solution est parfaite dans l'idée, c'est simplement que les chiffres ne sont pas remplacer dans le bon ordre

Dans mon exemple, le 2 est devenu 4 alors qu'il aurait dû devenir 3 et le 1 et de venu 3 alors qu'il aurait dû devenir 2

Ah ok ! Je regarde ça en début daprem

Merci

et en abusant un peu , c est possible de declencher ca avec une macro evenementielle (declenchée en changeant un numero dans la colonne priorite) ?

J'ai un peu de mal à faire la gymnastique intellectuel de ce que tu veux, du coup voilà une autre proposition, en espérant que se soit la bonne

Sub test()
MSG = InputBox("Changer la priorité :", "Reclassement général", ActiveCell)
If MSG = "" And Not IsNumeric(MSG) Then Exit Sub

For i = 2 To Range("A2:A" & Range("A65000").End(xlUp).Row)
If Cells(i, 3) >= CDbl(MSG) And Cells(i, 3) < ActiveCell Then
Cells(i, 3) = Cells(i, 3) + 1
End If
Next i
ActiveCell = MSG

End Sub

Merci, je ne suis peut etre pas tres clair

Je te met un exemple dans le fichier joint de ce que je souhaiterai.

Pour ta macro, j ai message d'erreur "incompatibilité de type"

bonjour,

une autre proposition

5priorites.xlsm (13.46 Ko)

C'est exactement ca

Je te remercie beaucoup ainsi que tous ceux qui se so,t penché sur le sujet.

Bravo

Par contre contre on ne peut ajouter de chiffre sur les lignes suivantes.

Si je met un 7 sur la ligne 8, le 1 devient 0 et ainsi de suite...ce qui est logique d'ailleurs.

je peux potentiellement avoir plusieurs dizaines de produit.

Et il doit aussi etre possible d'en supprimer

Bonsoir,

une nouvelle proposition, qui devrait tenir compte de tes nouvelles demandes.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ind()
    Application.EnableEvents = False
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    tablo = Range("A1").Resize(dl, 1)
    ReDim ind(dl)
    md = InStr(Target.Address, ":") > 0
    For i = LBound(tablo, 1) To UBound(tablo, 1)
        If Not md Then
            If tablo(i, 1) = Target.Value And i <> Target.Row Then tablo(i, 1) = tablo(i, 1) + 0.1
        End If
        ind(i) = i
    Next i
    For i1 = LBound(tablo, 1) To UBound(tablo, 1) - 1
        For i2 = i1 + 1 To UBound(tablo, 1)
            If tablo(ind(i1), 1) > tablo(ind(i2), 1) Then a = ind(i1): ind(i1) = ind(i2): ind(i2) = a
        Next i2
    Next i1
    For i = LBound(tablo, 1) To UBound(tablo, 1)
        Cells(ind(i), 1) = i
    Next i
    Application.EnableEvents = True
End Sub

Bonjour

Effectivement ca marche tres bien. Je te remercie.

Si je peux abuser , le tri par ordre de priorité est il possible automatiquement après le calcul ? (de toute la ligne)

Sinon c est deja parfait. Merci

Si je me souvient bien ton tableau va de la colonne A à N alors utilise cette ligne :

Tu n'a qu'à la mettre à la fin du code proposé par h2so4

Columns("A:N").Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlYes

Bonjour

Merci de votre retour.

J'ai essayé mais ca ne fonctionne pas :

h2so4

-1) ton fichier test ne contenait pas d'entête, j'ai donc modifié cette ligne en supposant que ca regle le probleme :

tablo = Range("A2").Resize(dl, 1) > A2 etait A1

-2) si je change un nom de client, produit ou tout autre cellule dans le tableau, ca change aussi l'ordre de priorité. C'est un problème

GGautier,

Il y a bien un tri mais incohérent, je suppose du au probleme n°2

Je vous remet le fichier avec les 2 codes

bonjour,

et dire que je m'étais cassé la tête pour renuméroter les priorités sans changer l'ordre des lignes.

voici une proposition pour tes nouvelles demandes. (remarque : tri du tableau sur 15 colonnes)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 1 Then Exit Sub
    Application.EnableEvents = False
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    Set plage = Range("A1").Resize(dl)
        Set re = plage.Find(Target.Value, lookat:=xlWhole)
        If Not re Is Nothing Then
            If re.Address = Target.Address Then Set re = plage.FindNext(re)
            If Not re Is Nothing Then re.Value = re.Value + 0.1
        End If
    Range("A1").Resize(dl, 15).Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes
    For i = 2 To dl
        Cells(i, 1) = i - 1
    Next i
    Application.EnableEvents = True
End Sub

J'ai tester en ajoutant environs 150 lignes, ca a l air parfait.

Merci beaucoup pour le temps passé, en esperant que ca aide d'autre personne.

A bientôt

Rechercher des sujets similaires à "renumerotation modification valeur"