Affichage du numéro suivant selon une valeur de cellule sélectionnée

Bonjour,

J''ai besoin de votre aide svp.

J'ai un tableau dans lequel j'indique la date, le type de la commande : soit un projet client ou un projet divers

je souhaite en indiquant le type ça m'affiche directement le ID correspondant en faisant une incrémentation par rapport à ce qui a été déjà encodé pour ce meme type.

Exemple :

1- j'indique que c'est un projet clients , il m'affiche : PRJ2007 car le dernier projet client du tableau encodé est le PRJ2006

2- j'indique projets divers, ça m'affiche ACC2006 car le dernier projet divers du tableau encodé est le ACC2005

Je vous joins le tableau

8testra.xlsx (15.39 Ko)

Merci bcp

Bonjour Raw3aM, bonjour le forum,

En pièce jointe ton fichier modifié avec l'événementielle Change ci-dessous. J'ai rajouté une validation de données dans la colonne B alimentée par la formule DECALER, voir le Gestionnaire de noms...

Option Explicit 'oblige à déclarer toutes les variables

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TP As String 'déclare la variable TP (Type de Projet)
Dim I As Integer 'décalre la variable I (incrément)
Dim V As Integer 'déclare la variable V (Valeur)
Dim VMax As Integer 'déclare la variable VMax (Valeur Maxi)

If Target.Column = 2 And Target.Row > 1 Then 'condition 1 : si le changement a lieu dans la colonne B et à partir de la ligne 2
    TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    Select Case Target.Value 'agit en fonction de la valeur de la cellule modifiée
        Case "Projets clients" 'cas ""Projets clients"
            TP = "PRJ" 'définit le type de projet TP
        Case "Projets divers" 'cas ""Projets divers"
            TP = "ACC" 'définit le type de projet TP
    End Select 'fin de l'action en fonction de la valeur de la cellule modifiée
    For I = 2 To UBound(TV, 1) - 1 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde jusqu'à l'avant dernière)
        If TV(I, 2) = Target.Value Then 'condition 2 : si la donnée ligne I colonne 2 de TV est égalre à la valeur de la cellule modifiée
           V = CInt(Right(TV(I, 3), 4)) 'définit la valeur V
           If V > VMax Then VMax = V 'si V est supérieure a Vmax, Vmax devient égale à V
        End If 'fin de la condition 2
    Next I 'prochaine ligne de la boucle
    Target.Offset(0, 1).Value = TP & Format(VMax + 1, "0000") 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite
End If 'fin de la condition 1
End Sub

le fichier :

2raw3am-ep-v01.xlsm (18.87 Ko)

Magnifique c'est exactement dont j'avais besoin!!

Merci infiniment :)))

Bonjour à tous, Bonjour Thauthème,

Je souhaite modifier le même fichier en ajoutant ces instructions :

Si Type = QUA ; alors N° Projet (ID) = QUA2011 avec incrémentation de 1 (ça commence par 2011, puis 2012, 2013...)

Si Type = SAV ; alors N° Projet (ID) = SAV2002 par défaut sans incrémentation.

et quand je supprime le type le n=) prjet se supprime également

Mercii

Bonjour Raw3aM, bonjour le forum,

Le code modifié :

Option Explicit 'oblige à déclarer toutes les variables

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TP As String 'déclare la variable TP (Type de Projet)
Dim I As Integer 'décalre la variable I (incrément)
Dim V As Integer 'déclare la variable V (Valeur)
Dim VMax As Integer 'déclare la variable VMax (Valeur Maxi)

If Target.Column = 2 And Target.Row > 1 Then 'condition 1 : si le changement a lieu dans la colonne B et à partir de la ligne 2
    If Target.Value = "" Then Target.Offset(0, 1).ClearContents: Exit Sub 'si la cellule modifiée est effacée, efface la cellule adjacente en colonne C, sort de la procédure
    TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) - 1 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde jusqu'à l'avant dernière)
        If TV(I, 2) = Target.Value Then 'condition 2 : si la donnée ligne I colonne 2 de TV est égale à la valeur de la cellule modifiée
           V = CInt(Right(TV(I, 3), 4)) 'définit la valeur V
           If V > VMax Then VMax = V 'si V est supérieure a Vmax, Vmax devient égale à V
        End If 'fin de la condition 2
    Next I 'prochaine ligne de la boucle
    Select Case Target.Value 'agit en fonction de la valeur de la cellule modifiée
        Case "Projets clients" 'cas ""Projets clients"
            TP = "PRJ" 'définit le type de projet TP
            Target.Offset(0, 1).Value = TP & Format(VMax + 1, "0000"): Exit Sub 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
        Case "Projets divers" 'cas ""Projets divers"
            TP = "ACC" 'définit le type de projet TP
            Target.Offset(0, 1).Value = TP & Format(VMax + 1, "0000"): Exit Sub 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
        Case "SAV"
            TP = "SAV"
            Target.Offset(0, 1).Value = TP & "2002": Exit Sub 'renvoie le projet dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
        Case "QUA"
            TP = "QUA"
            Target.Offset(0, 1).Value = TP & IIf(VMax = 0, "2011", Format(VMax + 1, "0000")): Exit Sub 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
    End Select 'fin de l'action en fonction de la valeur de la cellule modifiée
End If 'fin de la condition 1
End Sub

Bonjour Thauthème,

ça marche très bien merci beaucoup.

Il y'a juste deux remarques à ajouter :

1 - Quand j'ajoute plusieurs dates sans compléter le type (car je compte faire par la suite date par date une fois que j'ai l'info), ça bug.

2- Quand je supprime plusieurs cellules dans "type" ça bug. (les cellules projets ne se suppriment pas)

tu peux me débloquer ça stp?

Merci d'avance

Re,

Essaie ce code modifié :

Option Explicit 'oblige à déclarer toutes les variables

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TP As String 'déclare la variable TP (Type de Projet)
Dim I As Integer 'décalre la variable I (incrément)
Dim V As Integer 'déclare la variable V (Valeur)
Dim VMax As Integer 'déclare la variable VMax (Valeur Maxi)

If Target.Column = 2 And Target.Row > 1 Then 'condition 1 : si le changement a lieu dans la colonne B et à partir de la ligne 2
    For Each CEL In Target 'boucle sur toutes les cellule CEL de la sélection
        If CEL.Value = "" Then Target.Offset(0, 1).ClearContents: Exit Sub 'si la cellule modifiée est effacée, efface la cellule adjacente en colonne C, sort de la procédure
    Next CEL 'prochaine cellule de la boucle
    TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) - 1 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde jusqu'à l'avant dernière)
        If TV(I, 2) = Target.Value Then 'condition 2 : si la donnée ligne I colonne 2 de TV est égale à la valeur de la cellule modifiée
           If TV(I, 3) = "" Then V = 0 Else V = CInt(Right(TV(I, 3), 4)) 'définit la valeur V (0 si V est vide)
           If V > VMax Then VMax = V 'si V est supérieure a Vmax, Vmax devient égale à V
        End If 'fin de la condition 2
    Next I 'prochaine ligne de la boucle
    Select Case Target.Value 'agit en fonction de la valeur de la cellule modifiée
        Case "Projets clients" 'cas ""Projets clients"
            TP = "PRJ" 'définit le type de projet TP
            Target.Offset(0, 1).Value = TP & Format(VMax + 1, "0000"): Exit Sub 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
        Case "Projets divers" 'cas ""Projets divers"
            TP = "ACC" 'définit le type de projet TP
            Target.Offset(0, 1).Value = TP & Format(VMax + 1, "0000"): Exit Sub 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
        Case "SAV"
            TP = "SAV"
            Target.Offset(0, 1).Value = TP & "2002": Exit Sub 'renvoie le projet dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
        Case "QUA"
            TP = "QUA"
            Target.Offset(0, 1).Value = TP & IIf(VMax = 0, "2011", Format(VMax + 1, "0000")): Exit Sub 'renvoie le projet incrémenté dans la cellule modifiée decalée d'une colonne à droite, sort de la procédure
    End Select 'fin de l'action en fonction de la valeur de la cellule modifiée
End If 'fin de la condition 1
End Sub

TOP Thauthème!!! 1000 MERCI

Rechercher des sujets similaires à "affichage numero suivant valeur selectionnee"