Excel boutons
Fermé
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
-
2 oct. 2018 à 10:41
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 2 oct. 2018 à 16:49
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 2 oct. 2018 à 16:49
A voir également:
- Excel boutons
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Mise en forme conditionnelle excel - Guide
10 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
Modifié le 2 oct. 2018 à 11:46
Modifié le 2 oct. 2018 à 11:46
Bonjour,
Oui c'est possible, mais il faut maitriser vba pour écrire la macro qui est affectée au bouton.
Le bouton d'ajout est le CommandButton1 a adapter
Ce mettre sur la feuille concernée, faire Alt F11 pour accéder au module de la feuille et coller ce code:
j'ai mis un code qui active la feuille 3 comme exemple. Si tu n'arrives pas à l'adapter il faudra que tu donnes ton code
Voilà
Oui c'est possible, mais il faut maitriser vba pour écrire la macro qui est affectée au bouton.
Le bouton d'ajout est le CommandButton1 a adapter
Ce mettre sur la feuille concernée, faire Alt F11 pour accéder au module de la feuille et coller ce code:
Option Explicit Private Sub CommandButton1_Click() Ajouter_Bouton End Sub Sub Ajouter_Bouton() Dim NouveauBouton As OLEObject Dim Code$, NextLine& Dim i As Integer Dim Nom As String Dim Emplacement As Object 'emplacement et nom du bouton Set Emplacement = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille", Type:=8) Nom = InputBox("Entrer le nom du bouton :", "Saisie NOM") Set NouveauBouton = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1") 'création du bouton With NouveauBouton .Name = Nom .Left = Range(Emplacement.Address).Left .Top = Range(Emplacement.Address).Top .Width = 100 .Height = 30 .Object.Caption = Nom 'à adapter suivant la feuille d'ouverture End With ' Comment ajouter le code se rapportant au bouton... Code = "Sub " & Nom & "_Click()" & vbCrLf Code = Code & " On Error Resume Next" & vbCrLf Code = Code & " Sheets(""Feuil3"").Activate" & vbCrLf Code = Code & " If Err <> 0 Then" & vbCrLf Code = Code & " MsgBox ""Impossible d'activer la feuille3.""" & vbCrLf Code = Code & " End If" & vbCrLf Code = Code & "End Sub" ' Ecriture du code dans le module de la feuille (fs) With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule NextLine = .CountOfLines + 1 .InsertLines NextLine, Code End With End Sub
j'ai mis un code qui active la feuille 3 comme exemple. Si tu n'arrives pas à l'adapter il faudra que tu donnes ton code
Voilà
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 11:51
2 oct. 2018 à 11:51
Ok merci beaucoup je vais tester et je reviens te dire!
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 12:04
2 oct. 2018 à 12:04
Bon je t'avoue que j'ai un peu de mal avec la partie "comment ajouter le code se rapportant au bouton".
Donc voici le code que j'avais deja fait concernant les boutons :
Function GetBoiler(ByVal sFile As String) As String
'Dick Kusleika
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.readall
ts.Close
End Function
Option Explicit
Private Sub JeanLuc_Click()
Dim dl As Integer
dl = Sheets("Suivi des colis").Range("a9999").End(xlUp).Row + 1
Sheets("Suivi des colis").Range("a" & dl) = Format(Now, "MM/DD/YYYY HH:MM")
dl = Sheets("Suivi des colis").Range("b9999").End(xlUp).Row + 1
Sheets("Suivi des colis").Range("b" & dl) = "Jean-Luc CEBE"
Matériel.Show
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim EMail As String
Dim strbody As String
Dim SigString As String
Dim Signature As String
Dim i
If OutlookOuvert = False Then i = Shell("Outlook", vbNormalNoFocus)
EMail = "julienlaf2@gmail.com"
' definition du corps du mail "strbody" (sans la signature outlook)
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
strbody = "Bonjour Jean-Luc,</br></br>Nous venons de réceptionner un colis qui t'est destiné.</br></br>Tu peux le récupérer à l'atelier B05.</br></br>Cordialement,"
' recupere la signature outlook, definis à qui envoyer, l'objet et ajoute la signature outlook au corps du mail "strbody"
SigString = Environ("appdata") & _
"\Microsoft\Signatures\mysign.htm"
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = "Le responsable Atelier B05"
End If
On Error Resume Next
OutlookMail.Open
With OutlookMail
.Subject = "Réception d'un colis au B05" & _
Format(heure, "hh:mm") & ""
.To = EMail
.htmlbody = strbody & "<br><br>" & Signature
OutlookMail.Send
End With
End Sub
Function OutlookOuvert() As Boolean
Dim oOL As Object
On Error Resume Next
Set oOL = GetObject(, "Outlook.Application")
On Error GoTo 0
OutlookOuvert = Not (oOL Is Nothing)
Set oOL = Nothing
End Function
</code>
Donc voici le code que j'avais deja fait concernant les boutons :
Function GetBoiler(ByVal sFile As String) As String
'Dick Kusleika
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.readall
ts.Close
End Function
Option Explicit
Private Sub JeanLuc_Click()
Dim dl As Integer
dl = Sheets("Suivi des colis").Range("a9999").End(xlUp).Row + 1
Sheets("Suivi des colis").Range("a" & dl) = Format(Now, "MM/DD/YYYY HH:MM")
dl = Sheets("Suivi des colis").Range("b9999").End(xlUp).Row + 1
Sheets("Suivi des colis").Range("b" & dl) = "Jean-Luc CEBE"
Matériel.Show
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim EMail As String
Dim strbody As String
Dim SigString As String
Dim Signature As String
Dim i
If OutlookOuvert = False Then i = Shell("Outlook", vbNormalNoFocus)
EMail = "julienlaf2@gmail.com"
' definition du corps du mail "strbody" (sans la signature outlook)
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
strbody = "Bonjour Jean-Luc,</br></br>Nous venons de réceptionner un colis qui t'est destiné.</br></br>Tu peux le récupérer à l'atelier B05.</br></br>Cordialement,"
' recupere la signature outlook, definis à qui envoyer, l'objet et ajoute la signature outlook au corps du mail "strbody"
SigString = Environ("appdata") & _
"\Microsoft\Signatures\mysign.htm"
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = "Le responsable Atelier B05"
End If
On Error Resume Next
OutlookMail.Open
With OutlookMail
.Subject = "Réception d'un colis au B05" & _
Format(heure, "hh:mm") & ""
.To = EMail
.htmlbody = strbody & "<br><br>" & Signature
OutlookMail.Send
End With
End Sub
Function OutlookOuvert() As Boolean
Dim oOL As Object
On Error Resume Next
Set oOL = GetObject(, "Outlook.Application")
On Error GoTo 0
OutlookOuvert = Not (oOL Is Nothing)
Set oOL = Nothing
End Function
</code>
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 12:06
2 oct. 2018 à 12:06
Ah oui et ce que je t'ai envoyé n'ai pas le code complet. Tous est refait pour chaque prénom à chaque fois.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
Modifié le 2 oct. 2018 à 12:28
Modifié le 2 oct. 2018 à 12:28
Voilà le code complet
@+ Le Pivert
Option Explicit 'déclaration des variables Dim NouveauBouton As OLEObject Dim Code$, NextLine& Dim i As Integer Dim Nom As String Dim Emplacement As Object Dim OutlookApp As Object Dim OutlookMail As Object Dim EMail As String Dim strbody As String Dim SigString As String Dim Signature As String Dim dl As Integer Private Sub CommandButton1_Click() Ajouter_Bouton End Sub Sub Ajouter_Bouton() 'emplacement et nom du bouton Set Emplacement = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille", Type:=8) Nom = InputBox("Entrer le nom du bouton :", "Saisie NOM") Set NouveauBouton = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1") 'création du bouton With NouveauBouton .Name = Nom .Left = Range(Emplacement.Address).Left .Top = Range(Emplacement.Address).Top .Width = 100 .Height = 50 .Object.Caption = Nom End With ' Comment ajouter le code se rapportant au bouton... Code = "Sub " & Nom & "_Click()" & vbCrLf Code = Code & " On Error Resume Next" & vbCrLf Code = Code & " envoimail" & vbCrLf Code = Code & " If Err <> 0 Then" & vbCrLf Code = Code & " MsgBox ""Impossible d'envoyer le mail.""" & vbCrLf Code = Code & " End If" & vbCrLf Code = Code & "End Sub" ' Ecriture du code dans le module de la feuille (fs) With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule NextLine = .CountOfLines + 1 .InsertLines NextLine, Code End With End Sub Sub envoimail() dl = Sheets("Suivi des colis").Range("a9999").End(xlUp).Row + 1 Sheets("Suivi des colis").Range("a" & dl) = Format(Now, "MM/DD/YYYY HH:MM") dl = Sheets("Suivi des colis").Range("b9999").End(xlUp).Row + 1 Sheets("Suivi des colis").Range("b" & dl) = Nom 'j'ai changer JeanLuc par la variable Nom, a toi de voir??? Matériel.Show EMail = "julienlaf2@gmail.com" ' definition du corps du mail "strbody" (sans la signature outlook) Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMail = OutlookApp.CreateItem(0) strbody = "Bonjour " & Nom & ",</br></br>Nous venons de réceptionner un colis qui t'est destiné.</br></br>Tu peux le récupérer à l'atelier B05.</br></br>Cordialement," 'j'ai changer JeanLuc par la variable Nom, a toi de voir??? ' recupere la signature outlook, definis à qui envoyer, l'objet et ajoute la signature outlook au corps du mail "strbody" SigString = Environ("appdata") & _ "\Microsoft\Signatures\mysign.htm" If Dir(SigString) <> "" Then Signature = GetBoiler(SigString) Else Signature = "Le responsable Atelier B05" End If On Error Resume Next OutlookMail.Open With OutlookMail .Subject = "Réception d'un colis au B05" & _ Format(heure, "hh:mm") & "" .To = EMail .htmlbody = strbody & "<br><br>" & Signature OutlookMail.Send End With End Sub Function GetBoiler(ByVal sFile As String) As String 'Dick Kusleika Dim fso As Object Dim ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) GetBoiler = ts.readall ts.Close End Function Function OutlookOuvert() As Boolean Dim oOL As Object On Error Resume Next Set oOL = GetObject(, "Outlook.Application") On Error GoTo 0 OutlookOuvert = Not (oOL Is Nothing) Set oOL = Nothing End Function
@+ Le Pivert
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 12:43
2 oct. 2018 à 12:43
il me dit nom ambigue detecte : getboiler
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 12:56
2 oct. 2018 à 12:56
Et incompatibilité de type à ce niveau :
Set Emplacement = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille", Type:=8)
Set Emplacement = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille", Type:=8)
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
2 oct. 2018 à 13:40
2 oct. 2018 à 13:40
aucun problème chez moi, si ce n'est que le mail ne part pas par manque d’élément. Pas de bug:
https://www.cjoint.com/c/HJclMEKZx2Q
Voilà
@+
https://www.cjoint.com/c/HJclMEKZx2Q
Voilà
@+
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 14:00
2 oct. 2018 à 14:00
Merci mais en fait, quand je rentre le nouveau prénom et que je valide, il me marque erreur d’exécution 1004 : l’accès par programme au projet Visual Basic n'est pas fiable.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
2 oct. 2018 à 14:16
2 oct. 2018 à 14:16
Je ne vois pas pourquoi tu t'embêtes avec un bouton par personne pour utiliser la même macro avec le nom qui diffère!
Utilise une Inputbox avec ta variable Nom comme je l'ai fait, Tu mets ta ligne de code comme ceci :
et le tour est joué!
Un seul bouton
Voilà
Utilise une Inputbox avec ta variable Nom comme je l'ai fait, Tu mets ta ligne de code comme ceci :
Sub envoimail() Dim Nom As String Nom = InputBox("Entrer le nom :", "Saisie NOM")
et le tour est joué!
Un seul bouton
Voilà
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
2 oct. 2018 à 14:28
2 oct. 2018 à 14:28
Pour le nom, il ne faut pas de nom composé avec trait d'union ou d'espace. Car c'est ce nom qui est donné au bouton!!!
si tu veux quand même mettre un bouton par personne, il faudra changer ce code:
Voilà
si tu veux quand même mettre un bouton par personne, il faudra changer ce code:
' Comment ajouter le code se rapportant au bouton... Code = "Sub " & Nom & "_Click()" & vbCrLf Code = Code & " Nom = " & Nom & ".Caption" & vbCrLf 'ajout de cette ligne pour avoir le nom Code = Code & " On Error Resume Next" & vbCrLf Code = Code & " envoimail" & vbCrLf Code = Code & " If Err <> 0 Then" & vbCrLf Code = Code & " MsgBox ""Impossible d'envoyer le mail.""" & vbCrLf Code = Code & " End If" & vbCrLf Code = Code & "End Sub"
Voilà
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
2 oct. 2018 à 14:34
2 oct. 2018 à 14:34
Pour cela:
l’accès par programme au projet Visual Basic n'est pas fiable.
Va dans le Ruban: Developpeur; Sécurité des Macros et cocher:
accès approuvé au modèle d'objet du projet VBA
@+
l’accès par programme au projet Visual Basic n'est pas fiable.
Va dans le Ruban: Developpeur; Sécurité des Macros et cocher:
accès approuvé au modèle d'objet du projet VBA
@+
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 14:32
2 oct. 2018 à 14:32
Merci beaucoup mais après qaund mon bouton est crée il n'arrive pas reproduire les mêmes actions que les autres boutons il ne se passe rien quand j'appuie.
Dsl je ne suis pas très bon...
Dsl je ne suis pas très bon...
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 14:40
2 oct. 2018 à 14:40
ah merci ça marche mais une autre erreur apparaît, cette fois c'est l'erreur d’exécution 9 : l'indice n’appartient pas à la sélection
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
2 oct. 2018 à 15:23
2 oct. 2018 à 15:23
qu'elle est la ligne surlignée en jaune?
quand tu passes le curseur sur toute la ligne, qu'indique-t-il?
quand tu passes le curseur sur toute la ligne, qu'indique-t-il?
Jul997
Messages postés
11
Date d'inscription
mercredi 19 septembre 2018
Statut
Membre
Dernière intervention
2 octobre 2018
2 oct. 2018 à 15:29
2 oct. 2018 à 15:29
je n'ai malheureusement aucune ligne surlignée en jaune...
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
2 oct. 2018 à 15:45
2 oct. 2018 à 15:45
Il faut que tu cherches par toi même où cela se produit avec la méthode Pas à pas:
https://excel.quebec/excel-programmation-vba/vba-mode-pas-pas/
https://excel.quebec/excel-programmation-vba/vba-mode-pas-pas/
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
Modifié le 2 oct. 2018 à 17:14
Modifié le 2 oct. 2018 à 17:14
Voilà le code opérationnel!
@+ Le Pivert
Option Explicit 'allez dans outils, Référence et cochez la référence Microsoft Outlook 12.0 object library 'déclaration des variables Dim NouveauBouton As OLEObject Dim Code$, NextLine& Dim i As Integer Dim Nom As String Dim Emplacement As Object Dim OutlookApp As Object Dim OutlookMail As Object Dim EMail As String Dim strbody As String Dim SigString As String Dim Signature As String Dim dl As Integer Private Sub CommandButton1_Click() Ajouter_Bouton End Sub Sub Ajouter_Bouton() 'emplacement et nom du bouton Set Emplacement = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille", Type:=8) Nom = InputBox("Entrer le nom du bouton :", "Saisie NOM") Set NouveauBouton = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1") 'création du bouton With NouveauBouton .Name = Nom .Left = Range(Emplacement.Address).Left .Top = Range(Emplacement.Address).Top .Width = 100 .Height = 50 .Object.Caption = Nom End With ' Comment ajouter le code se rapportant au bouton... Code = "Sub " & Nom & "_Click()" & vbCrLf Code = Code & " Nom = " & Nom & ".Caption" & vbCrLf Code = Code & " On Error Resume Next" & vbCrLf Code = Code & " envoimail" & vbCrLf Code = Code & " If Err <> 0 Then" & vbCrLf Code = Code & " MsgBox ""Impossible d'envoyer le mail.""" & vbCrLf Code = Code & " End If" & vbCrLf Code = Code & "End Sub" ' Ecriture du code dans le module de la feuille (fs) With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule NextLine = .CountOfLines + 1 .InsertLines NextLine, Code End With End Sub Sub envoimail() dl = Sheets("Suivi des colis").Range("a9999").End(xlUp).Row + 1 Sheets("Suivi des colis").Range("a" & dl) = Format(Now, "MM/DD/YYYY HH:MM") dl = Sheets("Suivi des colis").Range("b9999").End(xlUp).Row + 1 Sheets("Suivi des colis").Range("b" & dl) = Nom Matériel.Show EMail = "julienlaf2@gmail.com" ' definition du corps du mail "strbody" (sans la signature outlook) Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMail = OutlookApp.CreateItem(0) strbody = "Bonjour " & Nom & ",</br></br>Nous venons de réceptionner un colis qui t'est destiné.</br></br>Tu peux le récupérer à l'atelier B05.</br></br>Cordialement," 'j'ai changer JeanLuc par la variable Nom, a toi de voir??? ' recupere la signature outlook, definis à qui envoyer, l'objet et ajoute la signature outlook au corps du mail "strbody" SigString = Environ("appdata") & _ "\Microsoft\Signatures\mysign.htm" If Dir(SigString) <> "" Then Signature = GetBoiler(SigString) Else Signature = "Le responsable Atelier B05" End If On Error Resume Next With OutlookMail .Display .To = EMail .CC = "" .BCC = "" .Subject = "Réception d'un colis au B05" & _ Format(Now, "hh:mm") & "" .HTMLBody = strbody & "<br><br>" & Signature .Send End With MsgBox "Mail envoyé." End Sub Function GetBoiler(ByVal sFile As String) As String 'Dick Kusleika Dim fso As Object Dim ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) GetBoiler = ts.readall ts.Close End Function Function OutlookOuvert() As Boolean Dim oOL As Object On Error Resume Next Set oOL = GetObject(, "Outlook.Application") On Error GoTo 0 OutlookOuvert = Not (oOL Is Nothing) Set oOL = Nothing End Function
@+ Le Pivert