XL 2013 Concatener avec condition

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 !

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: 26
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...
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é.
 
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.
 
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

@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

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

- 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

Discussions similaires

Réponses
10
Affichages
58
Retour