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
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 :
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