Concatener deux cellules : nom et prénom

Bonjour à tous ,

Je vous explique mon problème , je suis débutant en VBA. Je cherche à concaténer deux variables nom et prénom de sorte que mon affichage final dans ma cellule soit tel que : "Martin DUPONT"

Voici mes lignes de codes :

Sub auto_open()

Dim barre As CommandBar

Dim bouton As CommandBarControl

On Error Resume Next

CommandBars("jb-Majuscules").Delete

Set barre = CommandBars.Add(Name:="jb-Majuscules")

barre.Visible = True

Set bouton = CommandBars("jb-Majuscules").Controls.Add(Type:=msoControlButton)

bouton.BeginGroup = True

bouton.Style = msoButtonCaption

bouton.OnAction = "Majuscules"

bouton.Caption = "Majuscules"

Set bouton = CommandBars("jb-Majuscules").Controls.Add(Type:=msoControlButton)

bouton.BeginGroup = True

bouton.Style = msoButtonCaption

bouton.OnAction = "NomPropre"

bouton.Caption = "NomPropre"

End Sub

Sub majuscules()

For Each c In Selection

If Not c.HasFormula Then

c.Value = UCase(c.Value)

End If

Next c

End Sub

Sub Nompropre()

For Each c In Selection

If Not c.HasFormula Then

c.Value = Application.Proper(c.Value)

End If

Next c

End Sub

D'autre part j'ai essayé cette solution pour ajouter un bouton personnalisé faisant appel à une fonction personnalisée dans la barre d'outils :

https://excel.quebec/excel-formules-et-fonctions/excel-fonction-personnalisee/

Sauf que en reproduisant son exemple rien ne change

Merci d'avance et bonne journée à vous tous.

Bonjour,

un fichier Excel bien sur!

Bonjour,

Une piste. Dans l'hypothèse où les noms de famille se trouvent à gauche des prénoms (colonnes séparées), sélectionner la colonne des noms de famille et cliquer sur le bouton, les prénoms seront ajoutés aux noms de famille :

Sub auto_open()

    Dim barre As CommandBar
    Dim bouton As CommandBarControl

    On Error Resume Next
    CommandBars("jb-Majuscules").Delete
    Set barre = CommandBars.Add(Name:="jb-Majuscules")
    barre.Visible = True

    Set bouton = CommandBars("jb-Majuscules").Controls.Add(Type:=msoControlButton)

    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "Majuscules"
        .Caption = "Majuscules"

    End With

    Set bouton = CommandBars("jb-Majuscules").Controls.Add(Type:=msoControlButton)

    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "NomPropre"
        .Caption = "NomPropre"

    End With

    Set bouton = CommandBars("jb-Majuscules").Controls.Add(Type:=msoControlButton)

    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "Concatener"
        .Caption = "Concatener"

    End With

End Sub

Sub majuscules()

    Dim C As Range

    For Each C In Selection
        If Not C.HasFormula Then C.Value = UCase(C.Value)
    Next C

End Sub

Sub Nompropre()

    Dim C As Range

    For Each C In Selection
        If Not C.HasFormula Then C.Value = Application.Proper(C.Value)
    Next C

End Sub

Sub Concatener()

    Dim C As Range

    If Selection.Columns.Count > 1 Then MsgBox "Sélectionner seulement une colonne et cette dernière doit être la colonne de gauche !": Exit Sub

    For Each C In Selection
        If Not C.HasFormula Then C.Value = C.Value & " " & C.Offset(, 1).Value
    Next C

End Sub

Merci beaucoup pour ta réponse. J'ai trouvé la solution grâce à toi , par contre je n'arrive à faire appel au formulaire que j'ai crée dans sub auto_open , il ne s'affiche pas. Par ailleurs je n'arrive toujours pas à ajouter une fonction personnalisée dans mon ruban de formule comme indiquer sur le lien

6macro.xlam (11.04 Ko)

A la place de "auto_open()", utilises "Workbook_Open()" (il y a bien longtemps qu'on n'utilise plus "auto_open()" et "auto_close()").

Si tu veux appeler une fonction perso sur clic d'un bouton, il te faut passer par l'intermédiaire d'une sub car un bouton ne peut pas appeler directement une fonction (à ma connaissance bien sûr !). Si la fonction demande des arguments, il te faut les passer dans OnAction (voir plus bas les explications et la procédure de test) mais attention, ce n'est pas si simple que ça !

Exemple tout simple, une fonction perso qui retourne la date :

Function LADATE()

    LADATE = Date

End Function

La sub qui appelle la fonction :

Sub AfficherDate()

    MsgBox LADATE

End Sub

et le bouton qui appelle la sub :

Set bouton = barre.Controls.Add(Type:=msoControlButton)

'appelle la sub qui appelle la fonction
With bouton

    .BeginGroup = True
    .Style = msoButtonCaption
    .OnAction = "AfficherDate"
    .Caption = "AfficherDate"

End With

Le code complet avec le bouton et l'ouverture de l'UserForm qui s'appelle "UserForm1" :

Private Sub Workbook_Open()

    Dim barre As CommandBar
    Dim bouton As CommandBarControl

    On Error Resume Next
    Application.CommandBars("jbMajuscules").Delete
    On Error GoTo 0

    Set barre = Application.CommandBars.Add("jbMajuscules")

    barre.Visible = True

    Set bouton = barre.Controls.Add(Type:=msoControlButton)

    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "Majuscules"
        .Caption = "Majuscules"

    End With

    Set bouton = barre.Controls.Add(Type:=msoControlButton)

    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "NomPropre"
        .Caption = "NomPropre"

    End With

    Set bouton = barre.Controls.Add(Type:=msoControlButton)

    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "Concatener"
        .Caption = "Concatener"

    End With

    Set bouton = barre.Controls.Add(Type:=msoControlButton)

    'appelle la sub qui appelle la fonction
    With bouton

        .BeginGroup = True
        .Style = msoButtonCaption
        .OnAction = "LADATE"
        .Caption = "AfficherDate"

    End With

    UserForm1.Show '<--- ici, appel de la Form

End Sub

Ici, le principe de passage des arguments dans OnAction(). Pour le test, un bouton est créé sur la feuille active, il suffit de cliquer dessus pour voir apparaître une boite de message avec les arguments passés. Attention, certains type d'arguments ont besoin d'être encadrés par des triples guillemets (voir commentaire) :

Sub MonBouton()

    Dim action As String
    Dim Btn As Shape
    Dim Fe As Worksheet
    Dim Arg1 As Integer
    Dim Arg2 As Long
    Dim Arg3 As Double
    Dim Arg4 As Single
    Dim B As Boolean
    Dim D As Date

    Set Fe = ActiveSheet

    Set Btn = Fe.Shapes.AddFormControl(xlButtonControl, 0, 0, 100, 30)

    Arg1 = 10
    Arg2 = 2000
    Arg3 = 31.256
    Arg4 = 125.47
    B = True
    D = #7/3/2014#

    'tripler les guillemets pour les arguments String, Double, Single, Date et Boolean
    'bizarrement Integer et Long ne le nécéssite pas, probablement à cause du séparateur décimal qui n'existe pas pour ces deux types
    action = "'synthese2 """ & Fe.Name & """," & Arg1 & "," & Arg2 & ",""" & Arg3 & """,""" & Arg4 & """,""" & B & """,""" & D & "'"

    With Btn

        .TextFrame.Characters.Caption = "Synthèse"
        .OnAction = action

    End With

End Sub

Sub synthese2(NomFeuille As String, A1 As Integer, A2 As Integer, A3 As Double, A4 As Single, B As Boolean, D As Date)

    MsgBox NomFeuille & vbCrLf & A1 & vbCrLf & A2 & vbCrLf & A3 & vbCrLf & A4 & vbCrLf & B & vbCrLf & D

End Sub

Je te remercie pour cette solution détaillée , je vais m'y pencher dessus plus tard. Par contre savez-vous comment puis-je personnaliser ma barre de formules excels svp en ajoutant une fonction personnalisée à une catégorie comme texte ?

Bonjour dinaraza & Theze & à tous

Sub test()
Application.MacroOptions Macro:="MaFonction", Category:=7
End Sub
Rechercher des sujets similaires à "concatener deux nom prenom"