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