XL 2013 Concatener avec condition

Dafaka7

XLDnaute Junior
Bonjour le forum,

Je cherche à faire une fonction Concatener dans la cellule Numéro.
Il faudrait que si dans Service il y'a écrit Production alors ça récupère le N° + "PRO"
Qualité = N° + "QUA"
Maintenance = N° + "MTN"
Outillage = N° + "OUT"

1657091307648.png


Merci
 

Pièces jointes

  • 1657091129091.png
    1657091129091.png
    6.9 KB · Affichages: 24
Solution
Re,
Aucun de vos tableaux ne comporte une colonne Numéro.
Donc au pif, si la colonne Numéro est en Récupération colonne 2, alors on peut faire :
VB:
If Not Intersect(Target, [Tab_PDCA]) Is Nothing Then
    tablo = [Liste_Services]
    If Cells(Target.Row, 1) <> "" And Cells(Target.Row, 6) <> "" Then
        For i = 1 To UBound(tablo)
            If tablo(i, 1) = Cells(Target.Row, 6) Then Abrev = tablo(i, 2)
        Next i
        Application.EnableEvents = False
        Cells(Target.Row, 2) = Cells(Target.Row, 1) & Abrev
        Application.EnableEvents = True
    End If
End If
J'ai modifié le tableau Liste_Services pour lui adjoindre une colonne Abréviation, ce qui simplifie le code.
1657098531742.png

Evidemment ce code est à inclure dans une de vos...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dafaka,
Ne trouvez vous pas qu'un petit fichier test aurait pu être utile ?
Ne serait ce que pour éviter de tout se retaper .
Alors voici une formule en format image que vous affectionnez tant :
1657092009106.png


... sinon en un peu mieux :
VB:
=SI(F1="Production";A1&" PRO";
SI(F1="Qualité";A1&" QUA";
SI(F1="Maintenance";A1&" MTN";
SI(F1="Outillage";A1&" OUT";
""))))
A évidemment adapter suivant votre fichier, en particulier avec votre tableau structuré.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Aucun de vos tableaux ne comporte une colonne Numéro.
Donc au pif, si la colonne Numéro est en Récupération colonne 2, alors on peut faire :
VB:
If Not Intersect(Target, [Tab_PDCA]) Is Nothing Then
    tablo = [Liste_Services]
    If Cells(Target.Row, 1) <> "" And Cells(Target.Row, 6) <> "" Then
        For i = 1 To UBound(tablo)
            If tablo(i, 1) = Cells(Target.Row, 6) Then Abrev = tablo(i, 2)
        Next i
        Application.EnableEvents = False
        Cells(Target.Row, 2) = Cells(Target.Row, 1) & Abrev
        Application.EnableEvents = True
    End If
End If
J'ai modifié le tableau Liste_Services pour lui adjoindre une colonne Abréviation, ce qui simplifie le code.
1657098531742.png

Evidemment ce code est à inclure dans une de vos Worksheet_Change existantes, sur la bonne page.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
J'ai rajouté ça dans la touche Valider :
VB:
    Dim tablo, i%, Abrev
    tablo = [Liste_Services]
    For i = 1 To UBound(tablo)
        If tablo(i, 1) = Me.CB_Service Then Abrev = tablo(i, 2)             'Cherche l'abreviation dans la liste
    Next i
    Application.EnableEvents = False
    If Abrev = "" Then
        .Range(.ListRows.Count + 1, 2) = CDbl(Me.TB_Num) & Me.CB_Service
    Else
        .Range(.ListRows.Count + 1, 2) = CDbl(Me.TB_Num) & Abrev            'Ecrit le numéro dans la colonne 2
    End If
    Application.EnableEvents = True
Pas pu tester car je ne peut évidemment pas charger votre fichier "T:\UAP EMBOUT\PDCA\".
Question : Pourquoi avoir mis dans les services, les abréviations aussi ? On a Maintenance et MTN.
Ce qui oblige à mettre le IF THEN ELSE, si le services n'est pas trouvé dans la liste services alors on prend par défaut le service de l'userform.
 

Pièces jointes

  • Format réunion GT 2022 V2 (1).xlsm
    724.5 KB · Affichages: 2

Dafaka7

XLDnaute Junior
@sylvanu

Je n'arrive pas à faire en sorte que ça ne prenne que la colonne 1 du tableau [liste_service] c'est pour ça que j'avais séparé le tableau en 2 pour pas avoir les abréviations dans le formulaire.

ça fonctionne mais j'aurais voulu que ce soit du coup la colonne Numéro qui soit noté dans l'autre fichier.
J'ai essayé avec ceci mais ça ne fonctionne pas

VB:
TD.DataBodyRange(PV, 1).Value = TS.DataBodyRange(LI, 2).Value

Je pense que c'est parce que la ligne de TS n'est du coup pas déclaré mais je ne sais pas comment la déclarer.
 

Pièces jointes

  • Format réunion GT 2022 V2.xlsm
    706 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je pense qu'il y a plus simple.
On crée une variable ChaineAbrev qu'on initialise en même temps qu'on remplit la colonne 2 du tableau, ensuite il suffit de faire :
VB:
TD.DataBodyRange(PV, 1).Value = ChaineAbrev
 

Pièces jointes

  • Format réunion GT 2022 V2 (2).xlsm
    717.4 KB · Affichages: 2

Dafaka7

XLDnaute Junior
@sylvanu
Parfait, mais il y a toujours les abréviations dans la liste déroulantes, comment je pourrais modifier ce code pour dire que Service = [Liste_Service] Colonne 1 ?
VB:
Private Sub UserForm_Initialize()
Dim ligne As Long
Dim Service As Variant
    ligne = ActiveCell.Row
    Me.TB_Num = Application.WorksheetFunction.Max(Range("Tab_PDCA[N°]")) + 1 'Numérotation automatique
    Me.TB_Indicateur = Range("A" & ligne)                                    'Indicateur automatique
    Me.TB_Date = Range("A1")
    For Each Service In [Liste_Services]                                     'Liste déroulante pour le service
        Me.CB_Service.AddItem Service
    Next Service


End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Remplir la listbox avec :
VB:
For N = 1 To [Liste_Services].Rows.Count
  Me.CB_Service.AddItem [Liste_Services[Services]].Item(N)
Next N
Mais dans ce cas le IF THEN ELSE ne doit plus être utile.
Code:
    If Abrev = "" Then
        .Range(.ListRows.Count + 1, 2) = CDbl(Me.TB_Num) & Me.CB_Service
        ChaineAbrev = CDbl(Me.TB_Num) & Me.CB_Service
    Else
        .Range(.ListRows.Count + 1, 2) = CDbl(Me.TB_Num) & Abrev            'Ecrit le numéro dans la colonne 2
        ChaineAbrev = CDbl(Me.TB_Num) & Abrev
    End If

peut être remplacé par :

        .Range(.ListRows.Count + 1, 2) = CDbl(Me.TB_Num) & Me.CB_Service
        ChaineAbrev = CDbl(Me.TB_Num) & Me.CB_Service
puisqu'il était là au cas où on choisirait une abrev plutôt qu'un mot entier.
A tester, n'est pas dans la PJ. Mais on peut aussi le laisser, ça n'a pas d'importance.
 

Pièces jointes

  • Format réunion GT 2022 V2 (2) (1).xlsm
    722.8 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 796
Membres
101 817
dernier inscrit
carvajal