Insérer un bouton sur Excel 2013
Bonjour,
nouveau sur le site, et débutant sur Excel 2013!
J'aimerai savoir si une condition telle que : si je frappe "1" dans ma cellule, une nouvelle feuille apparaît avec à l'intérieur plusieurs listes déroulantes. Si je frappe rien bien entendu, rien ne se passe.
Lorsque mes données sont rentrées dans la nouvelle feuille de calcul, celle -ci enregistre tout automatiquement et peut se fermer.
Bien sûr, une action que l'on peut répéter sur n'importe quelle cellule.
Merci d'avance pour votre aide.
PS : les listes déroulantes ne sont pas de très bonne qualité.
Bonjour,
Tu ne veux pas placer un bouton (onglet développeurs -> insérer -> bouton de formulaire) ?
Ca me semble plus compliqué de créer une procédure (évenementielle à priori ?!) pour jouer sur un clic sur cellule,
Je me renseigne, apparemment c'est impossible sur clic gauche, possible avec un clic droit ou un double clic (j'ai choisis ici cette dernière option)
Je cherche un peu, ça m'intéresse aussi, je te tiens au courant !
Ps : en fait il faudrait savoir d'où proviennent tes données dans la nouvelle feuille aussi, tu veux faire un copié collé de la feuille déjà existante ?
Je t'ai proposé un fichier en pièce jointe, il ne fait que rajouter une feuille, pas de listes déroulantes (j'attends de voir d'où tu veux les avoir, ces listes
Tout est décrit, j'ai juste pris ton fichier colorié en jaune la cellule A11 (arbitrairement fixée) de la feuille2,
Voici le code ajouté non sur un module, mais sur le code de la Feuille adéquate (la 2).
Option Explicit
Option Base 1
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim n As Byte
Dim m As Byte
'on désactive la mise à jour de l'écran
Application.ScreenUpdating = False
'si l'intersection entre la cellule du double clic et la cellule A11 est non vide
'i.e finalement si on a cliqué sur la cellule A11
If Not Application.Intersect(Target, Range("A11")) Is Nothing Then
'message
MsgBox "Vous avez double-cliqué sur la cellule A11 !"
'n récupère le nombre de feuilles
n = Application.Sheets.Count
'm récupère l'indice de la feuille active (la 2) pour pouvoir y revenir ensuite
m = ThisWorkbook.ActiveSheet.Index
'Ajout d'une nouvelle feuille
ThisWorkbook.Worksheets.Add(after:=Worksheets(n)).Name = "Feuille " & n + 1
'retour sur la feuille du clic
ThisWorkbook.Worksheets(m).Activate
End If
End SubEt voici le fichier :
Edit : n'hésite pas à aller voir les captures d'écran ici, aussi
J'ai choisi l'option lien hypertexte pour me renvoyer sur une différente feuille, concernant les listes déroulantes je les ai laissées telles qu'elles sont.
merci beaucoup, je vais sans doute me servir aussi de ce bouton !!
j'ai réussi à faire un fichier à peu près convenable avec les fonctionnalités que j'espérais.
Encore merci !!
J'aurai besoin de ta précieuse aide encore une fois
Après avoir construit mon tableau j'aimerai y associer des graphiques. Mais encore une fois, un problème. Il faudrait que mes données se valident automatiquement après les avoir rentrées.
je m'explique :
je vais sur le mois de janvier, je rentre mes données grâce au listes déroulantes, et je construis un graphique, par exemple :
pour chaque données "204" un graphique secteurs représentant la part en % du nombre de fois où cette donnée apparaît.
Je ne sais pas vraiment comment l'expliquer, je pense que je dois lui affecter une formule, j'y travaille encore
Je te joins mon fichier :
Coucou,
Je suis content de voir que ça a pu t'aider un peu,
En revanche sur les graphiques je ne gère pas encore bien,
Je regarde cette aprèm après mes cours
Courage,
Si d'autres peuvent aider n'hésitez pas (je suis vraiment pas certain de pouvoir le gérer, là comme ça je penserais à des graphiques dynamiques, mais j'ai pas trop compris ton histoire de formules ... Je relirais, promis
Bonjour,
Je cherche à créer un bouton me permettant de copier le contenu d'une ligne i (qui est choisi par l'utilisateur à travers d'une inputbox) dans la feuille1 dans la première ligne de la feuille4 puis d'enregistrer la feuille5 sous format pdf.
voici mon code qui ne marche pas(il est incomplet, je suis vrm nul en vba):
Sub Bouton217_Cliquer()
Dim i As Integer
Worksheets("Feuil1").Activate
Worksheets("Feuil4").Activate
Worksheets("Feuil5").Activate
Set i = Application.InputBox("Sample")
Sheets("feuil1").Select
Rows("i").Select
Selection.Copy
Sheets("feuil4").Select
Rows("1").Select
Selection.PasteSpecial
End Submerci de m'aider
Moui.. Tu aurais pu ouvrir ta propre discussion,
Cela dit ta demande étant élémentaire (enfin disons que puisque j'en ai le niveau, pour une fois
Option Explicit
Option Base 1
'Je cherche à créer un bouton me permettant de copier le contenu d'une ligne i _
(qui est choisi par l'utilisateur à travers d'une inputbox) dans la feuille1 dans la première ligne de la feuille4 puis d'enregistrer la feuille5 sous format pdf.
'voici mon code qui ne marche pas(il est incomplet, je suis vrm nul en vba):
Sub BoutonChoix()
Dim i As Byte
Dim ws1 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Dim Mat As Variant
Dim j As Byte
Dim trouve As Boolean
Set ws1 = ThisWorkbook.Worksheets("Feuille1")
Set ws4 = ThisWorkbook.Worksheets("Feuille4")
i = Application.InputBox("Quelle ligne de la feuille 1 voulez-vous copier ?", Default:=1, Title:="Choix ligne")
ws1.Rows(i).Copy Destination:=ws4.Rows(1)
'Boucle pour vérifier que la feuille5 n'existe pas encore, et si c'est le cas la créer
'Ca c'est juste pour mon kiff :D
trouve = False
For j = 1 To Application.Sheets.Count
If Sheets(j).Name = "Feuille5" Then trouve = True: GoTo ok
Next j
ok:
If trouve = False Then Sheets.Add(after:=ws4).Name = "Feuille5"
Set ws5 = ThisWorkbook.Worksheets("Feuille5")
ws4.Cells.Copy Destination:=ws5.Cells
'ws5.SaveAs("Feuille5",pdf)
End SubA noter :
1/ Les noms des feuilles sont obligatoirement Feuille1 et Feuille4
2/ Le recopiage se fait dans la ligne 1 de la feuille 4. je peux coder le fait que si tu relances la procédure, ça colle dans la ligne d'en dessous pour ne pas effacer les premières données ...
3/ j'ai pas terminer de coder l'enregistrement en PDF, j'y travaille, mais là je fais une pause : à toute
c'est parfait Douzal je te remercie c'est toop, et pour enregistrer la feuille 2 sous format pdf avec le même bouton j'ai ce code (qui ne marche pas ):
Dim fichier As String
With Worksheets("Feuil2")
fichier = "Symbo" & .Range("C12") & .Range("B11") & ".pdf"
Chemin = rep \ D: Mohamed DELMAACHI \ Mesdocuments \ Symbolisation & fichier.ExportAsFixedFormatType = xlTypePDF, Filename:=Chemin, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
End Sub
merci merci merci
Tu peux copier ce code, j'ai juste rajouté un appel à une procédure toute faite du net (d'ici plus exactement) ;
Je n'ai pas le temps de m'attarder plus sur la façon dont on enregistre,
Ci dessous, procédure d'avant j'ai juste rajouté un appel de la nouvelle procédure.
Option Explicit
Option Base 1
'Je cherche à créer un bouton me permettant de copier le contenu d'une ligne i _
(qui est choisi par l'utilisateur à travers d'une inputbox) dans la feuille1 dans la première ligne de la feuille4 puis d'enregistrer la feuille5 sous format pdf.
'voici mon code qui ne marche pas(il est incomplet, je suis vrm nul en vba):
Sub BoutonChoix()
Dim i As Byte
Dim ws1 As Worksheet
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Dim Mat As Variant
Dim j As Byte
Dim trouve As Boolean
Set ws1 = ThisWorkbook.Worksheets("Feuille1")
Set ws4 = ThisWorkbook.Worksheets("Feuille4")
ws4.Cells.Clear
'En gros, ça dit "Affecte à ws5 la feuille 5 ; s'il y a une erreur à ce moment, pas grave passe à l'étape suivante : là tu vérifie qu'il n'y a 'pas eu d'erreur depuis le début du programme, s'il y en a eu une, c'est forcément que la feuille5 n'existait pas, donc tu la crée.
'Ensuite, qu'elle ait été là depuis le début (tu l'affectes une seconde fois, mais aucune importance) ou qu'elle vienne d'être créée, elle 'sera désormais désignée par Feuille5"
On Error Resume Next
Set ws5 = ThisWorkbook.Worksheets("Feuille5")
If Err.Number <> 0 Then Sheets.Add(after:=ws4).Name = "Feuille5"
Set ws5 = ThisWorkbook.Worksheets("Feuille5")
i = Application.InputBox("Quelle ligne de la feuille 1 voulez-vous copier ?", Default:=1, Title:="Choix ligne")
ws1.Rows(i).Copy Destination:=ws4.Rows(1)
ws4.Cells.Copy Destination:=ws5.Cells
Call PDFActiveSheet
'ws5.SaveAs("Feuille5",pdf)
End SubSub PDFActiveSheet()
Dim ws As Worksheet
Dim strPath As String
Dim myFile As Variant
Dim strFile As String
On Error GoTo errHandler
Set ws = ActiveSheet
'enter name and select folder for file
' start in current workbook folder
strFile = Replace(Replace(ws.Name, " ", ""), ".", "_") _
& "_" _
& Format(Now(), "yyyymmdd\_hhmm") _
& ".pdf"
strFile = ThisWorkbook.Path & "\" & strFile
myFile = Application.GetSaveAsFilename _
(InitialFileName:=strFile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Select Folder and FileName to save")
If myFile <> "False" Then
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=myFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
MsgBox "PDF file has been created."
End If
exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create PDF file"
Resume exitHandler
End SubSi je comprends bien le code, la première partie affecte à StrFile un nom de document, ensuite configuration d'une proposition de nom de fichier et selection du format pdf (là dessus, je décrypte pas forcément tout en détail), et ensuite on vérifie que l'utilisateur a bien cliqué sur OK et enregistré.
Puis message de vérification.
Voilà ce que j'en conclus, et ça marche pour moi.
Seulement, ça soule un peu si tu dois faire ça sur plusieurs pages, d'avoir les messages d'alerte.
Ca se désactive (comme le msgbox à la fin pour dire si l'enregistrement a bien marché)
NB : en fait je viens aussi de changer du code dans la première partie, un code d'une élégance différente, je ne sais s'il l'est plus ou moins, mais j'aime bien
On Error Resume Next
Set ws5 = ThisWorkbook.Worksheets("Feuille5")
If Err.Number <> 0 Then Sheets.Add(after:=ws4).Name = "Feuille5"
Set ws5 = ThisWorkbook.Worksheets("Feuille5")En gros, ça dit "Affecte à ws5 la feuille 5 ; s'il y a une erreur à ce moment, pas grave passe à l'étape suivante : là tu vérifie qu'il n'y a pas eu d'erreur depuis le début du programme, s'il y en a eu une, c'est forcément que la feuille5 n'existait pas, donc tu la crée.
Ensuite, qu'elle ait été là depuis le début (tu l'affectes une seconde fois, mais aucune importance) ou qu'elle vienne d'être créée, elle sera désormais désignée par Feuille5"
C'est plus rapide en tout cas.
Et ensuite, j'efface les feuilles 4 et 5 pour les remettre à 0, et là je commence le copiage etc.
C'est parfait Douzal tu as répondu à toutes mes questions. tu me sauves la vie
merci merci
Bonjour,
Je reviens concernant le code que tu m'as fait DOUZAL, il est parfait sauf qu'il ne marche plus à partir de la 256 ème ligne.
ce qui se passe c'est qu'il ne copie plus la ligne 256 de la feuille1 dans la première ligne de la feuille 4.
J'ai essayé de cherché d'où pouvait venir le pb mais je ne trouve pas.
Si vous pouviez m'aider SVVP
simo77 a écrit :Bonjour,
Je reviens concernant le code que tu m'as fait DOUZAL, il est parfait sauf qu'il ne marche plus à partir de la 256 ème ligne.
ce qui se passe c'est qu'il ne copie plus la ligne 256 de la feuille1 dans la première ligne de la feuille 4.
J'ai essayé de cherché d'où pouvait venir le pb mais je ne trouve pas.
Si vous pouviez m'aider SVVP
Ah oui, j'ai la mauvaise habitude de déclarer BYTE certaines variables que j'estime ne pas dépasser 255 en valeurs...
Ce qui est, ici, faux.
En général pour un compteur pour une petite boucle, ça suffit.
Change ma déclaration de Byte à Integer, voir à Long (si tu as plus de 32.764 valeurs, de mémoire, mets en LONG)
Dim TaVariable as Byte
Dim TaVariable as IntegerCa devrait fonctionner
Merci, ça marche. J'aurais appris plein de trucs
simo77 a écrit :Merci, ça marche. J'aurais appris plein de trucs
Avec plaisir
Pour une fois que je suis assez calé pour aider ...