Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
j'ai 2 colonnes B et C
La A contient que des numéros (max 5 chiffres)
dans la colonne C j'ai une liste déroulante qui contient "Annulé" et "Reporté"
mon souhait est le suivant :
si l'utilisateur choisi dans la colonne C : "Annulé", on ajoute dans la colonne B : "A_" & chiffre existant de la colonne B ça donne "A_1923" par exemple
si l'utilisateur choisi dans la colonne C : "Reporté", on ajoute dans la colonne B : "R_" & chiffre existant de la colonne B ça donne "R_1922" par exemple
si l'utilisateur laisse la cellule de la colonne C vide, on garde que les chiffres existants de la colonne B ça donne "1923" par exemple
j'essaye ce code qui bug un peu car si on change de choix il continue a rajouter les A ou R:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'si la cellule contient le mot annulé
If Target.Column = 3 And ActiveCell.Value = "Annulé" Then
Cells(Target.Row, 2).Value = "A" & Cells(Target.Row, 2).Value
ElseIf Target.Column = 3 And ActiveCell.Value = "Reporté" Then
Cells(Target.Row, 2).Value = "R" & Cells(Target.Row, 2).Value
ElseIf Target.Column = 3 And ActiveCell.Value = "" Then
Set obj = CreateObject("vbscript.regexp")
obj.Global = True
obj.Pattern = "[a-z,A-Z]+"
chaine = Cells(Target.Row, 2).Value
chaine = obj.Replace(chaine, "")
Cells(Target.Row, 2).Value = chaine
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub 'si le changement a lieu ailleurs qe dans la colonne 3 (= C), sort de la procédure
Select Case Target.Value 'agit en fonction de la cellule modifiée (la cible)
Case "Annulé" 'cas "Annulé"
Target.Offset(0, -1).Value = "A_" & Target.Offset(0, -1).Value 'rajoute "A_"dans la cellule en colonne B
Case "Reporté" 'cas "Reporté"
Target.Offset(0, -1).Value = "R_" & Target.Offset(0, -1).Value 'rajoute "R_"dans la cellule en colonne B
Case "" 'Cas ou rien n'est inscrit ou si la cellule cible est effacée
'si il exite au moins une fois le caractères "_" dans la cellule colonne B,
'redéfinit le texte en partant du troisième caractère
If UBound(Split(Target.Offset(0, -1), "_")) > 0 Then Target.Offset(0, -1).Value = Mid(Target.Offset(0, -1).Value, 3)
End Select 'fin de l'action en fonction de la cellule modifiée
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub 'si le changement a lieu ailleurs qe dans la colonne 3 (= C), sort de la procédure
Select Case Target.Value 'agit en fonction de la cellule modifiée (la cible)
Case "Annulé" 'cas "Annulé"
Target.Offset(0, -1).Value = "A_" & Target.Offset(0, -1).Value 'rajoute "A_"dans la cellule en colonne B
Case "Reporté" 'cas "Reporté"
Target.Offset(0, -1).Value = "R_" & Target.Offset(0, -1).Value 'rajoute "R_"dans la cellule en colonne B
Case "" 'Cas ou rien n'est inscrit ou si la cellule cible est effacée
'si il exite au moins une fois le caractères "_" dans la cellule colonne B,
'redéfinit le texte en partant du troisième caractère
If UBound(Split(Target.Offset(0, -1), "_")) > 0 Then Target.Offset(0, -1).Value = Mid(Target.Offset(0, -1).Value, 3)
End Select 'fin de l'action en fonction de la cellule modifiée
End Sub
j'ai 2 colonnes B et C
La A contient que des numéros (max 5 chiffres)
dans la colonne C j'ai une liste déroulante qui contient "Annulé" et "Reporté"
mon souhait est le suivant :
si l'utilisateur choisi dans la colonne C : "Annulé", on ajoute dans la colonne B : "A_" & chiffre existant de la colonne B ça donne "A_1923" par exemple
si l'utilisateur choisi dans la colonne C : "Reporté", on ajoute dans la colonne B : "R_" & chiffre existant de la colonne B ça donne "R_1922" par exemple
si l'utilisateur laisse la cellule de la colonne C vide, on garde que les chiffres existants de la colonne B ça donne "1923" par exemple
j'essaye ce code qui bug un peu car si on change de choix il continue a rajouter les A ou R:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'si la cellule contient le mot annulé
If Target.Column = 3 And ActiveCell.Value = "Annulé" Then
Cells(Target.Row, 2).Value = "A" & Cells(Target.Row, 2).Value
ElseIf Target.Column = 3 And ActiveCell.Value = "Reporté" Then
Cells(Target.Row, 2).Value = "R" & Cells(Target.Row, 2).Value
ElseIf Target.Column = 3 And ActiveCell.Value = "" Then
Set obj = CreateObject("vbscript.regexp")
obj.Global = True
obj.Pattern = "[a-z,A-Z]+"
chaine = Cells(Target.Row, 2).Value
chaine = obj.Replace(chaine, "")
Cells(Target.Row, 2).Value = chaine
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
Application.EnableEvents = False
If Left(Cells(Target.Row, 2), 2) = "R_" Or Left(Cells(Target.Row, 2), 2) = "A_" Then Cells(Target.Row, 2) = Mid(Cells(Target.Row, 2), 3, 9 ^ 9)
If ActiveCell.Value = "Annulé" Then Cells(Target.Row, 2) = "A_" & Cells(Target.Row, 2).Value
If ActiveCell.Value = "Reporté" Then Cells(Target.Row, 2) = "R_" & Cells(Target.Row, 2).Value
Application.EnableEvents = True
End Sub
Bonjour
je ne vois pas l’intérêt du VBA la dedans
tu a une liste déroulante(liste de validation je suppose) avec 2 mots
en colonne C ta liste de validation "Annuler;Reporté"
en colonne "B" la formule à étendre à souhait =SI(A1<>"";SI(C1<>"";GAUCHE(C1;1)&"_" &A1;A1);"")
résultat
et puis même en vba !!! pourriez vous me dire a quoi ça sert d'aller recouper l’éventuel préfixe précédemment choisi EN B alors que tu a la donnée saine en A????🤔🤔🤔🤯
Bonjour
je ne vois pas l’intérêt du VBA la dedans
tu a une liste déroulante(liste de validation je suppose) avec 2 mots
en colonne C ta liste de validation "Annuler;Reporté"
en colonne "B" la formule à étendre à souhait =SI(A1<>"";SI(C1<>"";GAUCHE(C1;1)&"_" &A1;A1);"")
et puis même en vba !!! pourriez vous me dire a quoi ça sert d'aller recouper l’éventuel préfixe précédemment choisi EN B alors que tu a la donnée saine en A????🤔🤔🤔🤯
Bonjour
je ne vois pas l’intérêt du VBA la dedans
tu a une liste déroulante(liste de validation je suppose) avec 2 mots
en colonne C ta liste de validation "Annuler;Reporté"
en colonne "B" la formule à étendre à souhait =SI(A1<>"";SI(C1<>"";GAUCHE(C1;1)&"_" &A1;A1);"")
résultat
et puis même en vba !!! pourriez vous me dire a quoi ça sert d'aller recouper l’éventuel préfixe précédemment choisi EN B alors que tu a la donnée saine en A????🤔🤔🤔🤯
et puis même en vba !!! pourriez vous me dire a quoi ça sert d'aller recouper l’éventuel préfixe précédemment choisi EN B alors que tu a la donnée saine en A????🤔🤔🤔🤯
Bonjour Patrick,
une solution VBA va permettre d'éviter les doublons en colonne B en rajoutant un préfixe A ou R, car dans un autre onglet j'utilise la formule RechercheV pour remplir un formulaire suivant le N° inscrit précédemment en B.
je ne vois aussi l'intérêt de rajouter une nouvelle colonne.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
Application.EnableEvents = False
If Left(Cells(Target.Row, 2), 2) = "R_" Or Left(Cells(Target.Row, 2), 2) = "A_" Then Cells(Target.Row, 2) = Mid(Cells(Target.Row, 2), 3, 9 ^ 9)
If ActiveCell.Value = "Annulé" Then Cells(Target.Row, 2) = "A_" & Cells(Target.Row, 2).Value
If ActiveCell.Value = "Reporté" Then Cells(Target.Row, 2) = "R_" & Cells(Target.Row, 2).Value
Application.EnableEvents = True
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD